2
0
mirror of https://github.com/xcat2/xcat-core.git synced 2025-06-12 00:00:12 +00:00

Split nodes page into nodeset, rnetboot, and updatenode pages. Cleaned up code.

git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@6908 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
phamt
2010-07-29 17:32:24 +00:00
parent 324a1318ef
commit bb4ed3aebd
7 changed files with 963 additions and 1037 deletions

View File

@ -60,7 +60,7 @@ function loadUserEntry(data) {
var ueDivId = args[0].replace('out=', '');
// Get node
var node = args[1].replace('node=', '');
// Get node user entry
// Get user entry
var userEntry = data.rsp[0].split(node + ':');
// Remove loader
@ -69,7 +69,7 @@ function loadUserEntry(data) {
var toggleLinkId = node + 'ToggleLink';
$('#' + toggleLinkId).click(function() {
// Get the text within this link
// Get text within this link
var lnkText = $(this).text();
// Toggle user entry division
@ -114,11 +114,12 @@ function loadUserEntry(data) {
saveBtn.show();
cancelBtn.show();
});
/**
* Save
*/
var saveBtn = createButton('Save');
saveBtn.css('display', 'inline-table');
saveBtn.hide();
saveBtn.bind('click', function(event) {
// Show loader
@ -153,8 +154,7 @@ function loadUserEntry(data) {
'border-width' : '0px'
});
// Stop this function from executing again
// Unbind event
// Disable save button
$(this).unbind(event);
$(this).hide();
cancelBtn.hide();
@ -164,6 +164,7 @@ function loadUserEntry(data) {
* Cancel
*/
var cancelBtn = createButton('Cancel');
cancelBtn.css('display', 'inline-table');
cancelBtn.hide();
cancelBtn.bind('click', function(event) {
txtArea.attr('readonly', 'readonly');
@ -186,14 +187,14 @@ function loadUserEntry(data) {
}
/**
* Set a cookie to track the number of processes for a given node
* Increment number of processes running against a node
*
* @param node
* Node to set cookie for
* Node to increment running processes
* @return Nothing
*/
function incrementNodeProcess(node) {
// Set cookie for number actions performed against node
// Get current processes
var procs = $.cookie(node + 'Processes');
if (procs) {
// One more process
@ -205,7 +206,7 @@ function incrementNodeProcess(node) {
}
/**
* Update the provision new node status
* Update provision new node status
*
* @param data
* Data returned from HTTP request
@ -220,87 +221,83 @@ function updateProvisionNewStatus(data) {
var cmd = args[0].replace('cmd=', '');
// Get output ID
var out2Id = args[1].replace('out=', '');
// Get status bar and provision tab ID
// Get status bar ID
var statBarId = 'zProvisionStatBar' + out2Id;
// Get provision tab ID
var tabId = 'zvmProvisionTab' + out2Id;
// Get loader ID
var loaderId = 'zProvisionLoader' + out2Id;
// Get node name
var node = $('#' + tabId + ' input[name=nodeName]').val();
// Get userId
var userId = $('#' + tabId + ' input[name=userId]').val();
// Get hardware control point
var hcp = $('#' + tabId + ' input[name=hcp]').val();
// Get group
var group = $('#' + tabId + ' input[name=group]').val();
// Get user entry
var userEntry = $('#' + tabId + ' textarea').val();
// Get operating system
var osImage = $('#' + tabId + ' input[name=os]').val();
/**
* (2) Update /etc/hosts
*/
if (cmd == 'nodeadd') {
// If no output, no errors occurred
// If there was an error
// Do not continue
if (rsp.length) {
$('#' + loaderId).hide();
$('#' + statBarId).append('<p>(Error) Failed to create node definition</p>');
} else {
$('#' + statBarId).append('<p>Node definition created for ' + node + '</p>');
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
data : {
cmd : 'makehosts',
tgt : '',
args : '',
msg : 'cmd=makehosts;out=' + out2Id
},
success : updateProvisionNewStatus
});
}
// Update /etc/hosts
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
data : {
cmd : 'makehosts',
tgt : '',
args : '',
msg : 'cmd=makehosts;out=' + out2Id
},
success : updateProvisionNewStatus
});
}
/**
* (3) Update DNS
*/
else if (cmd == 'makehosts') {
// If no output, no errors occurred
// If there was an error
// Do not continue
if (rsp.length) {
$('#' + statBarId).append(
'<p>(Error) Failed to update /etc/hosts</p>');
$('#' + loaderId).hide();
$('#' + statBarId).append('<p>(Error) Failed to update /etc/hosts</p>');
} else {
$('#' + statBarId).append('<p>/etc/hosts updated</p>');
}
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
data : {
cmd : 'makedns',
tgt : '',
args : '',
msg : 'cmd=makedns;out=' + out2Id
},
// Update DNS
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
data : {
cmd : 'makedns',
tgt : '',
args : '',
msg : 'cmd=makedns;out=' + out2Id
},
success : updateProvisionNewStatus
});
success : updateProvisionNewStatus
});
}
}
/**
* (4) Create user entry
*/
else if (cmd == 'makedns') {
// Reset the number of tries
else if (cmd == 'makedns') {
// Reset number of tries
$.cookie('tries4' + tabId, 0);
// Write ajax response to status bar
var prg = writeRsp(rsp, '');
$('#' + statBarId).append(prg);
// Get user entry
var userEntry = $('#' + tabId + ' textarea').val();
// Create user entry
$.ajax( {
url : 'lib/zCmd.php',
@ -320,7 +317,7 @@ function updateProvisionNewStatus(data) {
/**
* (5) Add disk
*/
else if (cmd == 'mkvm') {
else if (cmd == 'mkvm') {
// Write ajax response to status bar
var prg = writeRsp(rsp, '');
$('#' + statBarId).append(prg);
@ -328,10 +325,7 @@ function updateProvisionNewStatus(data) {
// If there was an error
// Do not continue
if (prg.html().indexOf('Error') > -1) {
var loaderId = 'zProvisionLoader' + inst;
$('#' + loaderId).remove();
// Try again (at least 2 times)
// Try again
var tries = parseInt($.cookie('tries4' + tabId));
if (tries < 2) {
$('#' + statBarId).append('<p>Trying again</p>');
@ -340,6 +334,8 @@ function updateProvisionNewStatus(data) {
// One more try
$.cookie('tries4' + tabId, tries);
// Get user entry
var userEntry = $('#' + tabId + ' textarea').val();
// Create user entry
$.ajax( {
url : 'lib/zCmd.php',
@ -355,14 +351,10 @@ function updateProvisionNewStatus(data) {
success : updateProvisionNewStatus
});
} else {
// Failed - Do not continue
var loaderId = 'zProvisionLoader' + out2Id;
$('#' + loaderId).hide();
}
}
// If there were no errors
else {
// Reset the number of tries
} else {
// Reset number of tries
$.cookie('tries4' + tabId, 0);
// Set cookie for number of disks
@ -370,6 +362,7 @@ function updateProvisionNewStatus(data) {
$.cookie('zProvisionDisks2Add' + out2Id, diskRows.length);
if (diskRows.length > 0) {
for ( var i = 0; i < diskRows.length; i++) {
// Get disk type, address, size, pool, and password
var diskArgs = diskRows.eq(i).find('td');
var type = diskArgs.eq(1).find('select').val();
var address = diskArgs.eq(2).find('input').val();
@ -377,7 +370,7 @@ function updateProvisionNewStatus(data) {
var pool = diskArgs.eq(4).find('input').val();
var password = diskArgs.eq(5).find('input').val();
// Add disk and format disk
// Add disk
if (type == '3390') {
$.ajax( {
url : 'lib/cmd.php',
@ -394,21 +387,17 @@ function updateProvisionNewStatus(data) {
success : updateProvisionNewStatus
});
} else {
// Virtual server created
var loaderId = 'zProvisionLoader' + out2Id;
$('#' + loaderId).hide();
}
}
} else {
// Virtual server created (no OS, no disks)
var loaderId = 'zProvisionLoader' + out2Id;
$('#' + loaderId).hide();
}
}
}
/**
* (6) Set the operating system for given node
* (6) Set operating system for given node
*/
else if (cmd == 'chvm') {
// Write ajax response to status bar
@ -418,10 +407,9 @@ function updateProvisionNewStatus(data) {
// If there was an error
// Do not continue
if (prg.html().indexOf('Error') > -1) {
var loaderId = 'zProvisionLoader' + inst;
$('#' + loaderId).remove();
$('#' + loaderId).hide();
// Try again (at least 2 times)
// Try again
var tries = parseInt($.cookie('tries4' + tabId));
if (tries < 2) {
$('#' + statBarId).append('<p>Trying again</p>');
@ -435,13 +423,14 @@ function updateProvisionNewStatus(data) {
$.cookie('zProvisionDisks2Add' + out2Id, diskRows.length);
if (diskRows.length > 0) {
for ( var i = 0; i < diskRows.length; i++) {
// Get disk type, address, size, pool, and password
var diskArgs = diskRows.eq(i).find('td');
var address = diskArgs.eq(1).find('input').val();
var size = diskArgs.eq(2).find('input').val();
var pool = diskArgs.eq(3).find('input').val();
var password = diskArgs.eq(4).find('input').val();
// Add disk and format disk
// Add disk
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
@ -458,18 +447,18 @@ function updateProvisionNewStatus(data) {
});
}
} else {
// Virtual server created (no OS, no disks)
var loaderId = 'zProvisionLoader' + out2Id;
$('#' + loaderId).hide();
}
} else {
var loaderId = 'zProvisionLoader' + out2Id;
$('#' + loaderId).remove();
$('#' + loaderId).hide();
}
} else {
// Reset the number of tries
// Reset number of tries
$.cookie('tries4' + tabId, 0);
// Get operating system image
var osImage = $('#' + tabId + ' input[name=os]').val();
// Get cookie for number of disks
var disks2add = $.cookie('zProvisionDisks2Add' + out2Id);
// One less disk to add
@ -477,17 +466,18 @@ function updateProvisionNewStatus(data) {
// Set cookie for number of disks
$.cookie('zProvisionDisks2Add' + out2Id, disks2add);
// If an operating system is given
// If an operating system image is given
if (osImage) {
var tmp = osImage.split('-');
// Get operating system, architecture, provision method, and profile
var os = tmp[0];
var arch = tmp[1];
var provisionMethod = tmp[2];
var profile = tmp[3];
// If this is the last disk added
// If the last disk is added
if (disks2add < 1) {
// Set operating system
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
@ -504,8 +494,6 @@ function updateProvisionNewStatus(data) {
});
}
} else {
// Virtual server created (no OS)
var loaderId = 'zProvisionLoader' + out2Id;
$('#' + loaderId).hide();
}
}
@ -515,36 +503,32 @@ function updateProvisionNewStatus(data) {
* (7) Update DHCP
*/
else if (cmd == 'noderes') {
// If no output, no errors occurred
// If there was an error
// Do not continue
if (rsp.length) {
$('#' + statBarId).append(
'<p>(Error) Failed to set operating system</p>');
$('#' + loaderId).hide();
$('#' + statBarId).append('<p>(Error) Failed to set operating system</p>');
} else {
$('#' + statBarId).append(
'<p>Operating system for ' + node + ' set</p>');
}
$('#' + statBarId).append('<p>Operating system for ' + node + ' set</p>');
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
data : {
cmd : 'makedhcp',
tgt : '',
args : '-a',
msg : 'cmd=makedhcp;out=' + out2Id
},
// Update DHCP
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
data : {
cmd : 'makedhcp',
tgt : '',
args : '-a',
msg : 'cmd=makedhcp;out=' + out2Id
},
success : updateProvisionNewStatus
});
success : updateProvisionNewStatus
});
}
}
/**
* (8) Prepare node for boot
*/
else if (cmd == 'makedhcp') {
var failed = false;
// Write ajax response to status bar
var prg = writeRsp(rsp, '');
$('#' + statBarId).append(prg);
@ -568,8 +552,6 @@ function updateProvisionNewStatus(data) {
* (9) Boot node to network
*/
else if (cmd == 'nodeset') {
var failed = false;
// Write ajax response to status bar
var prg = writeRsp(rsp, '');
$('#' + statBarId).append(prg);
@ -577,11 +559,8 @@ function updateProvisionNewStatus(data) {
// If there was an error
// Do not continue
if (prg.html().indexOf('Error') > -1) {
var loaderId = 'zProvisionLoader' + out2Id;
$('#' + loaderId).remove();
failed = true;
$('#' + loaderId).hide();
} else {
// Boot node from network
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
@ -601,24 +580,15 @@ function updateProvisionNewStatus(data) {
* (10) Done
*/
else if (cmd == 'rnetboot') {
var failed = false;
// Write ajax response to status bar
var prg = writeRsp(rsp, '');
$('#' + statBarId).append(prg);
// If there was an error
// Do not continue
if (prg.html().indexOf('Error') > -1) {
var loaderId = 'zProvisionLoader' + out2Id;
$('#' + loaderId).remove();
failed = true;
} else {
if (prg.html().indexOf('Error') < 0) {
$('#' + statBarId).append('<p>Open a VNC viewer to see the installation progress. It might take a couple of minutes before you can connect.</p>');
}
// Hide loader
$('#' + statBarId).find('img').hide();
$('#' + loaderId).hide();
}
}
@ -748,19 +718,21 @@ function updateZNodeStatus(data) {
}
/**
* Update the clone status
* Update clone status
*
* @param data
* Data returned from HTTP request
* @return Nothing
*/
function updateZCloneStatus(data) {
// Get ajax response
var rsp = data.rsp;
var args = data.msg.split(';');
var cmd = args[0].replace('cmd=', '');
// Get provision instance
var inst = args[1].replace('inst=', '');
// Get output division ID
var out2Id = args[2].replace('out=', '');
/**
@ -769,59 +741,57 @@ function updateZCloneStatus(data) {
if (cmd == 'nodeadd') {
var node = args[3].replace('node=', '');
// If no output, no errors occurred
// If there was an error
// Do not continue
if (rsp.length) {
$('#' + out2Id).append(
'<p>(Error) Failed to create node definition</p>');
$('#' + out2Id).find('img').hide();
$('#' + out2Id).append('<p>(Error) Failed to create node definition</p>');
} else {
$('#' + out2Id).append(
'<p>Node definition created for ' + node + '</p>');
}
$('#' + out2Id).append('<p>Node definition created for ' + node + '</p>');
// If last node definition was created
var tmp = inst.split('/');
if (tmp[0] == tmp[1]) {
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
data : {
cmd : 'makehosts',
tgt : '',
args : '',
msg : 'cmd=makehosts;inst=' + inst + ';out=' + out2Id
},
// Is this the last instance
var tmp = inst.split('/');
if (tmp[0] == tmp[1]) {
// Update /etc/hosts
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
data : {
cmd : 'makehosts',
tgt : '',
args : '',
msg : 'cmd=makehosts;inst=' + inst + ';out=' + out2Id
},
success : updateCloneStatus
});
}
success : updateZCloneStatus
});
}
}
}
/**
* (3) Update DNS
*/
else if (cmd == 'makehosts') {
// If no output, no errors occurred
// If there was an error
// Do not continue
if (rsp.length) {
$('#' + out2Id)
.append('<p>(Error) Failed to update /etc/hosts</p>');
$('#' + out2Id).find('img').hide();
$('#' + out2Id).append('<p>(Error) Failed to update /etc/hosts</p>');
} else {
$('#' + out2Id).append('<p>/etc/hosts updated</p>');
}
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
data : {
cmd : 'makedns',
tgt : '',
args : '',
msg : 'cmd=makedns;inst=' + inst + ';out=' + out2Id
},
// Update DNS
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
data : {
cmd : 'makedns',
tgt : '',
args : '',
msg : 'cmd=makedns;inst=' + inst + ';out=' + out2Id
},
success : updateCloneStatus
});
success : updateZCloneStatus
});
}
}
/**
@ -847,7 +817,6 @@ function updateZCloneStatus(data) {
var nodeStart = parseInt(tmp[0].match(/\d+/));
// Get the ending index
var nodeEnd = parseInt(tmp[1]);
for ( var i = nodeStart; i <= nodeEnd; i++) {
// Do not append comma for last node
if (i == nodeEnd) {
@ -881,7 +850,7 @@ function updateZCloneStatus(data) {
msg : 'cmd=mkvm;inst=' + inst + ';out=' + out2Id
},
success : updateCloneStatus
success : updateZCloneStatus
});
}
@ -1046,7 +1015,7 @@ function addProcessor(v, m, f) {
success : updateZNodeStatus
});
// Increment node process and save it in a cookie
// Increment node process
incrementNodeProcess(node);
// Show loader
@ -1095,7 +1064,7 @@ function addDisk(v, m, f) {
success : updateZNodeStatus
});
// Increment node process and save it in a cookie
// Increment node process
incrementNodeProcess(node);
// Show loader
@ -1135,7 +1104,6 @@ function addNic(v, m, f) {
var lanName = temp[1];
var lanOwner = temp[0];
// Add NIC
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
@ -1157,7 +1125,6 @@ function addNic(v, m, f) {
var temp = f.nicVSwitchName.split(' ');
var vswitchName = temp[1];
// Add NIC
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
@ -1173,7 +1140,7 @@ function addNic(v, m, f) {
});
}
// Increment node process and save it in a cookie
// Increment node process
incrementNodeProcess(node);
// Show loader
@ -1194,7 +1161,6 @@ function addNic(v, m, f) {
* @return Nothing
*/
function removeProcessor(node, address) {
// Remove processor
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
@ -1208,7 +1174,7 @@ function removeProcessor(node, address) {
success : updateZNodeStatus
});
// Increment node process and save it in a cookie
// Increment node process
incrementNodeProcess(node);
// Show loader
@ -1228,7 +1194,6 @@ function removeProcessor(node, address) {
* @return Nothing
*/
function removeDisk(node, address) {
// Remove disk
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
@ -1242,7 +1207,7 @@ function removeDisk(node, address) {
success : updateZNodeStatus
});
// Increment node process and save it in a cookie
// Increment node process
incrementNodeProcess(node);
// Show loader
@ -1265,7 +1230,6 @@ function removeNic(node, nic) {
var args = nic.split('.');
var address = args[0];
// Remove NIC
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
@ -1279,7 +1243,7 @@ function removeNic(node, nic) {
success : updateZNodeStatus
});
// Set cookie for number actions performed against node
// Increment node process
incrementNodeProcess(node);
// Show loader
@ -1290,14 +1254,13 @@ function removeNic(node, nic) {
}
/**
* Set a cookie for the disk pool names of a given node
* Set a cookie for disk pool names of a given node
*
* @param data
* Data from HTTP request
* @return Nothing
*/
function setDiskPoolCookies(data) {
// Do not set cookie if there is no output
if (data.rsp) {
var node = data.msg;
var pools = data.rsp[0].split(node + ': ');
@ -1313,7 +1276,6 @@ function setDiskPoolCookies(data) {
* @return Nothing
*/
function setNetworkCookies(data) {
// Do not set cookie if there is no output
if (data.rsp) {
var node = data.msg;
var networks = data.rsp[0].split(node + ': ');
@ -1322,7 +1284,7 @@ function setNetworkCookies(data) {
}
/**
* Get the contents of each disk pool
* Get contents of each disk pool
*
* @param data
* HTTP request data
@ -1333,7 +1295,7 @@ function getDiskPool(data) {
var hcp = data.msg;
var pools = data.rsp[0].split(hcp + ': ');
// Get the contents of each disk pool
// Get contents of each disk pool
for ( var i in pools) {
if (pools[i]) {
// Get used space
@ -1370,7 +1332,7 @@ function getDiskPool(data) {
}
/**
* Get the details of each network
* Get details of each network
*
* @param data
* HTTP request data
@ -1381,7 +1343,7 @@ function getNetwork(data) {
var hcp = data.msg;
var networks = data.rsp[0].split(hcp + ': ');
// Get the network details
// Loop through each network
for ( var i = 1; i < networks.length; i++) {
var args = networks[i].split(' ');
var type = args[0];
@ -1405,7 +1367,7 @@ function getNetwork(data) {
}
/**
* Load the disk pool contents into a table
* Load disk pool contents into a table
*
* @param data
* HTTP request data
@ -1427,7 +1389,7 @@ function loadDiskPoolTable(data) {
// Resource tab ID
var tabID = 'zvmResourceTab';
// Get datatable (if any)
// Get datatable
var dTable = getDiskDataTable();
if (!dTable) {
// Create disks section
@ -1439,8 +1401,7 @@ function loadDiskPoolTable(data) {
var tableID = 'zDiskDataTable';
var table = new DataTable(tableID);
// Resource headers: volume ID, device type, start address, and size
table.init( [ 'Hardware control point', 'Pool', 'Status', 'Volume ID',
'Device type', 'Start address', 'Size' ]);
table.init( [ 'Hardware control point', 'Pool', 'Status', 'Volume ID', 'Device type', 'Start address', 'Size' ]);
// Append datatable to tab
fieldSet.append(table.object());
@ -1454,13 +1415,12 @@ function loadDiskPoolTable(data) {
// Skip index 0 and 1 because it contains nothing
for ( var i = 2; i < tmp.length; i++) {
var diskAttrs = tmp[i].split(' ');
dTable.fnAddData( [ hcp, pool, stat, diskAttrs[0], diskAttrs[1],
diskAttrs[2], diskAttrs[3] ]);
dTable.fnAddData( [ hcp, pool, stat, diskAttrs[0], diskAttrs[1], diskAttrs[2], diskAttrs[3] ]);
}
}
/**
* Load the network details into a table
* Load network details into a table
*
* @param data
* HTTP request data
@ -1482,7 +1442,7 @@ function loadNetworkTable(data) {
// Resource tab ID
var tabID = 'zvmResourceTab';
// Get datatable (if any)
// Get datatable
var dTable = getNetworkDataTable();
if (!dTable) {
// Create networks section

View File

@ -109,7 +109,6 @@ function loadGroups(data) {
for ( var i = groups.length; i--;) {
var subItem = $('<li></li>');
var link = $('<a href="#"><ins></ins>' + groups[i] + '</a>');
subItem.append(link);
subUL.append(subItem);
}
@ -118,11 +117,11 @@ function loadGroups(data) {
$('#groups').append(ul);
$('#groups').tree( {
callback : {
// Open the group onclick
// Open group onclick
onselect : function(node, tree) {
var thisGroup = tree.get_text(node);
if (thisGroup) {
// Clear the nodes DIV
// Clear nodes division
$('#nodes').children().remove();
// Create loader
var loader = $('<center></center>').append(createLoader());
@ -202,8 +201,7 @@ function loadNodes(data) {
sorted.sort();
// Add column for check box, node, ping, and power
sorted.unshift('', 'node', 'ping', 'power');
sorted[0] = '<input type="checkbox" onclick="selectAllCheckbox(event, $(this))">';
sorted.unshift('<input type="checkbox" onclick="selectAllCheckbox(event, $(this))">', 'node', 'ping', 'power');
// Create a datatable
var dTable = new DataTable('nodesDataTable');
@ -216,9 +214,7 @@ function loadNodes(data) {
// Create a check box
var checkBx = '<input type="checkbox" name="' + node + '"/>';
// Open node onclick
var nodeLink = $(
'<a class="node" id="' + node + '" href="#">' + node + '</a>')
.bind('click', loadNode);
var nodeLink = $('<a class="node" id="' + node + '" href="#">' + node + '</a>').bind('click', loadNode);
row.push(checkBx, nodeLink, '', '');
// Go through each header
@ -442,15 +438,14 @@ function loadNodes(data) {
});
/**
* Only for zVM
* Additional ajax requests need to be made for zVM
*/
// Get the index of the HCP column
var i = $.inArray('hcp', sorted);
if (i) {
// Get hardware control point
var rows = dTable.object().find('tbody tr');
// Get HCP
var hcps = new Object();
for ( var j = 0; j < rows.length; j++) {
var val = rows.eq(j).find('td').eq(i).html();
@ -494,7 +489,7 @@ function loadNodes(data) {
}
/**
* Load the power status for each node
* Load power status for each node
*
* @param data
* Data returned from HTTP request
@ -521,7 +516,7 @@ function loadPowerStatus(data) {
}
/**
* Load the ping status for each node
* Load ping status for each node
*
* @param data
* Data returned from HTTP request
@ -668,7 +663,7 @@ function loadUnlockPage(tgtNodes) {
*/
var okBtn = createButton('Ok');
okBtn.bind('click', function(event) {
// If the form is complete
// If form is complete
var ready = formComplete(newTabId);
if (ready) {
var password = $('#' + newTabId + ' input[name=password]').val();
@ -690,8 +685,7 @@ function loadUnlockPage(tgtNodes) {
// Show status bar
statusBar.show();
// Stop this function from executing again
// Unbind event
// Disable Ok button
$(this).unbind(event);
$(this).css( {
'background-color' : '#F2F2F2',
@ -814,648 +808,6 @@ function loadScriptPage(tgtNodes) {
tab.select(newTabId);
}
/**
* Load nodeset page
*
* @param trgtNodes
* Targets to run nodeset against
* @return Nothing
*/
function loadNodesetPage(trgtNodes) {
// Get the OS images
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
data : {
cmd : 'tabdump',
tgt : '',
args : 'osimage',
msg : ''
},
success : setOSImageCookies
});
// Get nodes tab
var tab = getNodesTab();
// Generate new tab ID
var inst = 0;
var tabId = 'nodesetTab' + inst;
while ($('#' + tabId).length) {
// If one already exists, generate another one
inst = inst + 1;
tabId = 'nodesetTab' + inst;
}
// Open new tab
// Create nodeset form
var nodesetForm = $('<div class="form"></div>');
// Create status bar
var statBarId = 'nodesetStatusBar' + inst;
var statBar = createStatusBar(statBarId);
statBar.hide();
nodesetForm.append(statBar);
// Create loader
var loader = createLoader('nodesetLoader');
statBar.append(loader);
// Create info bar
var infoBar = createInfoBar('Set the boot state for a node range');
nodesetForm.append(infoBar);
// Target node or group
var tgt = $('<div><label for="target">Target node or group:</label><input type="text" name="target" value="' + trgtNodes + '"/></div>');
nodesetForm.append(tgt);
// Boot method (boot, install, stat, iscsiboot, netboot, statelite)
var method = $('<div></div>');
var methodLabel = $('<label for="method">Boot method:</label>');
var methodSelect = $('<select id="bootMethod" name="bootMethod"></select>');
methodSelect.append('<option value="boot">boot</option>');
methodSelect.append('<option value="install">install</option>');
methodSelect.append('<option value="iscsiboot">iscsiboot</option>');
methodSelect.append('<option value="netboot">netboot</option>');
methodSelect.append('<option value="statelite">statelite</option>');
method.append(methodLabel);
method.append(methodSelect);
nodesetForm.append(method);
// Boot type (zvm, pxe, yaboot)
var type = $('<div></div>');
var typeLabel = $('<label for="type">Boot type:</label>');
var typeSelect = $('<select id="bootType" name="bootType"></select>');
typeSelect.append('<option value="zvm">zvm</option>');
typeSelect.append('<option value="install">pxe</option>');
typeSelect.append('<option value="iscsiboot">yaboot</option>');
type.append(typeLabel);
type.append(typeSelect);
nodesetForm.append(type);
// Operating system
var os = $('<div></div>');
var osLabel = $('<label for="os">Operating system:</label>');
var osInput = $('<input type="text" name="os"/>');
// Get the OS versions on-focus
var tmp;
osInput.one('focus', function(){
tmp = $.cookie('OSVers');
// If there are any, turn on auto-complete
if (tmp) {
$(this).autocomplete(tmp.split(','));
}
});
os.append(osLabel);
os.append(osInput);
nodesetForm.append(os);
// Architecture
var arch = $('<div></div>');
var archLabel = $('<label for="arch">Architecture:</label>');
var archInput = $('<input type="text" name="arch"/>');
// Get the OS architectures on-focus
archInput.one('focus', function(){
tmp = $.cookie('OSArchs');
// If there are any, turn on auto-complete
if (tmp) {
$(this).autocomplete(tmp.split(','));
}
});
arch.append(archLabel);
arch.append(archInput);
nodesetForm.append(arch);
// Profiles
var profile = $('<div></div>');
var profileLabel = $('<label for="profile">Profile:</label>');
var profileInput = $('<input type="text" name="profile"/>');
// Get the profiles on-focus
profileInput.one('focus', function(){
tmp = $.cookie('Profiles');
// If there are any, turn on auto-complete
if (tmp) {
$(this).autocomplete(tmp.split(','));
}
});
profile.append(profileLabel);
profile.append(profileInput);
nodesetForm.append(profile);
/**
* Ok
*/
var okBtn = createButton('Ok');
okBtn.bind('click', function(event) {
var ready = true;
// Check state, OS, arch, and profile
var inputs = $('#' + tabId + ' input');
for ( var i = 0; i < inputs.length; i++) {
if (!inputs.eq(i).val() && inputs.eq(i).attr('name') != 'diskPw') {
inputs.eq(i).css('border', 'solid #FF0000 1px');
ready = false;
} else {
inputs.eq(i).css('border', 'solid #BDBDBD 1px');
}
}
// If no inputs are empty
if (ready) {
// Get nodes
var tgts = $('#' + tabId + ' input[name=target]').val();
// Get boot method
var method = $('#' + tabId + ' select[id=bootMethod]').val();
// Get boot type
var type = $('#' + tabId + ' select[id=bootType]').val();
// Get OS, arch, and profile
var os = $('#' + tabId + ' input[name=os]').val();
var arch = $('#' + tabId + ' input[name=arch]').val();
var profile = $('#' + tabId + ' input[name=profile]').val();
// Stop this function from executing again
// Unbind event
$(this).unbind(event);
$(this).css( {
'background-color' : '#F2F2F2',
'color' : '#424242'
});
/**
* (1) Set the OS, arch, and profile
*/
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
data : {
cmd : 'nodeadd',
tgt : '',
args : tgts + ';noderes.netboot=' + type + ';nodetype.os='
+ os + ';nodetype.arch=' + arch + ';nodetype.profile='
+ profile,
msg : 'cmd=nodeadd;inst=' + inst
},
success : updateNodesetStatus
});
// Show status bar
statBar.show();
} else {
alert('You are missing some values');
}
});
nodesetForm.append(okBtn);
// Append to discover tab
tab.add(tabId, 'Nodeset', nodesetForm);
// Select new tab
tab.select(tabId);
}
/**
* Load netboot page
*
* @param tgtNodes
* Targets to run rnetboot against
* @return Nothing
*/
function loadNetbootPage(tgtNodes) {
// Get nodes tab
var tab = getNodesTab();
// Generate new tab ID
var inst = 0;
var newTabId = 'netbootTab' + inst;
while ($('#' + newTabId).length) {
// If one already exists, generate another one
inst = inst + 1;
newTabId = 'netbootTab' + inst;
}
// Open new tab
// Create netboot form
var netbootForm = $('<div class="form"></div>');
// Create status bar
var barId = 'netbootStatusBar' + inst;
var statusBar = createStatusBar(barId);
statusBar.hide();
netbootForm.append(statusBar);
// Create loader
var loader = createLoader('netbootLoader');
statusBar.append(loader);
// Create info bar
var infoBar = createInfoBar('Cause the range of nodes to boot to network');
netbootForm.append(infoBar);
// Target node or group
var target = $('<div><label for="target">Target node or group:</label><input type="text" name="target" value="' + tgtNodes + '"/></div>');
netbootForm.append(target);
// Create options
var optsDIV = $('<div></div>');
var optsLabel = $('<label>Options:</label>');
var optsList = $('<ul></ul>');
var opt = $('<li></li>');
optsList.append(opt);
optsDIV.append(optsLabel);
optsDIV.append(optsList);
netbootForm.append(optsDIV);
// Boot order
var bootOrderChkBox = $('<input type="checkbox" id="s" name="s"/>');
opt.append(bootOrderChkBox);
opt.append('Set the boot device order');
var bootOrder = $('<li><label for="bootOrder">Boot order:</label><input type="text" name="bootOrder"/></li>');
bootOrder.hide();
optsList.append(bootOrder);
// Force reboot
optsList.append('<li><input type="checkbox" id="F" name="F"/>Force reboot</li>');
// Force shutdown
optsList.append('<li><input type="checkbox" id="f" name="f"/>Force immediate shutdown of the partition</li>');
// Iscsi dump
optsList.append('<li><input type="checkbox" id="I" name="I"/>Do a iscsi dump on AIX</li>');
// Show boot order when checkbox is checked
bootOrderChkBox.bind('click', function(event) {
if ($(this).is(':checked')) {
bootOrder.show();
} else {
bootOrder.hide();
}
});
// Determine plugin
var tmp = tgtNodes.split(',');
for ( var i = 0; i < tmp.length; i++) {
var mgt = getNodeMgt(tmp[i]);
// If it is zvm
if (mgt == 'zvm') {
// Add IPL input
netbootForm.append('<div><label for="ipl">IPL:</label><input type="text" name="ipl"/></div>');
break;
}
}
/**
* Ok
*/
var okBtn = createButton('Ok');
okBtn.bind('click', function(event) {
var ready = true;
// Check inputs
var inputs = $("#" + newTabId + " input[type='text']:visible");
for ( var i = 0; i < inputs.length; i++) {
if (!inputs.eq(i).val()) {
inputs.eq(i).css('border', 'solid #FF0000 1px');
ready = false;
} else {
inputs.eq(i).css('border', 'solid #BDBDBD 1px');
}
}
// Generate arguments
var chkBoxes = $("#" + newTabId + " input[type='checkbox']:checked");
var optStr = '';
var opt;
for ( var i = 0; i < chkBoxes.length; i++) {
opt = chkBoxes.eq(i).attr('name');
optStr += '-' + opt;
// If it is the boot order
if (opt == 's') {
// Get the boot order
optStr += ';' + $('#' + newTabId + ' input[name=bootOrder]').val();
}
// Append ; to end of string
if (i < (chkBoxes.length - 1)) {
optStr += ';';
}
}
// If no inputs are empty
if (ready) {
// Get nodes
var tgts = $('#' + newTabId + ' input[name=target]').val();
// Get IPL address
var ipl = $('#' + newTabId + ' input[name=ipl]');
if (ipl) {
optStr += 'ipl=' + ipl.val();
}
// Stop this function from executing again
// Unbind event
$(this).unbind(event);
$(this).css( {
'background-color' : '#F2F2F2',
'color' : '#424242'
});
/**
* (1) Boot to network
*/
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
data : {
cmd : 'rnetboot',
tgt : tgts,
args : optStr,
msg : 'out=' + barId + ';cmd=rnetboot;tgt=' + tgts
},
success : updateStatusBar
});
// Show status bar
statusBar.show();
} else {
alert('You are missing some values');
}
});
netbootForm.append(okBtn);
// Append to discover tab
tab.add(newTabId, 'Netboot', netbootForm);
// Select new tab
tab.select(newTabId);
}
/**
* Load updatenode page
*
* @param tgtNodes
* Targets to run updatenode against
* @return Nothing
*/
function loadUpdatenodePage(tgtNodes) {
// Get nodes tab
var tab = getNodesTab();
// Generate new tab ID
var inst = 0;
var newTabId = 'updatenodeTab' + inst;
while ($('#' + newTabId).length) {
// If one already exists, generate another one
inst = inst + 1;
newTabId = 'updatenodeTab' + inst;
}
// Open new tab
// Create updatenode form
var updatenodeForm = $('<div class="form"></div>');
// Create status bar
var statBarId = 'updatenodeStatusBar' + inst;
var statusBar = createStatusBar(statBarId);
statusBar.hide();
updatenodeForm.append(statusBar);
// Create loader
var loader = createLoader('updatenodeLoader');
statusBar.append(loader);
// Create info bar
var infoBar = createInfoBar('Update nodes in an xCAT environment');
updatenodeForm.append(infoBar);
// Target node or group
var target = $('<div><label for="target">Target node or group:</label><input type="text" name="target" value="' + tgtNodes + '"/></div>');
updatenodeForm.append(target);
// Create options
var optsDIV = $('<div></div>');
var optsLabel = $('<label>Options:</label>');
var optsList = $('<ul></ul>');
optsDIV.append(optsLabel);
optsDIV.append(optsList);
updatenodeForm.append(optsDIV);
// Update all software
var updateAllChkBox = $('<input type="checkbox" id="A" name="A"/>');
var updateAllOpt = $('<li></li>');
optsList.append(updateAllOpt);
updateAllOpt.append(updateAllChkBox);
updateAllOpt.append('Install or update all software contained in the source directory');
var allSwScrDirectory = $('<li><label for="allSwSrcDirectory">Alternate source directory:</label><input type="text" name="allSwSrcDirectory"/></li>');
allSwScrDirectory.hide();
optsList.append(allSwScrDirectory);
// Show alternate source directory when checked
updateAllChkBox.bind('click', function(event) {
if ($(this).is(':checked')) {
allSwScrDirectory.show();
} else {
allSwScrDirectory.hide();
}
});
// Update software
var updateChkBox = $('<input type="checkbox" id="S" name="S"/>');
var updateOpt = $('<li></li>');
optsList.append(updateOpt);
updateOpt.append(updateChkBox);
updateOpt.append('Update software');
var scrDirectory = $('<li><label for="srcDirectory">Alternate source directory:</label><input type="text" name="srcDirectory"/></li>');
scrDirectory.hide();
optsList.append(scrDirectory);
var otherPkgs = $('<li><label for="otherpkgs">otherpkgs:</label><input type="text" name="otherpkgs"/></li>');
otherPkgs.hide();
optsList.append(otherPkgs);
var rpmFlags = $('<li><label for="rpm_flags">rpm_flags:</label><input type="text" name="rpm_flags"/></li>');
rpmFlags.hide();
optsList.append(rpmFlags);
var installPFlags = $('<li><label for="installp_flags">installp_flags:</label><input type="text" name="installp_flags"/></li>');
installPFlags.hide();
optsList.append(installPFlags);
// Show alternate source directory when checked
updateChkBox.bind('click', function(event) {
if ($(this).is(':checked')) {
scrDirectory.show();
otherPkgs.show();
rpmFlags.show();
installPFlags.show();
} else {
scrDirectory.hide();
otherPkgs.hide();
rpmFlags.hide();
installPFlags.hide();
}
});
// Postscripts
var postChkBox = $('<input type="checkbox" id="P" name="P"/>');
var postOpt = $('<li></li>');
optsList.append(postOpt);
postOpt.append(postChkBox);
postOpt.append('Run postscripts');
var postscripts = $('<li><label for="postscripts">Postscripts:</label><input type="text" name="postscripts"/></li>');
postscripts.hide();
optsList.append(postscripts);
// Show alternate source directory when checked
postChkBox.bind('click', function(event) {
if ($(this).is(':checked')) {
postscripts.show();
} else {
postscripts.hide();
}
});
optsList.append('<li><input type="checkbox" id="F" name="F"/>Distribute and synchronize files</li>');
optsList.append('<li><input type="checkbox" id="k" name="k"/>Update the ssh keys and host keys for the service nodes and compute nodes</li>');
// Update OS
var osChkBox = $('<input type="checkbox" id="o" name="o"/>');
var osOpt = $('<li></li>');
optsList.append(osOpt);
osOpt.append(osChkBox);
osOpt.append('Update the operating system');
var os = $('<li><label for="scripts">Operating system:</label><input type="text" name="os"/></li>');
os.hide();
optsList.append(os);
// Show alternate source directory when checked
osChkBox.bind('click', function(event) {
if ($(this).is(':checked')) {
os.show();
} else {
os.hide();
}
});
/**
* Ok
*/
var okBtn = createButton('Ok');
okBtn.bind('click', function(event) {
var ready = true;
// Generate arguments
var chkBoxes = $("#" + newTabId + " input[type='checkbox']:checked");
var optStr = '';
var opt;
for ( var i = 0; i < chkBoxes.length; i++) {
opt = chkBoxes.eq(i).attr('name');
optStr += '-' + opt;
// If update all software is checked
if (opt == 'S') {
var srcDir = $('#' + newTabId + ' input[name=allSwSrcDirectory]').val();
if (srcDir) {
optStr += ';-d ' + srcDir;
}
}
// If update software is checked
if (opt == 'S') {
var srcDir = $('#' + newTabId + ' input[name=srcDirectory]').val();
if (srcDir) {
optStr += ';-d;' + srcDir;
}
var otherpkgs = $('#' + newTabId + ' input[name=otherpkgs]').val();
if (otherpkgs) {
optStr += ';otherpkgs=' + otherpkgs;
}
var rpm_flags = $('#' + newTabId + ' input[name=rpm_flags]').val();
if (rpm_flags) {
optStr += ';rpm_flags=' + rpm_flags;
}
var installp_flags = $('#' + newTabId + ' input[name=installp_flags]').val();
if (installp_flags) {
optStr += ';installp_flags=' + installp_flags;
}
}
// If postscripts is checked
if (opt == 'P') {
// Get postscripts
optStr += ';' + $('#' + newTabId + ' input[name=postscripts]').val();
}
// If operating system is checked
if (opt == 'o') {
// Get the OS
optStr += ';' + $('#' + newTabId + ' input[name=os]').val();
}
// Append ; to end of string
if (i < (chkBoxes.length - 1)) {
optStr += ';';
}
}
// If no inputs are empty
if (ready) {
// Get nodes
var tgts = $('#' + newTabId + ' input[name=target]').val();
// Stop this function from executing again
// Unbind event
$(this).unbind(event);
$(this).css( {
'background-color' : '#F2F2F2',
'color' : '#424242'
});
/**
* (1) Boot to network
*/
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
data : {
cmd : 'updatenode',
tgt : tgts,
args : optStr,
msg : 'out=' + statBarId + ';cmd=updatenode;tgt=' + tgts
},
success : updateStatusBar
});
// Show status bar
statusBar.show();
} else {
alert('You are missing some values');
}
});
updatenodeForm.append(okBtn);
// Append to discover tab
tab.add(newTabId, 'Updatenode', updatenodeForm);
// Select new tab
tab.select(newTabId);
}
/**
* Sort a list
*
@ -1480,8 +832,6 @@ function sortAlpha(a, b) {
*/
function powerNode(node, power2) {
node = node.replace('Power', '');
// Power on/off node
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
@ -1603,179 +953,14 @@ function deleteNode(tgtNodes) {
}
/**
* Update nodeset status
*
* @param data
* Data returned from HTTP request
* @return Nothing
*/
function updateNodesetStatus(data) {
var rsp = data.rsp;
var args = data.msg.split(';');
var cmd = args[0].replace('cmd=', '');
// Get nodeset instance
var inst = args[1].replace('inst=', '');
var statBarId = 'nodesetStatusBar' + inst;
var tabId = 'nodesetTab' + inst;
// Get nodes
var tgts = $('#' + tabId + ' input[name=target]').val();
// Get boot method
var method = $('#' + tabId + ' select[id=bootMethod]').val();
/**
* (2) Update /etc/hosts
*/
if (cmd == 'nodeadd') {
// If no output, no errors occurred
if (rsp.length) {
$('#' + statBarId).append(
'<p>(Error) Failed to create node definition</p>');
} else {
// Create target nodes string
var tgtNodesStr = '';
var nodes = tgts.split(',');
// Loop through each node
for ( var i in nodes) {
// If it is the 1st and only node
if (i == 0 && i == nodes.length - 1) {
tgtNodesStr += nodes[i];
}
// If it is the 1st node of many nodes
else if (i == 0 && i != nodes.length - 1) {
// Append a comma to the string
tgtNodesStr += nodes[i] + ', ';
} else {
// If it is the last node
if (i == nodes.length - 1) {
// Append nothing to the string
tgtNodesStr += nodes[i];
} else {
// For every 10 nodes, append a break
if ((i % 10) > 0) {
tgtNodesStr += nodes[i] + ', ';
} else {
tgtNodesStr += nodes[i] + ', <br>';
}
}
}
}
$('#' + statBarId).append(
'<p>Node definition created for ' + tgtNodesStr + '</p>');
}
// Update /etc/hosts
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
data : {
cmd : 'makehosts',
tgt : '',
args : '',
msg : 'cmd=makehosts;inst=' + inst
},
success : updateNodesetStatus
});
}
/**
* (4) Update DNS
*/
else if (cmd == 'makehosts') {
// If no output, no errors occurred
if (rsp.length) {
$('#' + statBarId).append(
'<p>(Error) Failed to update /etc/hosts</p>');
} else {
$('#' + statBarId).append('<p>/etc/hosts updated</p>');
}
// Update DNS
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
data : {
cmd : 'makedns',
tgt : '',
args : '',
msg : 'cmd=makedns;inst=' + inst
},
success : updateNodesetStatus
});
}
/**
* (5) Update DHCP
*/
else if (cmd == 'makedns') {
// Write ajax response to status bar
var prg = writeRsp(rsp, '');
$('#' + statBarId).append(prg);
// Update DHCP
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
data : {
cmd : 'makedhcp',
tgt : '',
args : '-a',
msg : 'cmd=makedhcp;inst=' + inst
},
success : updateNodesetStatus
});
}
/**
* (6) Prepare node for boot
*/
else if (cmd == 'makedhcp') {
// Write ajax response to status bar
var prg = writeRsp(rsp, '');
$('#' + statBarId).append(prg);
// Prepare node for boot
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
data : {
cmd : 'nodeset',
tgt : tgts,
args : method,
msg : 'cmd=nodeset;inst=' + inst
},
success : updateNodesetStatus
});
}
/**
* (7) Boot node from network
*/
else if (cmd == 'nodeset') {
// Write ajax response to status bar
var prg = writeRsp(rsp, '');
$('#' + statBarId).append(prg);
// Hide loader
$('#' + statBarId).find('img').hide();
}
}
/**
* Update the status bar of a given tab
* Update status bar of a given tab
*
* @param data
* Data returned from HTTP request
* @return Nothing
*/
function updateStatusBar(data) {
// Get ajax response
var rsp = data.rsp;
var args = data.msg.split(';');
var statBarId = args[0].replace('out=', '');
@ -1855,7 +1040,7 @@ function formComplete(tabId) {
}
/**
* Update the power status of a node in the datatable
* Update power status of a node in the datatable
*
* @param data
* Data from HTTP request
@ -2031,13 +1216,11 @@ function setOSImageCookies(data) {
*/
function setGroupsCookies(data) {
var rsp = data.rsp;
// Save groups names in a cookie
$.cookie('Groups', rsp);
}
/**
* Get the row element that contains the given node
* Get row element that contains given node
*
* @param tgtNode
* Node to find
@ -2065,7 +1248,7 @@ function getNodeRow(tgtNode, rows) {
}
/**
* Get the nodes that are checked in a given datatable
* Get nodes that are checked in a given datatable
*
* @param datatableId
* The datatable ID

355
xCAT-UI/js/nodes/nodeset.js Normal file
View File

@ -0,0 +1,355 @@
/**
* Load nodeset page
*
* @param trgtNodes
* Targets to run nodeset against
* @return Nothing
*/
function loadNodesetPage(trgtNodes) {
// Get OS images
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
data : {
cmd : 'tabdump',
tgt : '',
args : 'osimage',
msg : ''
},
success : setOSImageCookies
});
// Get nodes tab
var tab = getNodesTab();
// Generate new tab ID
var inst = 0;
var tabId = 'nodesetTab' + inst;
while ($('#' + tabId).length) {
// If one already exists, generate another one
inst = inst + 1;
tabId = 'nodesetTab' + inst;
}
// Open new tab
// Create nodeset form
var nodesetForm = $('<div class="form"></div>');
// Create status bar
var statBarId = 'nodesetStatusBar' + inst;
var statBar = createStatusBar(statBarId);
statBar.hide();
nodesetForm.append(statBar);
// Create loader
var loader = createLoader('nodesetLoader');
statBar.append(loader);
// Create info bar
var infoBar = createInfoBar('Set the boot state for a node range');
nodesetForm.append(infoBar);
// Create target node or group
var tgt = $('<div><label for="target">Target node or group:</label><input type="text" name="target" value="' + trgtNodes + '"/></div>');
nodesetForm.append(tgt);
// Create boot method drop down
var method = $('<div></div>');
var methodLabel = $('<label for="method">Boot method:</label>');
var methodSelect = $('<select id="bootMethod" name="bootMethod"></select>');
methodSelect.append('<option value="boot">boot</option>');
methodSelect.append('<option value="install">install</option>');
methodSelect.append('<option value="iscsiboot">iscsiboot</option>');
methodSelect.append('<option value="netboot">netboot</option>');
methodSelect.append('<option value="statelite">statelite</option>');
method.append(methodLabel);
method.append(methodSelect);
nodesetForm.append(method);
// Create boot type drop down
var type = $('<div></div>');
var typeLabel = $('<label for="type">Boot type:</label>');
var typeSelect = $('<select id="bootType" name="bootType"></select>');
typeSelect.append('<option value="zvm">zvm</option>');
typeSelect.append('<option value="install">pxe</option>');
typeSelect.append('<option value="iscsiboot">yaboot</option>');
type.append(typeLabel);
type.append(typeSelect);
nodesetForm.append(type);
// Create operating system input
var os = $('<div></div>');
var osLabel = $('<label for="os">Operating system:</label>');
var osInput = $('<input type="text" name="os"/>');
osInput.one('focus', function(){
var tmp = $.cookie('OSVers');
if (tmp) {
// Turn on auto complete
$(this).autocomplete(tmp.split(','));
}
});
os.append(osLabel);
os.append(osInput);
nodesetForm.append(os);
// Create architecture input
var arch = $('<div></div>');
var archLabel = $('<label for="arch">Architecture:</label>');
var archInput = $('<input type="text" name="arch"/>');
archInput.one('focus', function(){
var tmp = $.cookie('OSArchs');
if (tmp) {
// Turn on auto complete
$(this).autocomplete(tmp.split(','));
}
});
arch.append(archLabel);
arch.append(archInput);
nodesetForm.append(arch);
// Create profiles input
var profile = $('<div></div>');
var profileLabel = $('<label for="profile">Profile:</label>');
var profileInput = $('<input type="text" name="profile"/>');
profileInput.one('focus', function(){
tmp = $.cookie('Profiles');
if (tmp) {
// Turn on auto complete
$(this).autocomplete(tmp.split(','));
}
});
profile.append(profileLabel);
profile.append(profileInput);
nodesetForm.append(profile);
/**
* Ok
*/
var okBtn = createButton('Ok');
okBtn.bind('click', function(event) {
// Check state, OS, arch, and profile
var ready = true;
var inputs = $('#' + tabId + ' input');
for ( var i = 0; i < inputs.length; i++) {
if (!inputs.eq(i).val() && inputs.eq(i).attr('name') != 'diskPw') {
inputs.eq(i).css('border', 'solid #FF0000 1px');
ready = false;
} else {
inputs.eq(i).css('border', 'solid #BDBDBD 1px');
}
}
if (ready) {
// Get nodes
var tgts = $('#' + tabId + ' input[name=target]').val();
// Get boot method
var method = $('#' + tabId + ' select[id=bootMethod]').val();
// Get boot type
var type = $('#' + tabId + ' select[id=bootType]').val();
// Get OS, arch, and profile
var os = $('#' + tabId + ' input[name=os]').val();
var arch = $('#' + tabId + ' input[name=arch]').val();
var profile = $('#' + tabId + ' input[name=profile]').val();
// Disable Ok button
$(this).unbind(event);
$(this).css( {
'background-color' : '#F2F2F2',
'color' : '#424242'
});
/**
* (1) Set the OS, arch, and profile
*/
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
data : {
cmd : 'nodeadd',
tgt : '',
args : tgts + ';noderes.netboot=' + type
+ ';nodetype.os=' + os
+ ';nodetype.arch=' + arch
+ ';nodetype.profile=' + profile,
msg : 'cmd=nodeadd;inst=' + inst
},
success : updateNodesetStatus
});
// Show status bar
statBar.show();
} else {
alert('You are missing some values');
}
});
nodesetForm.append(okBtn);
// Append to discover tab
tab.add(tabId, 'Nodeset', nodesetForm);
// Select new tab
tab.select(tabId);
}
/**
* Update nodeset status
*
* @param data
* Data returned from HTTP request
* @return Nothing
*/
function updateNodesetStatus(data) {
// Get ajax response
var rsp = data.rsp;
var args = data.msg.split(';');
var cmd = args[0].replace('cmd=', '');
// Get nodeset instance
var inst = args[1].replace('inst=', '');
// Get status bar ID
var statBarId = 'nodesetStatusBar' + inst;
// Get tab ID
var tabId = 'nodesetTab' + inst;
// Get nodes
var tgts = $('#' + tabId + ' input[name=target]').val();
// Get boot method
var method = $('#' + tabId + ' select[id=bootMethod]').val();
/**
* (2) Update /etc/hosts
*/
if (cmd == 'nodeadd') {
if (rsp.length) {
$('#' + statBarId).find('img').hide();
$('#' + statBarId).append('<p>(Error) Failed to create node definition</p>');
} else {
// Create target nodes string
var tgtNodesStr = '';
// Loop through each node
for ( var i in nodes) {
// If it is the 1st and only node
if (i == 0 && i == nodes.length - 1) {
tgtNodesStr += nodes[i];
}
// If it is the 1st node of many nodes
else if (i == 0 && i != nodes.length - 1) {
// Append a comma to the string
tgtNodesStr += nodes[i] + ', ';
} else {
// If it is the last node
if (i == nodes.length - 1) {
// Append nothing to the string
tgtNodesStr += nodes[i];
} else {
// Append a comma to the string
tgtNodesStr += nodes[i] + ', ';
}
}
}
$('#' + statBarId).append('<p>Node definition created for ' + tgtNodesStr + '</p>');
}
// Update /etc/hosts
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
data : {
cmd : 'makehosts',
tgt : '',
args : '',
msg : 'cmd=makehosts;inst=' + inst
},
success : updateNodesetStatus
});
}
/**
* (4) Update DNS
*/
else if (cmd == 'makehosts') {
// If no output, no errors occurred
if (rsp.length) {
$('#' + statBarId).append('<p>(Error) Failed to update /etc/hosts</p>');
} else {
$('#' + statBarId).append('<p>/etc/hosts updated</p>');
}
// Update DNS
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
data : {
cmd : 'makedns',
tgt : '',
args : '',
msg : 'cmd=makedns;inst=' + inst
},
success : updateNodesetStatus
});
}
/**
* (5) Update DHCP
*/
else if (cmd == 'makedns') {
// Write ajax response to status bar
var prg = writeRsp(rsp, '');
$('#' + statBarId).append(prg);
// Update DHCP
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
data : {
cmd : 'makedhcp',
tgt : '',
args : '-a',
msg : 'cmd=makedhcp;inst=' + inst
},
success : updateNodesetStatus
});
}
/**
* (6) Prepare node for boot
*/
else if (cmd == 'makedhcp') {
// Write ajax response to status bar
var prg = writeRsp(rsp, '');
$('#' + statBarId).append(prg);
// Prepare node for boot
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
data : {
cmd : 'nodeset',
tgt : tgts,
args : method,
msg : 'cmd=nodeset;inst=' + inst
},
success : updateNodesetStatus
});
}
/**
* (7) Boot node from network
*/
else if (cmd == 'nodeset') {
// Write ajax response to status bar
var prg = writeRsp(rsp, '');
$('#' + statBarId).append(prg);
// Hide loader
$('#' + statBarId).find('img').hide();
}
}

