diff --git a/xCAT-UI/js/custom/hmc.js b/xCAT-UI/js/custom/hmc.js index 98159d3c8..4ea626807 100644 --- a/xCAT-UI/js/custom/hmc.js +++ b/xCAT-UI/js/custom/hmc.js @@ -157,12 +157,11 @@ hmcPlugin.prototype.loadProvisionPage = function(tabId) { var provForm = $('
'); // Create status bar - var statBarId = 'hmcProvisionStatBar' + inst; - var statBar = createStatusBar(statBarId).hide(); + var statBar = createStatusBar('statBar').hide(); provForm.append(statBar); // Create loader - var loader = createLoader('hmcProvisionLoader' + inst).hide(); + var loader = createLoader('loader').hide(); statBar.append(loader); // Create info bar @@ -190,8 +189,61 @@ hmcPlugin.prototype.loadProvisionPage = function(tabId) { var hmcProvisionBtn = createButton('Provision'); hmcProvisionBtn.bind('click', function(event) { - //TODO Insert provision code here - openDialog('info', 'Under construction'); + // Remove any warning messages + var tempTab = $(this).parent().parent(); + tempTab.find('.ui-state-error').remove(); + + var ready = true; + var errMsg = ''; + var tempNodes = ''; + + // Get nodes that were checked + tempNodes = getCheckedByObj(tempTab.find('table')); + if ('' == tempNodes){ + errMsg += 'You need to select a node.
'; + ready = false; + } + else{ + tempNodes = tempNodes.substr(0, tempNodes.length - 1); + } + + // If all inputs are valid, ready to provision + if (ready) { + // Disable provision button + $(this).attr('disabled', 'true'); + + // Show loader + tempTab.find('#statBar').show(); + tempTab.find('#loader').show(); + + // Disable all selects, input and checkbox + tempTab.find('input').attr('disabled', 'disabled'); + + // Get operating system image + var os = tempTab.find('#osname').val(); + var arch = tempTab.find('#arch').val(); + var profile = tempTab.find('#pro').val(); + + /** + * (1) Set operating system + */ + $.ajax( { + url : 'lib/cmd.php', + dataType : 'json', + data : { + cmd : 'nodeadd', + tgt : '', + args : tempNodes + ';noderes.netboot=yaboot;nodetype.os=' + os + ';nodetype.arch=' + arch + ';nodetype.profile=' + profile, + msg : 'cmd=nodeadd;out=' + tempTab.attr('id') + }, + + success : pProvisionExisting + }); + } else { + // Show warning message + var warn = createWarnBar(errMsg); + warn.prependTo(tempTab); + } }); provForm.append(hmcProvisionBtn); @@ -371,4 +423,112 @@ function createNodesArea(groupName, areaId){ } } // End of function(data) }); +} + +/** + * provision for existing system p node + * + * @return Nothing + */ +function pProvisionExisting(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 tabId = args[1].replace('out=', ''); + + //get tab obj + var tempTab = $('#' + tabId); + /** + * (2) Prepare node for boot + */ + if (cmd == 'nodeadd') { + // Get operating system + var bootMethod = tempTab.find('#boot').val(); + + // Get nodes that were checked + var tgts = getCheckedByObj(tempTab.find('table')); + + // Prepare node for boot + $.ajax( { + url : 'lib/cmd.php', + dataType : 'json', + data : { + cmd : 'nodeset', + tgt : tgts, + args : bootMethod, + msg : 'cmd=nodeset;out=' + tabId + }, + + success : pProvisionExisting + }); + } + + /** + * (3) Boot node from network + */ + else if (cmd == 'nodeset') { + // Write ajax response to status bar + var prg = writeRsp(rsp, ''); + tempTab.find('#statBar').append(prg); + + // If there was an error, do not continue + if (prg.html().indexOf('Error') > -1) { + tempTab.find('#loader').remove(); + return; + } + + // Get nodes that were checked + var tgts = getCheckedByObj(tempTab.find('table')); + + // Boot node from network + $.ajax( { + url : 'lib/cmd.php', + dataType : 'json', + data : { + cmd : 'rnetboot', + tgt : tgts, + args : '', + msg : 'cmd=rnetboot;out=' + tabId + }, + + success : pProvisionExisting + }); + } + + /** + * (4) Done + */ + else if (cmd == 'rnetboot') { + // Write ajax response to status bar + var prg = writeRsp(rsp, ''); + tempTab.find('#statBar').append(prg); + + tempTab.find('#loader').remove(); + } + +} + +/** + * get all select elements' name in the obj, + * + * @return all nodes name, seperate by ',' + */ +function getCheckedByObj(obj){ + var tempStr = ''; + // Get nodes that were checked + obj.find('input:checked').each(function(){ + if($(this).attr('name')){ + tempStr += $(this).attr('name') + ','; + } + }); + + if ('' != tempStr){ + tempStr = tempStr.substr(0, tempStr.length - 1); + } + + return tempStr; } \ No newline at end of file diff --git a/xCAT-UI/js/provision/provision.js b/xCAT-UI/js/provision/provision.js index 265e76edb..1aedbae89 100644 --- a/xCAT-UI/js/provision/provision.js +++ b/xCAT-UI/js/provision/provision.js @@ -36,6 +36,38 @@ function loadProvisionPage() { return; } + // Get OS image names + if (!$.cookie('imagenames')){ + $.ajax( { + url : 'lib/cmd.php', + dataType : 'json', + data : { + cmd : 'tabdump', + tgt : '', + args : 'osimage', + msg : '' + }, + + success : setOSImageCookies + }); + } + + // Get groups + if (!$.cookie('groups')){ + $.ajax( { + url : 'lib/cmd.php', + dataType : 'json', + data : { + cmd : 'extnoderange', + tgt : '/.*', + args : 'subgroups', + msg : '' + }, + + success : setGroupsCookies + }); + } + // Create info bar var infoBar = createInfoBar('Select a platform to provision or re-provision a node on, then click Ok.');