|
|
|
@ -1,5 +1,3 @@
|
|
|
|
|
var provisionClock;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Create nodes datatable for a given group
|
|
|
|
|
*
|
|
|
|
@ -385,45 +383,33 @@ function createProvisionNew(plugin, inst) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Create provision node division
|
|
|
|
|
* Create section to provision node
|
|
|
|
|
*
|
|
|
|
|
* @param plugin
|
|
|
|
|
* Plugin name to create division for
|
|
|
|
|
* Plugin name
|
|
|
|
|
* @param container
|
|
|
|
|
* Container to hold provisioning form
|
|
|
|
|
* Container to hold provision section
|
|
|
|
|
* @return Nothing
|
|
|
|
|
*/
|
|
|
|
|
function createProvision(plugin, container){
|
|
|
|
|
// Group, nodes, arch
|
|
|
|
|
if ('quick' == plugin) {
|
|
|
|
|
container.append(createProvWithUrl());
|
|
|
|
|
} else {
|
|
|
|
|
container.append(createProvNoUrl(plugin));
|
|
|
|
|
container.find('#' + plugin + 'group').bind('change', function() {
|
|
|
|
|
var pluginName = $(this).attr('id').replace('group', '');
|
|
|
|
|
$('#' + pluginName + 'SelectNodesTable').html('<img src="images/loader.gif"></img>');
|
|
|
|
|
createNodesArea($(this).val(), pluginName + 'SelectNodesTable');
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Advanced options
|
|
|
|
|
container.append('<div id="advoption"></div>');
|
|
|
|
|
function appendProvisionSection(plugin, container) {
|
|
|
|
|
// Get provision tab ID
|
|
|
|
|
var tabId = container.parents('.tab').attr('id');
|
|
|
|
|
|
|
|
|
|
if (plugin == 'quick')
|
|
|
|
|
appendProvision4Url(container); // For provisioning based on argmunents found in URL
|
|
|
|
|
else
|
|
|
|
|
appendProvision4NoUrl(plugin, container);
|
|
|
|
|
|
|
|
|
|
// Add provision button
|
|
|
|
|
var provisionBtn = createButton('Provision');
|
|
|
|
|
provisionBtn.bind('click', function(){
|
|
|
|
|
var plugin = $(this).parent().parent().attr('id').replace('ProvisionTab', '');
|
|
|
|
|
quickProvision(plugin);
|
|
|
|
|
provisionNode(tabId);
|
|
|
|
|
});
|
|
|
|
|
provisionBtn.hide();
|
|
|
|
|
container.append(provisionBtn);
|
|
|
|
|
|
|
|
|
|
// Bind image select to change event
|
|
|
|
|
container.find('#' + plugin + 'image').bind('change', function(){
|
|
|
|
|
var temp = $(this).attr('id');
|
|
|
|
|
temp = temp.replace('image', '');
|
|
|
|
|
$('#' + temp + 'ProvisionTab #advoption').html('<img src="images/loader.gif"></img>');
|
|
|
|
|
provAdvOption($(this).val(), temp);
|
|
|
|
|
container.find('select[name=image]').bind('change', function() {
|
|
|
|
|
createAdvancedOptions($(this).val(), tabId);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
$.ajax({
|
|
|
|
@ -433,18 +419,16 @@ function createProvision(plugin, container){
|
|
|
|
|
cmd : 'lsdef',
|
|
|
|
|
tgt : '',
|
|
|
|
|
args : '-t;osimage',
|
|
|
|
|
msg : plugin
|
|
|
|
|
msg : tabId
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
success : function(data){
|
|
|
|
|
var containerId = data.msg + 'ProvisionTab';
|
|
|
|
|
var tabId = data.msg;
|
|
|
|
|
var i = 0;
|
|
|
|
|
var imageName = 0;
|
|
|
|
|
var position = 0;
|
|
|
|
|
var imageSelect = $('#' + containerId + ' #' + data.msg + 'image');
|
|
|
|
|
$('#' + containerId + ' img').remove();
|
|
|
|
|
if (!data.rsp.length) {
|
|
|
|
|
$('#' + containerId).prepend(createWarnBar('Please run copycds and genimage in provision page before continuing!'));
|
|
|
|
|
$('#' + tabId).prepend(createWarnBar('Please run copycds and genimage in provision page before continuing!'));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -453,295 +437,307 @@ function createProvision(plugin, container){
|
|
|
|
|
position = imageName.indexOf(' ');
|
|
|
|
|
imageName = imageName.substr(0, position);
|
|
|
|
|
|
|
|
|
|
imageSelect.append($('<option value="' + imageName + '">' + imageName + '</option>'));
|
|
|
|
|
$('#' + tabId + ' select[name=image]').append($('<option value="' + imageName + '">' + imageName + '</option>'));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Trigger select change event
|
|
|
|
|
imageSelect.trigger('change');
|
|
|
|
|
$('#' + tabId + ' select[name=image]').trigger('change');
|
|
|
|
|
// Show provision button
|
|
|
|
|
$('#' + containerId + ' button').show();
|
|
|
|
|
$('#' + tabId + ' button').show();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Create provision node division using URL
|
|
|
|
|
* Create provision node section using URL
|
|
|
|
|
*
|
|
|
|
|
* @returns Provisiong node division
|
|
|
|
|
* @param container
|
|
|
|
|
* Container to hold provision section
|
|
|
|
|
* @returns Nothing
|
|
|
|
|
*/
|
|
|
|
|
function createProvWithUrl(){
|
|
|
|
|
var queryStr = window.location.search;
|
|
|
|
|
var argArray = queryStr.substr(1).split('&');
|
|
|
|
|
var tempHash = new Object();
|
|
|
|
|
var i = 0;
|
|
|
|
|
var tempArray;
|
|
|
|
|
function appendProvision4Url(container){
|
|
|
|
|
var query = window.location.search;
|
|
|
|
|
var args = query.substr(1).split('&');
|
|
|
|
|
var parms = new Object();
|
|
|
|
|
var tmp;
|
|
|
|
|
|
|
|
|
|
var provHtml = '';
|
|
|
|
|
// Turn URL arguments into hash array
|
|
|
|
|
for (var i = 0; i < args.length; i++) {
|
|
|
|
|
tmp = args[i].split('=');
|
|
|
|
|
parms[tmp[0]] = tmp[1];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var master = '';
|
|
|
|
|
if (parms['master'])
|
|
|
|
|
master = parms['master'];
|
|
|
|
|
|
|
|
|
|
var nfsserver = '';
|
|
|
|
|
if (parms['nfsserver'])
|
|
|
|
|
nfsserver = parms['nfsserver'];
|
|
|
|
|
|
|
|
|
|
var tftpserver = '';
|
|
|
|
|
var nfsserver = '';
|
|
|
|
|
for (i = 0; i < argArray.length; i++) {
|
|
|
|
|
tempArray = argArray[i].split('=');
|
|
|
|
|
tempHash[tempArray[0]] = tempArray[1];
|
|
|
|
|
}
|
|
|
|
|
if (parms['tftpserver'])
|
|
|
|
|
tftpserver = parms['tftpserver'];
|
|
|
|
|
|
|
|
|
|
provHtml += '<div><label>Nodes:</label><input type="text" disabled="disabled" value="' + tempHash['nodes'] + '"></div>';
|
|
|
|
|
provHtml += '<div><label>Architecture:</label><input type="text" disabled="disabled" value="' + tempHash['arch'] + '"></div>';
|
|
|
|
|
provHtml += '<div><label>Image:</label><select id="quickimage"></select><img src="images/loader.gif"></img></div>' +
|
|
|
|
|
'<div><label>Install NIC:</label><input value="mac"/></div>' +
|
|
|
|
|
'<div><label>Primary NIC:</label><input value="mac"/></div>' ;
|
|
|
|
|
container.append('<div><label>Node:</label><input type="text" disabled="disabled" name="node" value="' + parms['nodes'] + '"></div>');
|
|
|
|
|
container.append('<div><label>Architecture:</label><input type="text" disabled="disabled" name="arch" value="' + parms['arch'] + '"></div>');
|
|
|
|
|
container.append('<div><label>Image name:</label><select name="image"></select></div>');
|
|
|
|
|
container.append( '<div><label>Install NIC:</label><input type="text" name="installNic"/></div>');
|
|
|
|
|
container.append('<div><label>Primary NIC:</label><input type="text" name="primaryNic"/></div>');
|
|
|
|
|
container.append('<div><label>xCAT master:</label><input type="text" name="xcatMaster" value="' + master + '"></div>');
|
|
|
|
|
container.append('<div><label>TFTP server:</label><input type="text" name="tftpServer" value="' + tftpserver + '"></div>');
|
|
|
|
|
container.append('<div><label>NFS server:</label><input type="text" name="nfsServer" value="' + nfsserver + '"></div>');
|
|
|
|
|
|
|
|
|
|
if (tempHash['master']) {
|
|
|
|
|
master = tempHash['master'];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (tempHash['nfsserver']) {
|
|
|
|
|
nfsserver = tempHash['nfsserver'];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (tempHash['tftpserver']) {
|
|
|
|
|
tftpserver = tempHash['tftpserver'];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
provHtml += '<div><label>xCAT master:</label><input type="text" value="' + master + '"></div>';
|
|
|
|
|
provHtml += '<div><label>TFTP server:</label><input type="text" value="' + tftpserver + '"></div>';
|
|
|
|
|
provHtml += '<div><label>NFS server:</label><input type="text" value="' + nfsserver + '"></div>';
|
|
|
|
|
|
|
|
|
|
return provHtml;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Create provision node division without using URL
|
|
|
|
|
* Create section to provision node using no URL
|
|
|
|
|
*
|
|
|
|
|
* @param plugin
|
|
|
|
|
* Plugin name to create division for
|
|
|
|
|
* @returns {String}
|
|
|
|
|
* Create provision section for given plugin
|
|
|
|
|
* @param container
|
|
|
|
|
* Container to hold provision section
|
|
|
|
|
* @returns Nothing
|
|
|
|
|
*/
|
|
|
|
|
function createProvNoUrl(plugin){
|
|
|
|
|
// Select group
|
|
|
|
|
var groupHtml = '<div><label>Group:</label>';
|
|
|
|
|
function appendProvision4NoUrl(plugin, container){
|
|
|
|
|
// Get provision tab ID
|
|
|
|
|
var tabId = container.parents('.tab').attr('id');
|
|
|
|
|
|
|
|
|
|
// Create node fieldset
|
|
|
|
|
var nodeFS = $('<fieldset></fieldset>');
|
|
|
|
|
var nodeLegend = $('<legend>Node</legend>');
|
|
|
|
|
nodeFS.append(nodeLegend);
|
|
|
|
|
container.append(nodeFS);
|
|
|
|
|
|
|
|
|
|
var nodeAttr = $('<div style="display: inline-table; vertical-align: middle; width: 85%; margin-left: 10px;"></div>');
|
|
|
|
|
nodeFS.append($('<div style="display: inline-table; vertical-align: middle;"><img src="images/provision/computer.png"></img></div>'));
|
|
|
|
|
nodeFS.append(nodeAttr);
|
|
|
|
|
|
|
|
|
|
// Create image fieldset
|
|
|
|
|
var imgFS = $('<fieldset></fieldset>');
|
|
|
|
|
var imgLegend = $('<legend>Image</legend>');
|
|
|
|
|
imgFS.append(imgLegend);
|
|
|
|
|
container.append(imgFS);
|
|
|
|
|
|
|
|
|
|
var imgAttr = $('<div style="display: inline-table; vertical-align: middle;"></div>');
|
|
|
|
|
imgFS.append($('<div style="display: inline-table; vertical-align: middle;"><img src="images/provision/operating_system.png"></img></div>'));
|
|
|
|
|
imgFS.append(imgAttr);
|
|
|
|
|
|
|
|
|
|
// Select group name
|
|
|
|
|
var group = $('<div></div>').append('<label>Group:</label>');
|
|
|
|
|
var groupSelect = $('<select name="group"></select>');
|
|
|
|
|
group.append(groupSelect);
|
|
|
|
|
var groupNames = $.cookie('groups');
|
|
|
|
|
if (groupNames) {
|
|
|
|
|
groupHtml += '<select id="' + plugin + 'group"><option></option>';
|
|
|
|
|
var temp = groupNames.split(',');
|
|
|
|
|
for (var i in temp) {
|
|
|
|
|
groupHtml += '<option value="' + temp[i] + '">' + temp[i] + '</option>';
|
|
|
|
|
}
|
|
|
|
|
groupHtml += '</select>';
|
|
|
|
|
}
|
|
|
|
|
groupHtml += '</div>';
|
|
|
|
|
|
|
|
|
|
// Select nodes
|
|
|
|
|
var nodesHtml = '<div><label>Nodes:</label><div id="' + plugin + 'SelectNodesTable" style="display: inline-block; width:700px; overflow-y:auto;">Select a group to view its nodes</div></div>';
|
|
|
|
|
var tmp = groupNames.split(',');
|
|
|
|
|
groupSelect.append('<option value=""></option>'); // Append empty group name
|
|
|
|
|
for (var i in tmp)
|
|
|
|
|
groupSelect.append('<option value="' + tmp[i] + '">' + tmp[i] + '</option>');
|
|
|
|
|
}
|
|
|
|
|
nodeAttr.append(group);
|
|
|
|
|
|
|
|
|
|
// Select node from table
|
|
|
|
|
var nodes = $('<div><label style="vertical-align: top;">Nodes:</label></div>');
|
|
|
|
|
var nodesTable = $('<div id="nodesTable" style="display: inline-block; max-width: 800px;"><p>Select a group to view its nodes</p></div>');
|
|
|
|
|
nodes.append(nodesTable);
|
|
|
|
|
nodeAttr.append(nodes);
|
|
|
|
|
|
|
|
|
|
// Select architecture
|
|
|
|
|
var archHtml = '<div><label>Architecture:</label>';
|
|
|
|
|
var arch = $('<div></div>').append('<label>Architecture:</label>');
|
|
|
|
|
var archName = $.cookie('osarchs');
|
|
|
|
|
if (archName) {
|
|
|
|
|
archHtml += '<select id="arch">';
|
|
|
|
|
var temp = archName.split(',');
|
|
|
|
|
for (var i in temp) {
|
|
|
|
|
archHtml += '<option value="' + temp[i] + '">' + temp[i] + '</option>';
|
|
|
|
|
}
|
|
|
|
|
archHtml += '</select>';
|
|
|
|
|
var archSelect = $('<select name="arch"></select>');
|
|
|
|
|
arch.append(archSelect);
|
|
|
|
|
|
|
|
|
|
var tmp = archName.split(',');
|
|
|
|
|
for (var i in tmp)
|
|
|
|
|
archSelect.append('<option value="' + tmp[i] + '">' + tmp[i] + '</option>');
|
|
|
|
|
} else {
|
|
|
|
|
archHtml += '<input type="text" id="arch">';
|
|
|
|
|
arch.append('<input type="text" name="arch"/>');
|
|
|
|
|
}
|
|
|
|
|
archHtml += '</div>';
|
|
|
|
|
imgAttr.append(arch);
|
|
|
|
|
|
|
|
|
|
// Add static input part
|
|
|
|
|
var staticHtml = '<div><label>Image:</label><select id="' + plugin + 'image"></select><img src="images/loader.gif"></img></div>' +
|
|
|
|
|
'<div><label>Install NIC:</label><input value="mac"/></div>' +
|
|
|
|
|
'<div><label>Primary NIC:</label><input value="mac"/></div>' +
|
|
|
|
|
'<div><label>xCAT Master:</label><input/></div>' +
|
|
|
|
|
'<div><label>TFTP Server:</label><input/></div>' +
|
|
|
|
|
'<div><label>NFS Server:</label><input/></div>';
|
|
|
|
|
return groupHtml + nodesHtml + archHtml + staticHtml;
|
|
|
|
|
imgAttr.append('<div><label>Image name:</label><select name="image"></select></div>');
|
|
|
|
|
imgAttr.append('<div><label>Install NIC:</label><input type="text" name="installNic"/></div>');
|
|
|
|
|
imgAttr.append('<div><label>Primary NIC:</label><input type="text" name="primaryNic"/></div>');
|
|
|
|
|
imgAttr.append('<div><label>xCAT master:</label><input type="text" name="xcatMaster"/></div>');
|
|
|
|
|
imgAttr.append('<div><label>TFTP server:</label><input type="text" name="tftpServer"/></div>');
|
|
|
|
|
imgAttr.append('<div><label>NFS server:</label><input type="text" name=nfsServer"/></div>');
|
|
|
|
|
|
|
|
|
|
// When a group is selected, show the nodes belonging to that group
|
|
|
|
|
groupSelect.bind('change', function() {
|
|
|
|
|
var nodesTableId = '#' + tabId + ' #nodesTable';
|
|
|
|
|
$(nodesTableId).append(createLoader());
|
|
|
|
|
createNodesTable($(this).val(), nodesTableId);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get needed fields for provsioning and send command to server
|
|
|
|
|
* Provision node
|
|
|
|
|
*
|
|
|
|
|
* @param plugin
|
|
|
|
|
* Plugin name of platform to provision
|
|
|
|
|
* @param tabId
|
|
|
|
|
* Provision tab ID
|
|
|
|
|
* @return Nothing
|
|
|
|
|
*/
|
|
|
|
|
function quickProvision(plugin){
|
|
|
|
|
var errorMessage = '';
|
|
|
|
|
var argsArray = new Array();
|
|
|
|
|
var nodesName = '';
|
|
|
|
|
var provisionArg = '';
|
|
|
|
|
var provisionFrame;
|
|
|
|
|
var imageName = '';
|
|
|
|
|
var url = '';
|
|
|
|
|
var softwareArg = '';
|
|
|
|
|
var containerId = plugin + 'ProvisionTab';
|
|
|
|
|
$('#' + containerId + ' .ui-state-error').remove();
|
|
|
|
|
function provisionNode(tabId) {
|
|
|
|
|
var plugin = tabId;
|
|
|
|
|
var errorMessage = "";
|
|
|
|
|
var args = new Array();
|
|
|
|
|
var node = "";
|
|
|
|
|
|
|
|
|
|
$('#' + containerId + ' input[type!="checkbox"]').each(function() {
|
|
|
|
|
// Delete any existing warnings
|
|
|
|
|
$('#' + tabId + ' .ui-state-error').remove();
|
|
|
|
|
|
|
|
|
|
// Go through each input
|
|
|
|
|
$('#' + tabId + ' input[type!="checkbox"]').each(function() {
|
|
|
|
|
if (!$(this).val()) {
|
|
|
|
|
errorMessage = 'Please provide a value for each missing field!';
|
|
|
|
|
return false;
|
|
|
|
|
} else {
|
|
|
|
|
argsArray.push($(this).val());
|
|
|
|
|
args.push($(this).val());
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Do not continue if error was found
|
|
|
|
|
if (errorMessage) {
|
|
|
|
|
$('#' + containerId).prepend('<p class="ui-state-error">' + errorMessage + '</p>');
|
|
|
|
|
$('#' + tabId).prepend(createWarnBar(errorMessage));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// If jumped from nodes page, get node names
|
|
|
|
|
if ('quick' == plugin) {
|
|
|
|
|
nodesName = argsArray.shift();
|
|
|
|
|
}
|
|
|
|
|
// Select platform, get node names from table checkbox
|
|
|
|
|
else {
|
|
|
|
|
// Should unshift the arch type
|
|
|
|
|
argsArray.unshift($('#' + containerId + ' #arch').val());
|
|
|
|
|
nodesName = getCheckedByObj($('#' + containerId + ' #' + plugin + 'SelectNodesTable'));
|
|
|
|
|
// If jumped from nodes page, get node name
|
|
|
|
|
if (tabId == 'quick') {
|
|
|
|
|
node = args.shift();
|
|
|
|
|
} else {
|
|
|
|
|
// Select platform, get node names from table checkbox
|
|
|
|
|
args.unshift($('#' + tabId + ' input[name=arch]').val());
|
|
|
|
|
node = getCheckedByObj($('#' + tabId + ' #nodesTable'));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!nodesName) {
|
|
|
|
|
$('#' + containerId).prepend('<p class="ui-state-error">Please select a node</p>');
|
|
|
|
|
// Do not continue if a node is not given
|
|
|
|
|
if (!node) {
|
|
|
|
|
$('#' + tabId).prepend(createWarnBar('Please select a node!'));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
softwareArg = getCheckedByObj($('#' + containerId + ' #advoption'));
|
|
|
|
|
imageName = $('#' + containerId + ' #' + plugin + 'image').val();
|
|
|
|
|
provisionArg = argsArray.join(',');
|
|
|
|
|
var software = getCheckedByObj($('#' + tabId + ' #advanced'));
|
|
|
|
|
var imageName = $('#' + tabId + ' select[name=image]').val();
|
|
|
|
|
var provision = args.join(',');
|
|
|
|
|
|
|
|
|
|
url = 'lib/cmd.php?cmd=webrun&tgt=&args=provision;' + nodesName + ';' + imageName + ';' +
|
|
|
|
|
provisionArg + ';' + softwareArg + '&msg=&opts=flush';
|
|
|
|
|
|
|
|
|
|
// Show output
|
|
|
|
|
var deployDia = $('<div id="deployDia"></div>');
|
|
|
|
|
deployDia.append(createLoader()).append('<br/>');
|
|
|
|
|
deployDia.append('<iframe id="provisionFrame" width="95%" height="90%" src="' + url + '"></iframe>');
|
|
|
|
|
deployDia.dialog({
|
|
|
|
|
modal: true,
|
|
|
|
|
width: 600,
|
|
|
|
|
height: 480,
|
|
|
|
|
title:'Provision return',
|
|
|
|
|
close: function(){$(this).remove();},
|
|
|
|
|
buttons: {
|
|
|
|
|
Close : function(){$(this).dialog('close');}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
provisionStopCheck();
|
|
|
|
|
var url = 'lib/cmd.php?cmd=webrun&tgt=&args=provision;' +
|
|
|
|
|
node + ';' + imageName + ';' + provision + ';' + software + '&msg=&opts=flush';
|
|
|
|
|
$('#' + tabId).prepend(createIFrame(url));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Create provisioning advance option
|
|
|
|
|
* Create advance option
|
|
|
|
|
*
|
|
|
|
|
* @param imagename
|
|
|
|
|
* Image name
|
|
|
|
|
* @param plugin
|
|
|
|
|
* Plugin name of platform to provision
|
|
|
|
|
* @param outId
|
|
|
|
|
* Output area ID
|
|
|
|
|
* @return Nothing
|
|
|
|
|
*/
|
|
|
|
|
function provAdvOption(imagename, plugin) {
|
|
|
|
|
function createAdvancedOptions(image, outId) {
|
|
|
|
|
$.ajax({
|
|
|
|
|
url : 'lib/cmd.php',
|
|
|
|
|
dataType : 'json',
|
|
|
|
|
data : {
|
|
|
|
|
cmd : 'lsdef',
|
|
|
|
|
tgt : '',
|
|
|
|
|
args : '-t;osimage;' + imagename + ';-i;osname,provmethod',
|
|
|
|
|
msg : plugin
|
|
|
|
|
args : '-t;osimage;' + image + ';-i;osname,provmethod',
|
|
|
|
|
msg : outId
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
success : function(data) {
|
|
|
|
|
var containerId = data.msg + 'ProvisionTab';
|
|
|
|
|
var i = 0;
|
|
|
|
|
var outId = data.msg;
|
|
|
|
|
var osName = '';
|
|
|
|
|
var provMethod = '';
|
|
|
|
|
var tempStr = '';
|
|
|
|
|
var tmpStr = '';
|
|
|
|
|
var position = 0;
|
|
|
|
|
for (i = 0; i < data.rsp.length; i++) {
|
|
|
|
|
tempStr = data.rsp[i];
|
|
|
|
|
if (tempStr.indexOf('osname') != -1) {
|
|
|
|
|
position = tempStr.indexOf('=');
|
|
|
|
|
osName = tempStr.substr(position + 1);
|
|
|
|
|
|
|
|
|
|
for (var i = 0; i < data.rsp.length; i++) {
|
|
|
|
|
tmpStr = data.rsp[i];
|
|
|
|
|
if (tmpStr.indexOf('osname') != -1) {
|
|
|
|
|
position = tmpStr.indexOf('=');
|
|
|
|
|
osName = tmpStr.substr(position + 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (tempStr.indexOf('provmethod') != -1) {
|
|
|
|
|
position = tempStr.indexOf('=');
|
|
|
|
|
provMethod = tempStr.substr(position + 1);
|
|
|
|
|
if (tmpStr.indexOf('provmethod') != -1) {
|
|
|
|
|
position = tmpStr.indexOf('=');
|
|
|
|
|
provMethod = tmpStr.substr(position + 1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$('#' + containerId + ' #advoption').empty();
|
|
|
|
|
if ('aix' == osName.toLowerCase()) {
|
|
|
|
|
$('#' + outId + ' #advanced').remove();
|
|
|
|
|
if (osName.toLowerCase() == 'aix')
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ('install' == provMethod){
|
|
|
|
|
$('#' + containerId + ' #advoption').html('<input type="checkbox" checked="checked" name="ganglia">Install Ganglia.');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (provMethod == 'install') {
|
|
|
|
|
// Create advanced fieldset
|
|
|
|
|
var advancedFS = $('<fieldset id="advanced"></fieldset>').append($('<legend>Advanced</legend>'));
|
|
|
|
|
$('#' + outId + ' div.form fieldset:eq(1)').after(advancedFS);
|
|
|
|
|
|
|
|
|
|
advancedFS.append('<div><input type="checkbox" checked="checked" name="ganglia">Install Ganglia monitoring</div>');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Refresh nodes area base on group selected
|
|
|
|
|
* Create nodes table
|
|
|
|
|
*
|
|
|
|
|
* @param groupName
|
|
|
|
|
* @param group
|
|
|
|
|
* Group name
|
|
|
|
|
* @param areaId
|
|
|
|
|
* Area ID to refresh
|
|
|
|
|
* @param outId
|
|
|
|
|
* Output section ID
|
|
|
|
|
* @return Nothing
|
|
|
|
|
*/
|
|
|
|
|
function createNodesArea(groupName, areaId) {
|
|
|
|
|
function createNodesTable(group, outId) {
|
|
|
|
|
// Get group nodes
|
|
|
|
|
$.ajax({
|
|
|
|
|
url : 'lib/cmd.php',
|
|
|
|
|
dataType : 'json',
|
|
|
|
|
data : {
|
|
|
|
|
cmd : 'nodels',
|
|
|
|
|
tgt : groupName,
|
|
|
|
|
tgt : group,
|
|
|
|
|
args : '',
|
|
|
|
|
msg : areaId
|
|
|
|
|
msg : outId
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
success : function(data) {
|
|
|
|
|
var areaObj = $('#' + data.msg);
|
|
|
|
|
var outId = $(data.msg);
|
|
|
|
|
var nodes = data.rsp;
|
|
|
|
|
var index;
|
|
|
|
|
var nodesHtml = '<table><thead><tr><th><input type="checkbox" onclick="selectAllCheckbox(event, $(this))"></th>';
|
|
|
|
|
nodesHtml += '<th>Node</th></tr></thead><tbody>';
|
|
|
|
|
for (index in nodes) {
|
|
|
|
|
var node = nodes[index][0];
|
|
|
|
|
if (!node) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
nodesHtml += '<tr><td><input type="checkbox" name="' + node + '"/></td><td>' + node + '</td></tr>';
|
|
|
|
|
}
|
|
|
|
|
nodesHtml += '</tbody></table>';
|
|
|
|
|
|
|
|
|
|
areaObj.empty().append(nodesHtml);
|
|
|
|
|
if (index > 10) {
|
|
|
|
|
areaObj.css('height', '300px');
|
|
|
|
|
} else {
|
|
|
|
|
areaObj.css('height', 'auto');
|
|
|
|
|
// Create table to hold nodes
|
|
|
|
|
var nTable = $('<table></table>');
|
|
|
|
|
var tHead = $('<thead class="ui-widget-header"> <th><input type="checkbox" onclick="selectAllCheckbox(event, $(this))"></th> <th>Node</th> </thead>');
|
|
|
|
|
nTable.append(tHead);
|
|
|
|
|
var tBody = $('<tbody></tbody>');
|
|
|
|
|
nTable.append(tBody);
|
|
|
|
|
|
|
|
|
|
for (var i in nodes) {
|
|
|
|
|
var node = nodes[i][0];
|
|
|
|
|
|
|
|
|
|
// Go to next node if there is nothing here
|
|
|
|
|
if (!node)
|
|
|
|
|
continue;
|
|
|
|
|
// Insert node into table
|
|
|
|
|
tBody.append('<tr><td><input type="checkbox" name="' + node + '"/></td><td>' + node + '</td></tr>');
|
|
|
|
|
}
|
|
|
|
|
} // End of function(data)
|
|
|
|
|
|
|
|
|
|
outId.empty().append(nTable);
|
|
|
|
|
|
|
|
|
|
if (index > 10)
|
|
|
|
|
outId.css('height', '300px');
|
|
|
|
|
else
|
|
|
|
|
outId.css('height', 'auto');
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function provisionStopCheck(){
|
|
|
|
|
var content = $('#provisionFrame').contents().find('body').text();
|
|
|
|
|
if (content.indexOf('provision stop') != -1) {
|
|
|
|
|
$('#deployDia img').remove();
|
|
|
|
|
clearTimeout(provisionClock);
|
|
|
|
|
} else {
|
|
|
|
|
provisionClock = setTimeout('provisionStopCheck()', 5000);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get select element names
|
|
|
|
|
*
|
|
|
|
|