View File

@ -0,0 +1,173 @@
/**
* Load netboot page
*
* @param tgtNodes
* Targets to run rnetboot against
* @return Nothing
*/
function loadNetbootPage(tgtNodes) {
// Get nodes tab
var tab = getNodesTab();
// Generate new tab ID
var inst = 0;
var newTabId = 'netbootTab' + inst;
while ($('#' + newTabId).length) {
// If one already exists, generate another one
inst = inst + 1;
newTabId = 'netbootTab' + inst;
}
// Create netboot form
var netbootForm = $('<div class="form"></div>');
// Create status bar
var barId = 'netbootStatusBar' + inst;
var statusBar = createStatusBar(barId);
statusBar.hide();
netbootForm.append(statusBar);
// Create loader
var loader = createLoader('netbootLoader');
statusBar.append(loader);
// Create info bar
var infoBar = createInfoBar('Cause the range of nodes to boot to network');
netbootForm.append(infoBar);
// Create target node or group input
var target = $('<div><label for="target">Target node or group:</label><input type="text" name="target" value="' + tgtNodes + '"/></div>');
netbootForm.append(target);
// Create options
var optsDIV = $('<div></div>');
var optsLabel = $('<label>Options:</label>');
var optsList = $('<ul></ul>');
var opt = $('<li></li>');
optsList.append(opt);
optsDIV.append(optsLabel);
optsDIV.append(optsList);
netbootForm.append(optsDIV);
// Create boot order checkbox
var bootOrderChkBox = $('<input type="checkbox" id="s" name="s"/>');
opt.append(bootOrderChkBox);
opt.append('Set the boot device order');
// Create boot order input
var bootOrder = $('<li><label for="bootOrder">Boot order:</label><input type="text" name="bootOrder"/></li>');
bootOrder.hide();
optsList.append(bootOrder);
// Create force reboot checkbox
optsList.append('<li><input type="checkbox" id="F" name="F"/>Force reboot</li>');
// Create force shutdown checkbox
optsList.append('<li><input type="checkbox" id="f" name="f"/>Force immediate shutdown of the partition</li>');
// Create iscsi dump checkbox
optsList.append('<li><input type="checkbox" id="I" name="I"/>Do a iscsi dump on AIX</li>');
// Show boot order when checkbox is checked
bootOrderChkBox.bind('click', function(event) {
if ($(this).is(':checked')) {
bootOrder.show();
} else {
bootOrder.hide();
}
});
// Determine plugin
var tmp = tgtNodes.split(',');
for ( var i = 0; i < tmp.length; i++) {
var mgt = getNodeMgt(tmp[i]);
// If it is zvm
if (mgt == 'zvm') {
// Add IPL input
netbootForm.append('<div><label for="ipl">IPL:</label><input type="text" name="ipl"/></div>');
break;
}
}
/**
* Ok
*/
var okBtn = createButton('Ok');
okBtn.bind('click', function(event) {
// Check inputs
var ready = true;
var inputs = $("#" + newTabId + " input[type='text']:visible");
for ( var i = 0; i < inputs.length; i++) {
if (!inputs.eq(i).val()) {
inputs.eq(i).css('border', 'solid #FF0000 1px');
ready = false;
} else {
inputs.eq(i).css('border', 'solid #BDBDBD 1px');
}
}
// Generate arguments
var chkBoxes = $("#" + newTabId + " input[type='checkbox']:checked");
var optStr = '';
var opt;
for ( var i = 0; i < chkBoxes.length; i++) {
opt = chkBoxes.eq(i).attr('name');
optStr += '-' + opt;
// If it is the boot order
if (opt == 's') {
// Get the boot order
optStr += ';' + $('#' + newTabId + ' input[name=bootOrder]').val();
}
// Append ; to end of string
if (i < (chkBoxes.length - 1)) {
optStr += ';';
}
}
// If no inputs are empty
if (ready) {
// Get nodes
var tgts = $('#' + newTabId + ' input[name=target]').val();
// Get IPL address
var ipl = $('#' + newTabId + ' input[name=ipl]');
if (ipl) {
optStr += 'ipl=' + ipl.val();
}
// Disable Ok button
$(this).unbind(event);
$(this).css( {
'background-color' : '#F2F2F2',
'color' : '#424242'
});
/**
* (1) Boot to network
*/
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
data : {
cmd : 'rnetboot',
tgt : tgts,
args : optStr,
msg : 'out=' + barId + ';cmd=rnetboot;tgt=' + tgts
},
success : updateStatusBar
});
// Show status bar
statusBar.show();
} else {
alert('You are missing some values');
}
});
netbootForm.append(okBtn);
// Append to discover tab
tab.add(newTabId, 'Netboot', netbootForm);
// Select new tab
tab.select(newTabId);
}

