');
- success : setOSImageCookies
- });
+ // Create info bar
+ var infoBar = createInfoBar('Provision a node on Blade.');
+ provForm.append(infoBar);
- // Get groups
- $.ajax( {
- url : 'lib/cmd.php',
- dataType : 'json',
- data : {
- cmd : 'extnoderange',
- tgt : '/.*',
- args : 'subgroups',
- msg : ''
- },
+ // Append to provision tab
+ $('#' + tabId).append(provForm);
- success : setGroupsCookies
- });
-
- // Get provision tab instance
- var inst = tabId.replace('bladeProvisionTab', '');
-
- // Create provision form
- var provForm = $('');
-
- // Create info bar
- var infoBar = createInfoBar('Provision a blade. This will install an operating system onto the blade.');
- provForm.append(infoBar);
-
- // Append to provision tab
- $('#' + tabId).append(provForm);
-
- // Create provision existing node division
- var provExisting = createBladeProvisionExisting(inst);
- provForm.append(provExisting);
+ /**
+ * Create provision new node division
+ */
+ // You should copy whatever is in this function, put it here, and customize it
+ createProvision('blade', provForm);
};
/**
@@ -351,465 +322,3 @@ function addBladeNode(){
});
}
-
-/**
- * Create provision existing node division
- *
- * @param inst
- * Provision tab instance
- * @return Provision existing node division
- */
-function createBladeProvisionExisting(inst) {
- // Create provision existing division
- var provExisting = $('');
-
- // Create group input
- var group = $('');
- var groupLabel = $('');
- group.append(groupLabel);
-
- // Turn on auto complete for group
- var dTableDivId = 'bladeNodesDatatableDIV' + inst; // Division ID where nodes datatable will be appended
- var groupNames = $.cookie('groups');
- if (groupNames) {
- // Split group names into an array
- var tmp = groupNames.split(',');
-
- // Create drop down for groups
- var groupSelect = $('');
- groupSelect.append('');
- for ( var i in tmp) {
- // Add group into drop down
- var opt = $('');
- groupSelect.append(opt);
- }
- group.append(groupSelect);
-
- // Create node datatable
- groupSelect.change(function() {
- // Get group selected
- var thisGroup = $(this).val();
- // If a valid group is selected
- if (thisGroup) {
- createNodesDatatable(thisGroup, dTableDivId);
- } // End of if (thisGroup)
- });
- } else {
- // If no groups are cookied
- var groupInput = $('');
- group.append(groupInput);
- }
- provExisting.append(group);
-
- // Create node input
- var node = $('');
- var nodeLabel = $('');
- var nodeDatatable = $('
Select a group to view its nodes
');
- node.append(nodeLabel);
- node.append(nodeDatatable);
- provExisting.append(node);
-
- // Create boot method drop down
- var method = $('');
- var methodLabel = $('');
- var methodSelect = $('');
- methodSelect.append(''
- + ''
- + ''
- + ''
- + ''
- + ''
- );
- method.append(methodLabel);
- method.append(methodSelect);
- provExisting.append(method);
-
- // Create operating system input
- var os = $('');
- var osLabel = $('');
- var osInput = $('');
- osInput.one('focus', function() {
- var tmp = $.cookie('osvers');
- if (tmp) {
- // Turn on auto complete
- $(this).autocomplete({
- source: tmp.split(',')
- });
- }
- });
- os.append(osLabel);
- os.append(osInput);
- provExisting.append(os);
-
- // Create architecture input
- var arch = $('');
- var archLabel = $('');
- var archInput = $('');
- archInput.one('focus', function() {
- var tmp = $.cookie('osarchs');
- if (tmp) {
- // Turn on auto complete
- $(this).autocomplete({
- source: tmp.split(',')
- });
- }
- });
- arch.append(archLabel);
- arch.append(archInput);
- provExisting.append(arch);
-
- // Create profile input
- var profile = $('');
- var profileLabel = $('');
- var profileInput = $('');
- profileInput.one('focus', function() {
- var tmp = $.cookie('profiles');
- if (tmp) {
- // Turn on auto complete
- $(this).autocomplete({
- source: tmp.split(',')
- });
- }
- });
- profile.append(profileLabel);
- profile.append(profileInput);
- provExisting.append(profile);
-
- /**
- * Provision existing
- */
- var provisionBtn = createButton('Provision');
- provisionBtn.bind('click', function(event) {
- // Remove any warning messages
- $(this).parents('.ui-tabs-panel').find('.ui-state-error').remove();
- var ready = true;
- var errorMessage = '';
-
- // Get provision tab ID
- var thisTabId = 'bladeProvisionTab' + inst;
-
- // Get nodes that were checked
- var dTableId = 'bladeNodesDatatable' + inst;
- var tgts = getNodesChecked(dTableId);
- if (!tgts) {
- errorMessage += 'You need to select a node. ';
- ready = false;
- }
-
- // Check booth method
- var boot = $('#' + thisTabId + ' select[name=bootMethod]');
- if (!boot.val()) {
- errorMessage += 'You need to select a boot method. ';
- boot.css('border', 'solid #FF0000 1px');
- ready = false;
- } else {
- boot.css('border', 'solid #BDBDBD 1px');
- }
-
- // Check operating system image
- var os = $('#' + thisTabId + ' input[name=os]');
- if (!os.val()) {
- errorMessage += 'You need to select a operating system image. ';
- os.css('border', 'solid #FF0000 1px');
- ready = false;
- } else {
- os.css('border', 'solid #BDBDBD 1px');
- }
-
- // Check architecture
- var arch = $('#' + thisTabId + ' input[name=arch]');
- if (!arch.val()) {
- errorMessage += 'You need to select an architecture. ';
- arch.css('border', 'solid #FF0000 1px');
- ready = false;
- } else {
- arch.css('border', 'solid #BDBDBD 1px');
- }
-
- // Check profile
- var profile = $('#' + thisTabId + ' input[name=profile]');
- if (!profile.val()) {
- errorMessage += 'You need to select a profile. ';
- profile.css('border', 'solid #FF0000 1px');
- ready = false;
- } else {
- profile.css('border', 'solid #BDBDBD 1px');
- }
-
- // If all inputs are valid, ready to provision
- if (ready) {
- // Disable provision button
- $(this).attr('disabled', 'true');
-
- // Prepend status bar
- var statBar = createStatusBar('bladeProvisionStatBar' + inst);
- statBar.append(createLoader(''));
- statBar.prependTo($('#' + thisTabId));
-
- // Disable all inputs
- var inputs = $('#' + thisTabId + ' input');
- inputs.attr('disabled', 'disabled');
-
- // Disable all selects
- var selects = $('#' + thisTabId + ' select');
- selects.attr('disabled', 'disabled');
-
- /**
- * (1) Set operating system
- */
- $.ajax( {
- url : 'lib/cmd.php',
- dataType : 'json',
- data : {
- cmd : 'nodeadd',
- tgt : '',
- args : tgts + ';noderes.netboot=xnba;nodetype.os=' + os.val() + ';nodetype.arch=' + arch.val() + ';nodetype.profile=' + profile.val(),
- msg : 'cmd=nodeadd;out=' + inst
- },
-
- success : updateBladeProvisionExistingStatus
- });
- } else {
- // Show warning message
- var warn = createWarnBar(errorMessage);
- warn.prependTo($(this).parent().parent());
- }
- });
- provExisting.append(provisionBtn);
-
- return provExisting;
-}
-
-/**
- * Create nodes datatable for a given group
- *
- * @param group
- * Group name
- * @param outId
- * Division ID to append datatable
- * @return Nodes datatable
- */
-function createNodesDatatable(group, outId) {
- // Get group nodes
- $.ajax( {
- url : 'lib/cmd.php',
- dataType : 'json',
- data : {
- cmd : 'lsdef',
- tgt : '',
- args : group,
- msg : outId
- },
-
- /**
- * Create nodes datatable
- *
- * @param data
- * Data returned from HTTP request
- * @return Nothing
- */
- success : function(data) {
- // Data returned
- var rsp = data.rsp;
-
- // Get output ID
- var outId = data.msg;
- // Get datatable ID
- var dTableId = outId.replace('DIV', '');
-
- // Node attributes hash
- var attrs = new Object();
- // Node attributes
- var headers = new Object();
-
- // Clear nodes datatable division
- $('#' + outId).empty();
-
- // Create nodes datatable
- var node, args;
- for ( var i in rsp) {
- // Get node
- var pos = rsp[i].indexOf('Object name:');
- if (pos > -1) {
- var temp = rsp[i].split(': ');
- node = jQuery.trim(temp[1]);
-
- // Create a hash for the node attributes
- attrs[node] = new Object();
- i++;
- }
-
- // Get key and value
- args = rsp[i].split('=');
- var key = jQuery.trim(args[0]);
- var val = jQuery.trim(args[1]);
-
- // Create hash table
- attrs[node][key] = val;
- headers[key] = 1;
- }
-
- // Sort headers
- var sorted = new Array();
- for ( var key in headers) {
- sorted.push(key);
- }
- sorted.sort();
-
- // Add column for check box and node
- sorted.unshift('', 'node');
-
- // Create nodes datatable
- var dTable = new DataTable(dTableId);
- dTable.init(sorted);
-
- // Go through each node
- for ( var node in attrs) {
- // Create a row
- var row = new Array();
- // Create a check box
- var checkBx = '';
- row.push(checkBx, node);
-
- // Go through each header
- for ( var i = 2; i < sorted.length; i++) {
- // Add node attributes to the row
- var key = sorted[i];
- var val = attrs[node][key];
- if (val) {
- row.push(val);
- } else {
- row.push('');
- }
- }
-
- // Add row to table
- dTable.add(row);
- }
-
- $('#' + outId).append(dTable.object());
- $('#' + dTableId).dataTable();
- } // End of function(data)
- });
-}
-
-/**
- * Update the provision existing node status
- *
- * @param data
- * Data returned from HTTP request
- * @return Nothing
- */
-function updateBladeProvisionExistingStatus(data) {
- // Get ajax response
- var rsp = data.rsp;
- var args = data.msg.split(';');
-
- // Get command invoked
- var cmd = args[0].replace('cmd=', '');
- // Get provision tab instance
- var inst = args[1].replace('out=', '');
-
- // Get provision tab and status bar ID
- var statBarId = 'bladeProvisionStatBar' + inst;
- var tabId = 'bladeProvisionTab' + inst;
-
- /**
- * (2) Remote install
- */
- if (cmd == 'nodeadd') {
- // Write ajax response to status bar
- var prg = writeRsp(rsp, '');
- $('#' + statBarId).find('div').append(prg);
-
- // Get parameters
- var os = $('#' + tabId + ' input[name="os"]').val();
- var profile = $('#' + tabId + ' input[name="profile"]').val();
- var arch = $('#' + tabId + ' input[name="arch"]').val();
-
- // Get nodes that were checked
- var dTableId = 'bladeNodesDatatable' + inst;
- var tgts = getNodesChecked(dTableId);
-
- // Begin installation
- $.ajax( {
- url : 'lib/cmd.php',
- dataType : 'json',
- data : {
- cmd : 'rbootseq',
- tgt : tgts,
- args : 'net,hd',
- msg : 'cmd=rbootseq;out=' + inst
- },
-
- success : updateBladeProvisionExistingStatus
- });
- }
-
- /**
- * (3) Prepare node for boot
- */
- if (cmd == 'nodeadd') {
- // Get provision method
- var bootMethod = $('#' + tabId + ' select[name=bootMethod]').val();
-
- // Get nodes that were checked
- var dTableId = 'bladeNodesDatatable' + inst;
- var tgts = getNodesChecked(dTableId);
-
- // Prepare node for boot
- $.ajax( {
- url : 'lib/cmd.php',
- dataType : 'json',
- data : {
- cmd : 'nodeset',
- tgt : tgts,
- args : bootMethod,
- msg : 'cmd=nodeset;out=' + inst
- },
-
- success : updateBladeProvisionExistingStatus
- });
- }
-
- /**
- * (4) Power on node
- */
- if (cmd == 'nodeset') {
- var prg = writeRsp(rsp, '');
- $('#' + statBarId).find('div').append(prg);
-
- // Get nodes that were checked
- var dTableId = 'bladeNodesDatatable' + inst;
- var tgts = getNodesChecked(dTableId);
-
- // Prepare node for boot
- $.ajax( {
- url : 'lib/cmd.php',
- dataType : 'json',
- data : {
- cmd : 'rpower',
- tgt : tgts,
- args : 'boot',
- msg : 'cmd=rpower;out=' + inst
- },
-
- success : updateBladeProvisionExistingStatus
- });
- }
-
- /**
- * (5) Done
- */
- else if (cmd == 'rpower') {
- // Write ajax response to status bar
- var prg = writeRsp(rsp, '');
- $('#' + statBarId).find('div').append(prg);
- $('#' + statBarId).find('img').remove();
-
- // If installation was successful
- if (prg.html().indexOf('Error') == -1) {
- $('#' + statBarId).find('div').append('
It will take several minutes before the nodes are up and ready. Use rcons to monitor the status of the install.
');
- }
- }
-}
\ No newline at end of file
diff --git a/xCAT-UI/js/custom/customUtils.js b/xCAT-UI/js/custom/customUtils.js
index 92f68bc07..965f170de 100644
--- a/xCAT-UI/js/custom/customUtils.js
+++ b/xCAT-UI/js/custom/customUtils.js
@@ -7,6 +7,9 @@
* Division ID to append datatable
* @return Nodes datatable
*/
+
+var provisionClock;
+
function createNodesDatatable(group, outId) {
// Get group nodes
$.ajax( {
@@ -380,4 +383,329 @@ function createProvisionNew(plugin, inst) {
provNew.append(provisionBtn);
return provNew;
+}
+
+function createProvision(plugin, container){
+ var showStr = '';
+
+ //group, nodes, arch
+ if ('quick' == plugin){
+ container.append(createProvWithUrl());
+ }
+ else{
+ container.append(createProvNonurl(plugin));
+ container.find('#' + plugin + 'group').bind('change', function(){
+ var pluginname = $(this).attr('id').replace('group', '');
+ $('#' + pluginname + 'SelectNodesTable').html('');
+ createNodesArea($(this).val(), pluginname + 'SelectNodesTable');
+ });
+ }
+
+ //image,nic,master,tftp,nfs,option
+ showStr = '
' +
+ '' +
+ '' +
+ '' +
+ '' +
+ '' +
+ '';
+
+ container.append(showStr);
+
+ //add the provision button
+ var provisionBtn = createButton('Provision');
+ provisionBtn.bind('click', function(){
+ var plugin = $(this).parent().parent().attr('id').replace('ProvisionTab', '');
+ quickProvision(plugin);
+ });
+ provisionBtn.hide();
+ container.append(provisionBtn);
+
+ //bind the image select change event
+ container.find('#' + plugin + 'image').bind('change', function(){
+ var temp = $(this).attr('id');
+ temp = temp.replace('image', '');
+ $('#' + temp + 'ProvisionTab #advoption').html('');
+ provAdvOption($(this).val(), temp);
+ });
+
+ $.ajax({
+ url : 'lib/cmd.php',
+ dataType : 'json',
+ data : {
+ cmd : 'lsdef',
+ tgt : '',
+ args : '-t;osimage',
+ msg : plugin
+ },
+
+ success : function(data){
+ var containerid = data.msg + 'ProvisionTab';
+ var index = 0;
+ var imagename = 0;
+ var position = 0;
+ var imageselect = $('#' + containerid + ' #' + data.msg + 'image');
+ $('#' + containerid + ' img').remove();
+ if (data.rsp.lenght < 1){
+ $('#' + containerid).prepend(createWarnBar('Please copycds and genimage in provision page first!'));
+ return;
+ }
+
+ for (index in data.rsp){
+ imagename = data.rsp[index];
+ position = imagename.indexOf(' ');
+ imagename = imagename.substr(0, position);
+
+ imageselect.append('');
+ }
+ //trigger the select change event
+ imageselect.trigger('change');
+ //show provision button
+ $('#' + containerid + ' button').show();
+ }
+ });
+}
+
+function createProvWithUrl(){
+ var querystr = window.location.search;
+ var argarray = querystr.substr(1).split('&');
+ var temphash = new Object();
+ var index = 0;
+ var temparray;
+ var showstr = '';
+ for (index = 0; index < argarray.length; index++){
+ temparray = argarray[index].split('=');
+ temphash[temparray[0]] = temparray[1];
+ }
+
+ showstr += '';
+ showstr += '';
+
+ return showstr;
+}
+
+function createProvNonurl(plugin){
+ // Create the group area
+ var strGroup = '
';
+ var groupNames = $.cookie('groups');
+ if (groupNames) {
+ strGroup += '';
+ }
+ strGroup += '