Guest User

Untitled

a guest
Apr 11th, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.51 KB | None | 0 0
  1. var execSync = require('child_process').execSync;
  2. var fs = require("fs");
  3. let nodes; //nodeinfo as output from maas
  4. let base_nodes; //nodeinfo that we want to convert to
  5.  
  6. function docmd(cmd) {
  7. try {
  8. let ret = execSync(cmd);
  9. ret = ret.toString();
  10. if (ret === "Not Found") {
  11. console.warn(" Can 't find node! " + cmd)
  12. ret = "";
  13. }
  14. return ret;
  15. } catch (ex) {
  16. console.error(cmd, ex, ex.stdout, ex.stderr);
  17. process.exit(1);
  18. }
  19. }
  20.  
  21. console.log("Getting nodes");
  22. parsenodes();
  23.  
  24. function exportInfo() {
  25. //useful for grabbing only the things we need from nodes
  26. let base = [];
  27. for (let a of nodes) {
  28. var ne = {
  29. system_id: a.system_id,
  30. hostname: a.hostname,
  31. power_type: a.power_type,
  32. fqdn: a.fqdn,
  33. ip_addresses: a.ip_addresses.slice(),
  34. power_parameters_power_address: a.power_address,
  35. power_parameters_power_driver: a.power_driver,
  36. power_parameters_power_boot_type: a.power_boot_type,
  37. power_parameters_power_pass: a.power_pass,
  38. power_parameters_power_user: a.power_user,
  39. interface_set: []
  40. };
  41. for (let b of a.interface_set) {
  42. ne.interface_set.push({
  43. mac_address: b.mac_address,
  44. name: b.name
  45. });
  46. }
  47. console.log(base);
  48. }
  49. }
  50.  
  51. function parsenodes() {
  52. var nstr = docmd("maas maas nodes read");
  53. nodes = JSON.parse(nstr);
  54. nodes = nodes.filter(function(n) {
  55. return n.node_type_name === "Machine"
  56. });
  57. let temp = 30;
  58. for (let a of nodes) {
  59. temp--;
  60. if (temp == 0) {
  61. break;
  62. }
  63. console.log(a.system_id, a.hostname);
  64. let pprms = docmd("maas maas machine power-parameters " + a.system_id);
  65. pprms = JSON.parse(pprms);
  66. for (let ppf in pprms) {
  67. a["power_parameters_" + ppf] = pprms[ppf];
  68. }
  69. }
  70.  
  71. //console.log(nodes);
  72. console.log("Nodes: ", nodes.length);
  73. // exportInfo();
  74. sanitize();
  75. }
  76.  
  77. function sanitize() {
  78. var contents = fs.readFileSync("nodes_master.json");
  79. var base_nodes = JSON.parse(contents);
  80.  
  81. for (let nn of nodes) {
  82. let changes = [];
  83. let baseNode = base_nodes.find(function(bn) {
  84. return bn.interface_set[0].mac_address === nn.interface_set[0].mac_address;
  85. });
  86.  
  87. if (baseNode === undefined) {
  88. console.error("Unkown Mac ", nn.interface_set[0].mac_address);
  89. continue;
  90. }
  91. let note = false;
  92. for (let p of ["hostname", "fqdn", "power_parameters_power_address", "power_type", "power_parameters_power_boot_type"]) {
  93. if (baseNode[p] === nn[p]) {
  94. continue;
  95. }
  96. changes.push({
  97. param: p,
  98. frm: nn[p],
  99. to: baseNode[p]
  100. });
  101. }
  102. if ((nn.status_name == "Ready" || nn.status_name == "Broken") && baseNode.ip_addresses[0] != nn.ip_addresses[0]) {
  103. //assume if this is the case then we need to add link
  104. let links = JSON.parse(docmd("maas maas interfaces read "+nn.system_id));
  105. if(links.length > 0 && links[0].links.length > 0){
  106. let link = links[0].links[0];
  107. if (link.mode == "auto"){
  108. console.log(baseNode.hostname);
  109. console.log("attempting to delete link:",link.id);
  110. let nicid = nn.interface_set[0].id;
  111. docmd("maas maas interface unlink-subnet "+nn.system_id+" "+nicid+" id="+link.id);
  112. console.log("creating new static link");
  113. docmd("maas maas interface link-subnet "+nn.system_id+" "+nicid+" mode=STATIC subnet=2 ip_address="+baseNode.ip_addresses[0]);
  114. }
  115. } else if(links.length > 0 && links[0].links.length == 0){
  116. console.log(baseNode.hostname);
  117. console.log("attempting to add link:");
  118. let nicid = nn.interface_set[0].id;
  119. docmd("maas maas interface link-subnet "+nn.system_id+" "+nicid+" mode=STATIC subnet=2 ip_address="+baseNode.ip_addresses[0]);
  120. }
  121. }
  122. if (!nn.power_parameters_power_user) {
  123. changes.push({
  124. param: "power_parameters_power_user",
  125. frm: "undef",
  126. to: "ADMIN"
  127. });
  128. }
  129. if (!nn.power_parameters_power_pass) {
  130. changes.push({
  131. param: "power_parameters_power_pass",
  132. frm: "undef",
  133. to: "ADMIN"
  134. });
  135. }
  136. if (changes.length) {
  137. console.log("\nNode " + nn.hostname + " (" + baseNode.hostname + ") parameter missmatch: ");
  138. let cmdstr = "maas maas machine update " + nn.system_id + " ";
  139. for (let cn of changes) {
  140. console.log(cn);
  141. cmdstr += cn.param + "=" + cn.to + " ";
  142. }
  143. console.log(cmdstr);
  144. docmd(cmdstr);
  145. }
  146. }
  147.  
  148. }
Add Comment
Please, Sign In to add comment