View File

@ -0,0 +1,255 @@
/**
* Load updatenode page
*
* @param tgtNodes
* Targets to run updatenode against
* @return Nothing
*/
function loadUpdatenodePage(tgtNodes) {
// Get nodes tab
var tab = getNodesTab();
// Generate new tab ID
var inst = 0;
var newTabId = 'updatenodeTab' + inst;
while ($('#' + newTabId).length) {
// If one already exists, generate another one
inst = inst + 1;
newTabId = 'updatenodeTab' + inst;
}
// Create updatenode form
var updatenodeForm = $('<div class="form"></div>');
// Create status bar
var statBarId = 'updatenodeStatusBar' + inst;
var statusBar = createStatusBar(statBarId);
statusBar.hide();
updatenodeForm.append(statusBar);
// Create loader
var loader = createLoader('updatenodeLoader');
statusBar.append(loader);
// Create info bar
var infoBar = createInfoBar('Update nodes in an xCAT environment');
updatenodeForm.append(infoBar);
// Create target node or group input
var target = $('<div><label for="target">Target node or group:</label><input type="text" name="target" value="' + tgtNodes + '"/></div>');
updatenodeForm.append(target);
// Create options
var optsDIV = $('<div></div>');
var optsLabel = $('<label>Options:</label>');
var optsList = $('<ul></ul>');
optsDIV.append(optsLabel);
optsDIV.append(optsList);
updatenodeForm.append(optsDIV);
// Create update all software checkbox
var updateAllChkBox = $('<input type="checkbox" id="A" name="A"/>');
var updateAllOpt = $('<li></li>');
optsList.append(updateAllOpt);
updateAllOpt.append(updateAllChkBox);
updateAllOpt.append('Install or update all software contained in the source directory');
var allSwScrDirectory = $('<li><label for="allSwSrcDirectory">Alternate source directory:</label><input type="text" name="allSwSrcDirectory"/></li>');
allSwScrDirectory.hide();
optsList.append(allSwScrDirectory);
// Show alternate source directory when checked
updateAllChkBox.bind('click', function(event) {
if ($(this).is(':checked')) {
allSwScrDirectory.show();
} else {
allSwScrDirectory.hide();
}
});
// Create update software checkbox
var updateChkBox = $('<input type="checkbox" id="S" name="S"/>');
var updateOpt = $('<li></li>');
optsList.append(updateOpt);
updateOpt.append(updateChkBox);
updateOpt.append('Update software');
// Create source directory input
var scrDirectory = $('<li><label for="srcDirectory">Alternate source directory:</label><input type="text" name="srcDirectory"/></li>');
scrDirectory.hide();
optsList.append(scrDirectory);
// Create other packages input
var otherPkgs = $('<li><label for="otherpkgs">otherpkgs:</label><input type="text" name="otherpkgs"/></li>');
otherPkgs.hide();
optsList.append(otherPkgs);
// Create RPM flags input
var rpmFlags = $('<li><label for="rpm_flags">rpm_flags:</label><input type="text" name="rpm_flags"/></li>');
rpmFlags.hide();
optsList.append(rpmFlags);
// Create installp flags input
var installPFlags = $('<li><label for="installp_flags">installp_flags:</label><input type="text" name="installp_flags"/></li>');
installPFlags.hide();
optsList.append(installPFlags);
// Show alternate source directory when checked
updateChkBox.bind('click', function(event) {
if ($(this).is(':checked')) {
scrDirectory.show();
otherPkgs.show();
rpmFlags.show();
installPFlags.show();
} else {
scrDirectory.hide();
otherPkgs.hide();
rpmFlags.hide();
installPFlags.hide();
}
});
// Create postscripts input
var postChkBox = $('<input type="checkbox" id="P" name="P"/>');
var postOpt = $('<li></li>');
optsList.append(postOpt);
postOpt.append(postChkBox);
postOpt.append('Run postscripts');
var postscripts = $('<li><label for="postscripts">Postscripts:</label><input type="text" name="postscripts"/></li>');
postscripts.hide();
optsList.append(postscripts);
// Show alternate source directory when checked
postChkBox.bind('click', function(event) {
if ($(this).is(':checked')) {
postscripts.show();
} else {
postscripts.hide();
}
});
optsList.append('<li><input type="checkbox" id="F" name="F"/>Distribute and synchronize files</li>');
optsList.append('<li><input type="checkbox" id="k" name="k"/>Update the ssh keys and host keys for the service nodes and compute nodes</li>');
// Create update OS checkbox
var osChkBox = $('<input type="checkbox" id="o" name="o"/>');
var osOpt = $('<li></li>');
optsList.append(osOpt);
osOpt.append(osChkBox);
osOpt.append('Update the operating system');
var os = $('<li><label for="scripts">Operating system:</label><input type="text" name="os"/></li>');
os.hide();
optsList.append(os);
// Show alternate source directory when checked
osChkBox.bind('click', function(event) {
if ($(this).is(':checked')) {
os.show();
} else {
os.hide();
}
});
/**
* Ok
*/
var okBtn = createButton('Ok');
okBtn.bind('click', function(event) {
var ready = true;
// Generate arguments
var chkBoxes = $("#" + newTabId + " input[type='checkbox']:checked");
var optStr = '';
var opt;
for ( var i = 0; i < chkBoxes.length; i++) {
opt = chkBoxes.eq(i).attr('name');
optStr += '-' + opt;
// If update all software is checked
if (opt == 'S') {
var srcDir = $('#' + newTabId + ' input[name=allSwSrcDirectory]').val();
if (srcDir) {
optStr += ';-d ' + srcDir;
}
}
// If update software is checked
if (opt == 'S') {
var srcDir = $('#' + newTabId + ' input[name=srcDirectory]').val();
if (srcDir) {
optStr += ';-d;' + srcDir;
}
var otherpkgs = $('#' + newTabId + ' input[name=otherpkgs]').val();
if (otherpkgs) {
optStr += ';otherpkgs=' + otherpkgs;
}
var rpm_flags = $('#' + newTabId + ' input[name=rpm_flags]').val();
if (rpm_flags) {
optStr += ';rpm_flags=' + rpm_flags;
}
var installp_flags = $('#' + newTabId + ' input[name=installp_flags]').val();
if (installp_flags) {
optStr += ';installp_flags=' + installp_flags;
}
}
// If postscripts is checked
if (opt == 'P') {
// Get postscripts
optStr += ';' + $('#' + newTabId + ' input[name=postscripts]').val();
}
// If operating system is checked
if (opt == 'o') {
// Get the OS
optStr += ';' + $('#' + newTabId + ' input[name=os]').val();
}
// Append ; to end of string
if (i < (chkBoxes.length - 1)) {
optStr += ';';
}
}
// If no inputs are empty
if (ready) {
// Get nodes
var tgts = $('#' + newTabId + ' input[name=target]').val();
// Disable Ok button
$(this).unbind(event);
$(this).css( {
'background-color' : '#F2F2F2',
'color' : '#424242'
});
/**
* (1) Boot to network
*/
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
data : {
cmd : 'updatenode',
tgt : tgts,
args : optStr,
msg : 'out=' + statBarId + ';cmd=updatenode;tgt=' + tgts
},
success : updateStatusBar
});
// Show status bar
statusBar.show();
} else {
alert('You are missing some values');
}
});
updatenodeForm.append(okBtn);
// Append to discover tab
tab.add(newTabId, 'Updatenode', updatenodeForm);
// Select new tab
tab.select(newTabId);
}

