diff --git a/xCAT-UI/js/nodes/nodes.js b/xCAT-UI/js/nodes/nodes.js index 8d130d6d5..738050cc8 100644 --- a/xCAT-UI/js/nodes/nodes.js +++ b/xCAT-UI/js/nodes/nodes.js @@ -3,6 +3,7 @@ */ var nodesTabs; // Node tabs var origAttrs = new Object(); // Original node attributes +var defAttrs; // Definable node attributes /** * Set the nodes tab @@ -99,7 +100,7 @@ function loadGroups(data) { item.append(subUL); // Create a link for each group - for ( var i = groups.length; i--;) { + for (var i = groups.length; i--;) { var subItem = $('
'); var link = $('' + groups[i] + ''); subItem.append(link); @@ -269,7 +270,7 @@ function loadSubgroups(data) { var group = data.msg; // Go through each subgroup - for ( var i in rsp) { + for (var i in rsp) { // Do not put the same group in the subgroup if (rsp[i] != group && $('#' + group).length) { // Add subgroup inside group @@ -303,10 +304,12 @@ function loadNodes(data) { $.cookie('nodes2update', ''); // Clear hash table containing node attributes origAttrs = ''; + // Clear hash table containing definable node attributes + defAttrs = new Array(); var node; var args; - for ( var i in rsp) { + for (var i in rsp) { // Get the node var pos = rsp[i].indexOf('Object name:'); if (pos > -1) { @@ -333,7 +336,7 @@ function loadNodes(data) { // Sort headers var sorted = new Array(); - for ( var key in headers) { + for (var key in headers) { // Do not put in comments twice if (key != 'usercomment') { sorted.push(key); @@ -353,7 +356,7 @@ function loadNodes(data) { dTable.init(sorted); // Go through each node - for ( var node in attrs) { + for (var node in attrs) { // Create a row var row = new Array(); // Create a check box @@ -401,7 +404,7 @@ function loadNodes(data) { }); // Go through each header - for ( var i = 5; i < sorted.length; i++) { + for (var i = 5; i < sorted.length; i++) { // Add the node attributes to the row var key = sorted[i]; @@ -459,7 +462,7 @@ function loadNodes(data) { var cloneLnk = $('Clone'); cloneLnk.bind('click', function(event) { var tgtNodes = getNodesChecked('nodesDataTable').split(','); - for ( var i = 0; i < tgtNodes.length; i++) { + for (var i in tgtNodes) { var mgt = getNodeAttr(tgtNodes[i], 'mgt'); // Create an instance of the plugin @@ -494,7 +497,7 @@ function loadNodes(data) { deleteLnk.bind('click', function(event) { var tgtNodes = getNodesChecked('nodesDataTable'); if (tgtNodes) { - deleteNode(tgtNodes); + loadDeletePage(tgtNodes); } }); @@ -544,7 +547,6 @@ function loadNodes(data) { } }); - // Remote console (rcons) var rcons = $('Open console'); rcons.bind('click', function(event){ @@ -553,7 +555,16 @@ function loadNodes(data) { loadRconsPage(tgtNodes); } }); - + + // Set node properties + var setProps = $('Set node properties'); + setProps.bind('click', function(event){ + var tgtNodes = getNodesChecked('nodesDataTable').split(','); + for (var i in tgtNodes) { + loadSetPropsPage(tgtNodes[i]); + } + }); + var advancedLnk = $('Advanced'); // Power actions @@ -563,9 +574,9 @@ function loadNodes(data) { // Advanced actions var advancedActions; if ('compute' == group) { - advancedActions = [ boot2NetworkLnk, scriptLnk, setBootStateLnk, updateLnk, rcons ]; + advancedActions = [ boot2NetworkLnk, scriptLnk, setBootStateLnk, updateLnk, rcons, setProps ]; } else { - advancedActions = [ boot2NetworkLnk, scriptLnk, setBootStateLnk, updateLnk ]; + advancedActions = [ boot2NetworkLnk, scriptLnk, setBootStateLnk, updateLnk, setProps ]; } var advancedActionMenu = createMenu(advancedActions); @@ -699,6 +710,20 @@ function loadNodes(data) { success : loadPingStatus }); + // Get definable node attributes + $.ajax( { + url : 'lib/cmd.php', + dataType : 'json', + data : { + cmd : 'lsdef', + tgt : '', + args : '-t;node;-h', + msg : '' + }, + + success : setDefAttrs + }); + /** * Additional ajax requests need to be made for zVM */ @@ -709,13 +734,13 @@ function loadNodes(data) { // Get hardware control point var rows = dTable.object().find('tbody tr'); var hcps = new Object(); - for ( var j = 0; j < rows.length; j++) { + for (var j in rows) { var val = rows.eq(j).find('td').eq(i).html(); hcps[val] = 1; } var args; - for ( var h in hcps) { + for (var h in hcps) { // Get node without domain name args = h.split('.'); @@ -751,7 +776,7 @@ function loadPowerStatus(data) { var power = data.rsp; var rowNum, node, status, args; - for ( var i in power) { + for (var i in power) { // power[0] = nodeName and power[1] = state args = power[i].split(':'); node = jQuery.trim(args[0]); @@ -811,7 +836,7 @@ function loadPingStatus(data) { // Get all nodes within the datatable var rows = dTable.fnGetNodes(); - for ( var i in ping) { + for (var i in ping) { // ping[0] = nodeName and ping[1] = state node = jQuery.trim(ping[i][0]); status = jQuery.trim(ping[i][1]); @@ -1103,7 +1128,7 @@ function loadScriptPage(tgtNodes) { // Check script var textarea = $('#' + newTabId + ' textarea'); - for ( var i = 0; i < textarea.length; i++) { + for (var i in textarea) { if (!textarea.eq(i).val()) { textarea.eq(i).css('border', 'solid #FF0000 1px'); ready = false; @@ -1170,13 +1195,13 @@ function powerNode(node, power2) { } /** - * Delete a given node + * Load delete node page * * @param tgtNodes * Nodes to delete * @return Nothing */ -function deleteNode(tgtNodes) { +function loadDeletePage(tgtNodes) { // Get datatable var myTab = getNodesTab(); @@ -1202,7 +1227,7 @@ function deleteNode(tgtNodes) { var tgtNodesStr = ''; var nodes = tgtNodes.split(','); // Loop through each node - for ( var i in nodes) { + for (var i in nodes) { // If it is the 1st and only node if (i == 0 && i == nodes.length - 1) { tgtNodesStr += nodes[i]; @@ -1310,7 +1335,7 @@ function updateStatusBar(data) { // Update data table var rows = dTable.fnGetNodes(); - for ( var i = 0; i < tgts.length; i++) { + for (var i in tgts) { if (!failed) { // Get the row containing the node link and delete it var row = getNodeRow(tgts[i], rows); @@ -1362,7 +1387,7 @@ function formComplete(tabId) { // Check all inputs within the form var inputs = $('#' + tabId + ' input'); - for ( var i = 0; i < inputs.length; i++) { + for (var i in inputs) { // If there is no value given in the input if (!inputs.eq(i).val()) { inputs.eq(i).css('border', 'solid #FF0000 1px'); @@ -1394,7 +1419,7 @@ function updatePowerStatus(data) { // Get xCAT response var rsp = data.rsp; // Loop through each line - for ( var i = 0; i < rsp.length; i++) { + for (var i in rsp) { // Get the node var node = rsp[i].split(":")[0]; @@ -1519,7 +1544,7 @@ function setOSImageCookies(data) { var osVersHash = new Object(); var osArchsHash = new Object(); - for ( var i = 1; i < rsp.length; i++) { + for (var i = 1; i < rsp.length; i++) { // osimage table columns: imagename, profile, imagetype, provmethod, // osname, osvers, osdistro, osarch, synclists, comments, disable // e.g. sles11.1-s390x-statelite-compute, compute, linux, statelite, @@ -1542,21 +1567,21 @@ function setOSImageCookies(data) { // Save profiles in a cookie var tmp = new Array; - for ( var key in profilesHash) { + for (var key in profilesHash) { tmp.push(key); } $.cookie('profiles', tmp); // Save OS versions in a cookie tmp = []; - for ( var key in osVersHash) { + for (var key in osVersHash) { tmp.push(key); } $.cookie('osvers', tmp); // Save OS architectures in a cookie tmp = []; - for ( var key in osArchsHash) { + for (var key in osArchsHash) { tmp.push(key); } $.cookie('osarchs', tmp); @@ -1585,7 +1610,7 @@ function setGroupsCookies(data) { */ function getNodeRow(tgtNode, rows) { // Find the row - for ( var i in rows) { + for (var i in rows) { // Get all columns within the row var cols = rows[i].children; // Get the 1st column (node name) @@ -1614,7 +1639,7 @@ function getNodesChecked(datatableId) { // Get nodes that were checked var nodes = $('#' + datatableId + ' input[type=checkbox]:checked'); - for ( var i = 0; i < nodes.length; i++) { + for (var i in nodes) { var tgtNode = nodes.eq(i).attr('name'); if (tgtNode){ @@ -1764,7 +1789,7 @@ function updateNodeAttrs(group) { var row, colPos, value; var attrName; // Go through each node where an attribute was changed - for (var i = 0; i < nodes.length; i++) { + for (var i in nodes) { if (nodes[i]) { args = ''; @@ -1802,7 +1827,7 @@ function updateNodeAttrs(group) { cmd : 'chdef', tgt : '', args : '-t;node;-o;' + nodes[i] + ';' + args, - msg : 'node=' + nodes[i] + msg : 'out=nodesTab;node=' + nodes[i] }, success: showChdefOutput @@ -1835,7 +1860,7 @@ function restoreNodeAttrs() { // Go through each node where an attribute was changed var row, colPos; var attrName, origVal; - for (var i = 0; i < nodes.length; i++) { + for (var i in nodes) { if (nodes[i]) { // Get the row containing the node link row = getNodeRow(nodes[i], rows); @@ -1911,7 +1936,7 @@ function createCommentsToolTip(comment) { cmd : 'chdef', tgt : '', args : '-t;node;-o;' + node + ';usercomment=' + comments, - msg : 'node=' + node + msg : 'out=nodesTab;node=' + node }, success: showChdefOutput @@ -1959,10 +1984,12 @@ function createCommentsToolTip(comment) { function showChdefOutput(data) { // Get output var out = data.rsp; - var node = data.msg.replace('node=', ''); + var args = data.msg.split(';'); + var tabID = args[0].replace('out=', ''); + var node = args[1].replace('node=', ''); // Find info bar on nodes tab, if any - var info = $('#nodesTab').find('.ui-state-highlight'); + var info = $('#' + tabID).find('.ui-state-highlight'); if (!info.length) { // Create info bar if one does not exist info = createInfoBar(''); @@ -1972,9 +1999,188 @@ function showChdefOutput(data) { // Go through output and append to paragraph var node, status; var pg = $(''); - for ( var i in out) { + for (var i in out) { pg.append(node + ': ' + out[i] + '