Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var execSync = require('child_process').execSync;
- var fs = require("fs");
- let nodes; //nodeinfo as output from maas
- let base_nodes; //nodeinfo that we want to convert to
- function docmd(cmd) {
- try {
- let ret = execSync(cmd);
- ret = ret.toString();
- if (ret === "Not Found") {
- console.warn(" Can 't find node! " + cmd)
- ret = "";
- }
- return ret;
- } catch (ex) {
- console.error(cmd, ex, ex.stdout, ex.stderr);
- process.exit(1);
- }
- }
- console.log("Getting nodes");
- parsenodes();
- function exportInfo() {
- //useful for grabbing only the things we need from nodes
- let base = [];
- for (let a of nodes) {
- var ne = {
- system_id: a.system_id,
- hostname: a.hostname,
- power_type: a.power_type,
- fqdn: a.fqdn,
- ip_addresses: a.ip_addresses.slice(),
- power_parameters_power_address: a.power_address,
- power_parameters_power_driver: a.power_driver,
- power_parameters_power_boot_type: a.power_boot_type,
- power_parameters_power_pass: a.power_pass,
- power_parameters_power_user: a.power_user,
- interface_set: []
- };
- for (let b of a.interface_set) {
- ne.interface_set.push({
- mac_address: b.mac_address,
- name: b.name
- });
- }
- console.log(base);
- }
- }
- function parsenodes() {
- var nstr = docmd("maas maas nodes read");
- nodes = JSON.parse(nstr);
- nodes = nodes.filter(function(n) {
- return n.node_type_name === "Machine"
- });
- let temp = 30;
- for (let a of nodes) {
- temp--;
- if (temp == 0) {
- break;
- }
- console.log(a.system_id, a.hostname);
- let pprms = docmd("maas maas machine power-parameters " + a.system_id);
- pprms = JSON.parse(pprms);
- for (let ppf in pprms) {
- a["power_parameters_" + ppf] = pprms[ppf];
- }
- }
- //console.log(nodes);
- console.log("Nodes: ", nodes.length);
- // exportInfo();
- sanitize();
- }
- function sanitize() {
- var contents = fs.readFileSync("nodes_master.json");
- var base_nodes = JSON.parse(contents);
- for (let nn of nodes) {
- let changes = [];
- let baseNode = base_nodes.find(function(bn) {
- return bn.interface_set[0].mac_address === nn.interface_set[0].mac_address;
- });
- if (baseNode === undefined) {
- console.error("Unkown Mac ", nn.interface_set[0].mac_address);
- continue;
- }
- let note = false;
- for (let p of ["hostname", "fqdn", "power_parameters_power_address", "power_type", "power_parameters_power_boot_type"]) {
- if (baseNode[p] === nn[p]) {
- continue;
- }
- changes.push({
- param: p,
- frm: nn[p],
- to: baseNode[p]
- });
- }
- if ((nn.status_name == "Ready" || nn.status_name == "Broken") && baseNode.ip_addresses[0] != nn.ip_addresses[0]) {
- //assume if this is the case then we need to add link
- let links = JSON.parse(docmd("maas maas interfaces read "+nn.system_id));
- if(links.length > 0 && links[0].links.length > 0){
- let link = links[0].links[0];
- if (link.mode == "auto"){
- console.log(baseNode.hostname);
- console.log("attempting to delete link:",link.id);
- let nicid = nn.interface_set[0].id;
- docmd("maas maas interface unlink-subnet "+nn.system_id+" "+nicid+" id="+link.id);
- console.log("creating new static link");
- docmd("maas maas interface link-subnet "+nn.system_id+" "+nicid+" mode=STATIC subnet=2 ip_address="+baseNode.ip_addresses[0]);
- }
- } else if(links.length > 0 && links[0].links.length == 0){
- console.log(baseNode.hostname);
- console.log("attempting to add link:");
- let nicid = nn.interface_set[0].id;
- docmd("maas maas interface link-subnet "+nn.system_id+" "+nicid+" mode=STATIC subnet=2 ip_address="+baseNode.ip_addresses[0]);
- }
- }
- if (!nn.power_parameters_power_user) {
- changes.push({
- param: "power_parameters_power_user",
- frm: "undef",
- to: "ADMIN"
- });
- }
- if (!nn.power_parameters_power_pass) {
- changes.push({
- param: "power_parameters_power_pass",
- frm: "undef",
- to: "ADMIN"
- });
- }
- if (changes.length) {
- console.log("\nNode " + nn.hostname + " (" + baseNode.hostname + ") parameter missmatch: ");
- let cmdstr = "maas maas machine update " + nn.system_id + " ";
- for (let cn of changes) {
- console.log(cn);
- cmdstr += cn.param + "=" + cn.to + " ";
- }
- console.log(cmdstr);
- docmd(cmdstr);
- }
- }
- }
Add Comment
Please, Sign In to add comment