View File

@ -38,8 +38,7 @@ function loadProvisionPage() {
// Create status bar, hide on load
var statBarId = 'ProvisionStatusBar';
var statBar = $('<div class="statusBar" id="' + statBarId + '"></div>')
.hide();
var statBar = $('<div class="statusBar" id="' + statBarId + '"></div>').hide();
// Create info bar
var infoBar = createInfoBar('Provision a node');
@ -56,8 +55,7 @@ function loadProvisionPage() {
tab.init();
$('#content').append(tab.object());
// Create drop-down menu
// Hardware available to provision - ipmi, blade, hmc, ivm, fsp, and zvm
// Create drop down menu for platforms
var div = $('<div></div>');
provForm.append(div);

View File

@ -29,10 +29,9 @@ Tab.prototype.init = function() {
this.tab.append(tabList);
// Create a template with close button
var tabs = this.tab
.tabs( {
tabTemplate : "<li><a href=\"#{href}\">#{label}</a><span class=\"tab-close ui-icon ui-icon-close\"></span></li>"
});
var tabs = this.tab.tabs( {
tabTemplate : "<li><a href=\"#{href}\">#{label}</a><span class=\"tab-close ui-icon ui-icon-close\"></span></li>"
});
// Remove dummy tab
this.tab.tabs("remove", 0);
@ -103,7 +102,6 @@ Tab.prototype.select = function(id) {
* @return Nothing
*/
Tab.prototype.remove = function(id) {
// To be continued
var selectorStr = 'a[href="\#' + id + '"]';
var selectTab = $(selectorStr, this.tab).parent();
var index = ($('li', this.tab).index(selectTab));
@ -391,8 +389,6 @@ function createMenu(items) {
*/
function initPage() {
// Load javascripts
// TODO: We need to determine which page needs which script
// and load less
includeJs("js/jquery/jquery.dataTables.min.js");
includeJs("js/jquery/jquery.form.js");
includeJs("js/jquery/jquery.jeditable.js");
@ -427,6 +423,10 @@ function initPage() {
// Show the page
$("#content").children().remove();
if (page == 'index.php') {
includeJs("js/nodes/nodeset.js");
includeJs("js/nodes/rnetboot.js");
includeJs("js/nodes/updatenode.js");
headers.eq(0).css('background-color', '#A9D0F5');
loadNodesPage();
} else if (page == 'configure.php') {
@ -473,7 +473,7 @@ function includeJs(file) {
* @param rsp
* Ajax response
* @param pattern
* Pattern to insert a break in between
* Pattern to replace with a break
* @return Paragraph containing ajax response
*/
function writeRsp(rsp, pattern) {
@ -481,6 +481,8 @@ function writeRsp(rsp, pattern) {
var prg = $('<p></p>');
for ( var i in rsp) {
if (rsp[i]) {
// Create regular expression for given pattern
// Replace pattern with break
if (pattern) {
rsp[i] = rsp[i].replace(new RegExp(pattern, 'g'), '<br>');
}