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:
@ -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
|
||||
|
@ -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
355
xCAT-UI/js/nodes/nodeset.js
Normal 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();
|
||||
}
|
||||
}
|
173
xCAT-UI/js/nodes/rnetboot.js
Normal file
173
xCAT-UI/js/nodes/rnetboot.js
Normal 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);
|
||||
}
|
255
xCAT-UI/js/nodes/updatenode.js
Normal file
255
xCAT-UI/js/nodes/updatenode.js
Normal 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);
|
||||
}
|
@ -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);
|
||||
|
||||
|
@ -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>');
|
||||
}
|
||||
|
Reference in New Issue
Block a user