mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-11-04 05:12:30 +00:00 
			
		
		
		
	Fixed add node dialogs. Added change password option under Settings. Cleaned up code.
git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@11844 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
		@@ -544,7 +544,7 @@ legend {
 | 
			
		||||
.form label {
 | 
			
		||||
	color: #424242;
 | 
			
		||||
	line-height: 1.5;
 | 
			
		||||
	vertical-align: top;
 | 
			
		||||
	vertical-align: middle;
 | 
			
		||||
	width: 120px;
 | 
			
		||||
	padding: 0px 0px 0px 20px;
 | 
			
		||||
	display: inline-block;
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
 * Execute when the DOM is fully loaded
 | 
			
		||||
 */
 | 
			
		||||
$(document).ready(function() {
 | 
			
		||||
	// Load utility scripts
 | 
			
		||||
	// Load utility scripts (if any)
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -66,7 +66,6 @@ bladePlugin.prototype.loadInventory = function(data) {
 | 
			
		||||
	$('#' + tabId).find('img').remove();
 | 
			
		||||
 | 
			
		||||
	// Create division to hold inventory
 | 
			
		||||
	var invDivId = tabId + 'Inventory';
 | 
			
		||||
	var invDiv = $('<div></div>');
 | 
			
		||||
	
 | 
			
		||||
	// Create a fieldset
 | 
			
		||||
@@ -199,8 +198,6 @@ bladePlugin.prototype.loadResources = function() {
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Add node range
 | 
			
		||||
 * 
 | 
			
		||||
 * @return Nothing
 | 
			
		||||
 */
 | 
			
		||||
bladePlugin.prototype.addNode = function() {
 | 
			
		||||
    var addNodeForm = $('<div id="addBladeCenter" class="form"></div>');
 | 
			
		||||
@@ -212,60 +209,61 @@ bladePlugin.prototype.addNode = function() {
 | 
			
		||||
	typeFS.append(typeLegend);
 | 
			
		||||
	addNodeForm.append(typeFS);
 | 
			
		||||
	
 | 
			
		||||
	var nodeFS = $('<fieldset id="nodeAttrs"></fieldset>');
 | 
			
		||||
	var nodeLegend = $('<legend>Node</legend>');
 | 
			
		||||
	nodeFS.append(nodeLegend);
 | 
			
		||||
	addNodeForm.append(nodeFS);
 | 
			
		||||
	var settingsFS = $('<fieldset id="bcSettings"></fieldset>');
 | 
			
		||||
	var nodeLegend = $('<legend>Settings</legend>');
 | 
			
		||||
	settingsFS.append(nodeLegend);
 | 
			
		||||
	addNodeForm.append(settingsFS);
 | 
			
		||||
	
 | 
			
		||||
	typeFS.append('<div>' + 
 | 
			
		||||
			'<label>Node type:</label>' +
 | 
			
		||||
    		'<select id="typeSelect">' +
 | 
			
		||||
            	'<option value="mm">AMM</option>' +
 | 
			
		||||
            	'<option value="amm">AMM</option>' +
 | 
			
		||||
            	'<option value="blade">Blade</option>' +
 | 
			
		||||
            	'<option value="scanmm">Blade by scan</option>' +
 | 
			
		||||
            	'<option value="scan">Blade by scan</option>' +
 | 
			
		||||
            '</select>' +
 | 
			
		||||
	'</div>');
 | 
			
		||||
    
 | 
			
		||||
	// Change dialog width
 | 
			
		||||
	$('#addBladeCenter').dialog('option', 'width', '400');
 | 
			
		||||
	
 | 
			
		||||
	typeFS.find('#typeSelect').bind('change', function(){
 | 
			
		||||
		// Remove any existing warnings
 | 
			
		||||
    	$('#addBladeCenter .ui-state-error').remove();
 | 
			
		||||
    	nodeFS.find('div').remove();
 | 
			
		||||
    	settingsFS.find('div').remove();
 | 
			
		||||
    	
 | 
			
		||||
        var addMethod = $(this).val();
 | 
			
		||||
        switch(addMethod){
 | 
			
		||||
        	case 'mm':
 | 
			
		||||
        		nodeFS.append('<div><label>AMM name: </label><input id="ammName" type="text"/></div>');
 | 
			
		||||
        		nodeFS.append('<div><label>Username: </label><input type="text"></div>');
 | 
			
		||||
        		nodeFS.append('<div><label>Password: </label><input type="text"></div>');
 | 
			
		||||
        		nodeFS.append('<div><label>AMM IP: </label><input id="ammIp" type="text"/></div>');
 | 
			
		||||
    	// Change dialog width
 | 
			
		||||
    	$('#addBladeCenter').dialog('option', 'width', '400');
 | 
			
		||||
    	
 | 
			
		||||
        var nodeType = $(this).val();
 | 
			
		||||
        switch (nodeType) {
 | 
			
		||||
        	case 'amm':
 | 
			
		||||
        		settingsFS.append('<div><label>AMM name:</label><input name="ammName" type="text"/></div>');
 | 
			
		||||
        		settingsFS.append('<div><label>User name:</label><input name="ammUser" type="text"></div>');
 | 
			
		||||
        		settingsFS.append('<div><label>Password:</label><input name="ammPassword" type="password"></div>');
 | 
			
		||||
        		settingsFS.append('<div><label>IP address:</label><input id="ammIp" type="text"/></div>');
 | 
			
		||||
        		break;
 | 
			
		||||
        	case 'blade':
 | 
			
		||||
        		nodeFS.append('<div><label>Blade name: </label><input id="bladeName" type="text"/></input></div>');
 | 
			
		||||
        		nodeFS.append('<div><label>Blade group: </label><input id="bladeGroup" type="text"/></input></div>');
 | 
			
		||||
        		nodeFS.append('<div><label>Blade ID: </label><input id="bladeId" type="text"/t></div>');
 | 
			
		||||
        		nodeFS.append('<div><label>Blade series: </label>JS <input type="radio" name="series" value="js"/> LS<input type="radio" name="series" value="ls"/></div>');
 | 
			
		||||
        		nodeFS.append('<div><label style="vertical-align: middle;">Blade MPA: </label><select id="mpaSelect"></select><div>');
 | 
			
		||||
        		settingsFS.append('<div><label>Blade name:</label><input name="bladeName" type="text"/></input></div>');
 | 
			
		||||
        		settingsFS.append('<div><label>Blade group:</label><input name="bladeGroup" type="text"/></input></div>');
 | 
			
		||||
        		settingsFS.append('<div><label>Blade ID:</label><input name="bladeId" type="text"/t></div>');
 | 
			
		||||
        		settingsFS.append('<div><label>Blade series:</label>JS <input type="radio" name="bladeSeries" value="js"/> LS<input type="radio" name="bladeSeries" value="ls"/></div>');
 | 
			
		||||
        		settingsFS.append('<div><label style="vertical-align: middle;">Blade MPA:</label><select name="bladeMpa"></select><div>');
 | 
			
		||||
        		break;
 | 
			
		||||
        	case 'scanmm':
 | 
			
		||||
        		nodeFS.append('<div><label style="vertical-align: middle;">Blade MPA: </label><select id="mpaSelect"></select></div>');
 | 
			
		||||
        	case 'scan':
 | 
			
		||||
        		settingsFS.append('<div><label style="vertical-align: middle;">Blade MPA:</label><select id="bladeMpa"></select></div>');
 | 
			
		||||
        		
 | 
			
		||||
        		// Change dialog width
 | 
			
		||||
        		$('#addBladeCenter').dialog('option', 'width', '650');
 | 
			
		||||
        		break;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        // Change dialog width
 | 
			
		||||
		if ($(this).val() == 'scanmm'){
 | 
			
		||||
			$('#addBladeCenter').dialog('option', 'width', '650');
 | 
			
		||||
		}else{
 | 
			
		||||
			$('#addBladeCenter').dialog('option', 'width', '400');
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		// If MM node, return directly
 | 
			
		||||
		if ($(this).val() == 'mm'){
 | 
			
		||||
        		
 | 
			
		||||
		// Do not continue if node type is AMM
 | 
			
		||||
		if ($(this).val() == 'amm') {
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		// Get all MM nodes from server side
 | 
			
		||||
		nodeFS.find('select:eq(0)').after(createLoader());
 | 
			
		||||
       
 | 
			
		||||
		// Gather AMM nodes
 | 
			
		||||
		settingsFS.find('select:eq(0)').after(createLoader());
 | 
			
		||||
		$.ajax({
 | 
			
		||||
			url : 'lib/cmd.php',
 | 
			
		||||
			dataType : 'json',
 | 
			
		||||
@@ -273,64 +271,70 @@ bladePlugin.prototype.addNode = function() {
 | 
			
		||||
               	cmd : 'lsdef',
 | 
			
		||||
               	tgt : '',
 | 
			
		||||
               	args : '-t;node;-w;mgt==blade;-w;id==0',
 | 
			
		||||
               	msg : addMethod
 | 
			
		||||
               	msg : nodeType
 | 
			
		||||
           	},
 | 
			
		||||
           	success : function(data){
 | 
			
		||||
           	success : function(data) {
 | 
			
		||||
           		var position = 0;
 | 
			
		||||
           		var tempStr = '';
 | 
			
		||||
           		var tmp = '';
 | 
			
		||||
           		var options = '';
 | 
			
		||||
           		
 | 
			
		||||
           		// Remove the loading image
 | 
			
		||||
           		nodeFS.find('img').remove();
 | 
			
		||||
           		settingsFS.find('img').remove();
 | 
			
		||||
               
 | 
			
		||||
           		// Check return result
 | 
			
		||||
           		// Do not continue if no AMM nodes are found
 | 
			
		||||
           		if (data.rsp.length < 1) {
 | 
			
		||||
           			$('#addBladeCenter').prepend(createWarnBar('Please define MM node first!'));
 | 
			
		||||
           			$('#addBladeCenter').prepend(createWarnBar('Please define an AMM node before continuing'));
 | 
			
		||||
           			return;
 | 
			
		||||
           		}
 | 
			
		||||
               
 | 
			
		||||
           		// Add all MM nodes to select
 | 
			
		||||
           		// Create options for AMM nodes
 | 
			
		||||
           		for (var i in data.rsp){
 | 
			
		||||
           			tempStr = data.rsp[i];
 | 
			
		||||
           			position = tempStr.indexOf(' ');
 | 
			
		||||
           			tempStr = tempStr.substring(0, position);
 | 
			
		||||
           			options += '<option value="' + tempStr + '">' + tempStr + '</option>';
 | 
			
		||||
           			tmp = data.rsp[i];
 | 
			
		||||
           			position = tmp.indexOf(' ');
 | 
			
		||||
           			tmp = tmp.substring(0, position);
 | 
			
		||||
           			options += '<option value="' + tmp + '">' + tmp + '</option>';
 | 
			
		||||
           		}
 | 
			
		||||
               
 | 
			
		||||
           		nodeFS.find('select:eq(0)').append(options);
 | 
			
		||||
           		
 | 
			
		||||
           		// If adding node by rscan, we should add the scan button
 | 
			
		||||
           		if (data.msg != 'scanmm') {
 | 
			
		||||
 | 
			
		||||
           		// Select the first AMM node
 | 
			
		||||
           		settingsFS.find('select:eq(0)').append(options);
 | 
			
		||||
           		if (data.msg != 'scan') {
 | 
			
		||||
           			return;
 | 
			
		||||
           		}
 | 
			
		||||
           		
 | 
			
		||||
           		// Create Scan button
 | 
			
		||||
           		var scan = createButton('Scan');
 | 
			
		||||
       			scan.bind('click', function(){
 | 
			
		||||
       				var mmName = nodeFS.find('select:eq(0)').val();
 | 
			
		||||
       				nodeFS.prepend(createLoader());
 | 
			
		||||
       				$('#nodeAttrs button').attr('disabled', 'disabled');
 | 
			
		||||
       				var ammName = settingsFS.find('select:eq(0)').val();
 | 
			
		||||
       				settingsFS.prepend(createLoader());
 | 
			
		||||
       				$('#bcSettings button').attr('disabled', 'disabled');
 | 
			
		||||
       				$.ajax({
 | 
			
		||||
       					url : 'lib/cmd.php',
 | 
			
		||||
       			        dataType : 'json',
 | 
			
		||||
       			        data : {
 | 
			
		||||
       			            cmd : 'rscan',
 | 
			
		||||
       			            tgt : mmName,
 | 
			
		||||
       			            tgt : ammName,
 | 
			
		||||
       			            args : '',
 | 
			
		||||
       			            msg : ''
 | 
			
		||||
       			        },
 | 
			
		||||
       			        
 | 
			
		||||
       			        /**
 | 
			
		||||
       			         * Show scanned results for AMM
 | 
			
		||||
       			         * 
 | 
			
		||||
       			         * @param data Data returned from HTTP request
 | 
			
		||||
       			         */
 | 
			
		||||
       			        success: function(data){
 | 
			
		||||
       			        	showScanMmResult(data.rsp[0]);
 | 
			
		||||
       			        	showScanAmmResult(data.rsp[0]);
 | 
			
		||||
       			        }
 | 
			
		||||
       				});
 | 
			
		||||
       			});
 | 
			
		||||
       			
 | 
			
		||||
       			nodeFS.find('select:eq(0)').after(scan);
 | 
			
		||||
       			settingsFS.find('select:eq(0)').after(scan);
 | 
			
		||||
           	}
 | 
			
		||||
		});
 | 
			
		||||
    });
 | 
			
		||||
    
 | 
			
		||||
    addNodeForm.dialog( {
 | 
			
		||||
	// Create dialog for BladeCenter
 | 
			
		||||
    addNodeForm.dialog({
 | 
			
		||||
        modal : true,
 | 
			
		||||
        width : 400,
 | 
			
		||||
        title : 'Add node',
 | 
			
		||||
@@ -346,8 +350,8 @@ bladePlugin.prototype.addNode = function() {
 | 
			
		||||
                $('#addBladeCenter .ui-state-error').remove();
 | 
			
		||||
                var addMethod = $('#typeSelect').val();
 | 
			
		||||
                
 | 
			
		||||
                if (addMethod == "mm") {
 | 
			
		||||
                    addMmNode();
 | 
			
		||||
                if (addMethod == "amm") {
 | 
			
		||||
                    addAmmNode();
 | 
			
		||||
                } else if(addMethod == "blade") {
 | 
			
		||||
                    addBladeNode();
 | 
			
		||||
                } else{
 | 
			
		||||
@@ -366,31 +370,30 @@ bladePlugin.prototype.addNode = function() {
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Add AMM node
 | 
			
		||||
 * 
 | 
			
		||||
 * @return Nothing
 | 
			
		||||
 */
 | 
			
		||||
function addMmNode(){
 | 
			
		||||
	var argsTmp = '';
 | 
			
		||||
function addAmmNode(){
 | 
			
		||||
	var args = '';
 | 
			
		||||
	var errorMsg = '';
 | 
			
		||||
    
 | 
			
		||||
	// Check for missing inputs
 | 
			
		||||
	$('#addBladeCenter input').each(function(){
 | 
			
		||||
		if (!$(this).val()) {
 | 
			
		||||
			errorMsg = 'Please provide a value for each missing field.';
 | 
			
		||||
			errorMsg = 'Please provide a value for each missing field!';
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		argsTmp += $(this).val() + ',';
 | 
			
		||||
		args += $(this).val() + ',';
 | 
			
		||||
	});
 | 
			
		||||
	
 | 
			
		||||
	// Do not continue if error was found
 | 
			
		||||
	if (errorMsg) {
 | 
			
		||||
		// Add warning message
 | 
			
		||||
		$('#addBladeCenter').prepend(createWarnBar(errorMsg));
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	argsTmp = argsTmp.substring(0, argsTmp.length - 1);
 | 
			
		||||
	args = args.substring(0, args.length - 1);
 | 
			
		||||
    
 | 
			
		||||
	// Add the loader
 | 
			
		||||
    $('#addBladeCenter').prepend(createLoader());
 | 
			
		||||
    $('#addBladeCenter').append(createLoader());
 | 
			
		||||
    $('.ui-dialog-buttonpane .ui-button').attr('disabled', true);
 | 
			
		||||
    $.ajax( {
 | 
			
		||||
        url : 'lib/cmd.php',
 | 
			
		||||
@@ -398,17 +401,16 @@ function addMmNode(){
 | 
			
		||||
        data : {
 | 
			
		||||
            cmd : 'webrun',
 | 
			
		||||
            tgt : '',
 | 
			
		||||
            args : 'addnode;mm;' + argsTmp,
 | 
			
		||||
            args : 'addnode;mm;' + args,
 | 
			
		||||
            msg : ''
 | 
			
		||||
        },
 | 
			
		||||
        success : function(data) {
 | 
			
		||||
        	// Remove loader
 | 
			
		||||
            $('#addBladeCenter').find('img').remove();
 | 
			
		||||
            var info = createInfoBar('Successfully added MM node.');
 | 
			
		||||
            $('#addBladeCenter').prepend(info);
 | 
			
		||||
            $('#addBladeCenter').prepend(createInfoBar('AMM node was successfully added'));
 | 
			
		||||
            $('#addBladeCenter').dialog("option", "buttons", {
 | 
			
		||||
                "Close" : function() {
 | 
			
		||||
                    $('#addBladeCenter').dialog('close');
 | 
			
		||||
                    $('.selectgroup').trigger('click');
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
@@ -417,24 +419,29 @@ function addMmNode(){
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Add blade node
 | 
			
		||||
 * 
 | 
			
		||||
 * @return Nothing
 | 
			
		||||
 */
 | 
			
		||||
function addBladeNode(){
 | 
			
		||||
    var name = $('#addBladeCenter #bladeName').val();
 | 
			
		||||
    var group = $('#addBladeCenter #bladeGroup').val();
 | 
			
		||||
    var id = $('#addBladeCenter #bladeId').val();
 | 
			
		||||
    var series = $("#addBladeCenter #bladeNode :checked").val();
 | 
			
		||||
    var mpa = $('#addBladeCenter #mpaSelect').val();
 | 
			
		||||
	// Get blade node attributes
 | 
			
		||||
    var name = $('#bcSettings input[name="bladeName"]').val();
 | 
			
		||||
    var group = $('#bcSettings input[name="bladeGroup"]').val();
 | 
			
		||||
    var id = $('#bcSettings input[name="bladeId"]').val();
 | 
			
		||||
    var series = $('#bcSettings input[name="bladeSeries"]:selected').val();
 | 
			
		||||
    var mpa = $('#bcSettings select[name="bladeMpa"]').val();
 | 
			
		||||
 | 
			
		||||
    var argsTmp = '-t;node;-o;' + name + ';id=' + id + 
 | 
			
		||||
            ';nodetype=osi;groups=' + group + ';mgt=blade;mpa=' + mpa + ';serialflow=hard';
 | 
			
		||||
    var args = '-t;node;-o;' + name 
 | 
			
		||||
    	+ ';id=' + id 
 | 
			
		||||
    	+ ';nodetype=osi;groups=' + group 
 | 
			
		||||
    	+ ';mgt=blade;mpa=' + mpa 
 | 
			
		||||
    	+ ';serialflow=hard';
 | 
			
		||||
    
 | 
			
		||||
    // Set the serial speed and port for LS series blade
 | 
			
		||||
    if (series != 'js') {
 | 
			
		||||
        argsTmp += ';serialspeed=19200;serialport=1';
 | 
			
		||||
        args += ';serialspeed=19200;serialport=1';
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    if ((!name) || (!group) || (!id) || (!mpa)){
 | 
			
		||||
        $('#addBladeCenter').prepend(createWarnBar("Please provide a value for each missing field."));
 | 
			
		||||
    // Check for missing inputs
 | 
			
		||||
    if (!name || !group || !id || !mpa) {
 | 
			
		||||
        $('#addBladeCenter').prepend(createWarnBar("Please provide a value for each missing field!"));
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -447,18 +454,24 @@ function addBladeNode(){
 | 
			
		||||
        data : {
 | 
			
		||||
            cmd : 'chdef',
 | 
			
		||||
            tgt : '',
 | 
			
		||||
            args : argsTmp,
 | 
			
		||||
            args : args,
 | 
			
		||||
            msg : ''
 | 
			
		||||
        },
 | 
			
		||||
        success : function(data) {
 | 
			
		||||
        	// Remove loader
 | 
			
		||||
            $('#addBladeCenter').find('img').remove();
 | 
			
		||||
            var messages = data.rsp;
 | 
			
		||||
            var notes = "";
 | 
			
		||||
            for (var i = 0; i < messages.length; i++) {
 | 
			
		||||
                notes += messages[i] + " ";
 | 
			
		||||
 | 
			
		||||
            // Gather response and display it
 | 
			
		||||
            var rsp = data.rsp;
 | 
			
		||||
            var rspMessage = '';
 | 
			
		||||
            for (var i = 0; i < rsp.length; i++) {
 | 
			
		||||
                rspMessage += rsp[i] + '<br/>';
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            $('#addBladeCenter').prepend(createInfoBar(notes));
 | 
			
		||||
            // Append response message to dialog
 | 
			
		||||
            $('#addBladeCenter').prepend(createInfoBar(rspMessage));
 | 
			
		||||
            
 | 
			
		||||
            // Change dialog button
 | 
			
		||||
            $('#addBladeCenter').dialog("option", "buttons", {
 | 
			
		||||
                "Close" : function() {
 | 
			
		||||
                    $('#addBladeCenter').remove();
 | 
			
		||||
@@ -471,81 +484,86 @@ function addBladeNode(){
 | 
			
		||||
/**
 | 
			
		||||
 * Show rscan results
 | 
			
		||||
 * 
 | 
			
		||||
 * @param rscanResults
 | 
			
		||||
 * @param results
 | 
			
		||||
 *            Results from rscan of blade MPA
 | 
			
		||||
 * @return Nothing
 | 
			
		||||
 */
 | 
			
		||||
function showScanMmResult(rscanResults){
 | 
			
		||||
	var results = $('<div style="height: 300px; overflow: auto;" id="scan_results"></div>');
 | 
			
		||||
	var rscanTable = $('<table></table>');
 | 
			
		||||
	var regex = /\S+/g;
 | 
			
		||||
	var line = '';
 | 
			
		||||
	var column = 0;
 | 
			
		||||
function showScanAmmResult(results){
 | 
			
		||||
	var rSection = $('<div style="height: 300px; overflow: auto;" id="scanResults"></div>');
 | 
			
		||||
	
 | 
			
		||||
	$('#nodeAttrs #scan_results').remove();
 | 
			
		||||
	$('#nodeAttrs img').remove();
 | 
			
		||||
	$('#nodeAttrs button').attr('disabled', '');
 | 
			
		||||
	if (!rscanResults){
 | 
			
		||||
	// Create table to hold results
 | 
			
		||||
	var rTable = $('<table></table>');
 | 
			
		||||
	
 | 
			
		||||
	// Reset scan results area
 | 
			
		||||
	$('#addBladeCenter #scanResults').remove();
 | 
			
		||||
	$('#bcSettings img').remove();
 | 
			
		||||
	$('#bcSettings button').attr('disabled', '');
 | 
			
		||||
	if (!results)
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	var rows = rscanResults.split("\n");
 | 
			
		||||
	// Do not continue if there are no results
 | 
			
		||||
	var rows = results.split("\n");
 | 
			
		||||
	if (rows.length < 2){
 | 
			
		||||
		results.append(createWarnBar(rows[0]));
 | 
			
		||||
		$('#nodeAttrs').append(results);
 | 
			
		||||
		$('#bcSettings').prepend(createWarnBar(rows[0]));
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// Add the table header
 | 
			
		||||
	var fields = rows[0].match(regex);
 | 
			
		||||
	column = fields.length;
 | 
			
		||||
	row = '<tr><td><input type="checkbox" onclick="selectAllRscanNode(this)"></td>';
 | 
			
		||||
	var fields = rows[0].match(/\S+/g);
 | 
			
		||||
	var column = fields.length;
 | 
			
		||||
	var row = $('<tr></tr>');
 | 
			
		||||
	row.append('<td><input type="checkbox" onclick="selectAllRscanNode(this)"></td>');
 | 
			
		||||
	for(var i in fields){
 | 
			
		||||
		row += '<td>' + fields[i] + '</td>';
 | 
			
		||||
		row.append('<td>' + fields[i] + '</td>');
 | 
			
		||||
	}
 | 
			
		||||
	rscanTable.append(row);
 | 
			
		||||
	rTable.append(row);
 | 
			
		||||
	
 | 
			
		||||
	// Add the tbody
 | 
			
		||||
	for (var i=1; i<rows.length; i++) {
 | 
			
		||||
	// Add table body
 | 
			
		||||
	var line;
 | 
			
		||||
	for (var i = 1; i < rows.length; i++) {
 | 
			
		||||
		line = rows[i];
 | 
			
		||||
		
 | 
			
		||||
		if (!line) {
 | 
			
		||||
		if (!line)
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		var fields = line.match(regex);
 | 
			
		||||
		if ('mm' == fields[0]){
 | 
			
		||||
		var fields = line.match(/\S+/g);
 | 
			
		||||
		if (fields[0] == 'mm')
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		row = '<tr><td><input type="checkbox" name="' + fields[1] + '"></td>';
 | 
			
		||||
		// Create a row for each result
 | 
			
		||||
		var row = $('<tr></tr>');
 | 
			
		||||
		row.append('<td><input type="checkbox" name="' + fields[1] + '"></td>');
 | 
			
		||||
		
 | 
			
		||||
		for (var j=0; j<column; j++){
 | 
			
		||||
			row += '<td>';
 | 
			
		||||
		// Add column for each field
 | 
			
		||||
		for (var j = 0; j < column; j++){
 | 
			
		||||
			if (fields[j]) {
 | 
			
		||||
				if (j == 1) {
 | 
			
		||||
					row += '<input value="' + fields[j] + '">';
 | 
			
		||||
					row.append('<td><input value="' + fields[j] + '"></td>');
 | 
			
		||||
				} else {
 | 
			
		||||
					row += fields[j];
 | 
			
		||||
					row.append('<td>' + fields[j] + '</td>');
 | 
			
		||||
				}
 | 
			
		||||
			} else {
 | 
			
		||||
				row.append('<td></td>');
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
			row += '</td>';
 | 
			
		||||
		}
 | 
			
		||||
		row += '</tr>';
 | 
			
		||||
		rscanTable.append(row);
 | 
			
		||||
		
 | 
			
		||||
		// Append row to table
 | 
			
		||||
		rTable.append(row);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	results.append(rscanTable);
 | 
			
		||||
	$('#nodeAttrs').prepend(results);
 | 
			
		||||
	rSection.append(rTable);
 | 
			
		||||
	$('#bcSettings').prepend(rSection);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Add AMM scanned node
 | 
			
		||||
 */
 | 
			
		||||
function addMmScanNode(){
 | 
			
		||||
	// Get the MM name
 | 
			
		||||
	var mmName = $('#nodeAttrs select').val();
 | 
			
		||||
	// Get the AMM name
 | 
			
		||||
	var ammName = $('#bcSettings select').val();
 | 
			
		||||
	var nodeName = '';
 | 
			
		||||
	
 | 
			
		||||
	$('#nodeAttrs :checked').each(function() {
 | 
			
		||||
	$('#bcSettings :checked').each(function() {
 | 
			
		||||
		if ($(this).attr('name')) {
 | 
			
		||||
			nodeName += $(this).attr('name') + ',';
 | 
			
		||||
			nodeName += $(this).parents('tr').find('input').eq(1).val() + ',';
 | 
			
		||||
@@ -553,30 +571,28 @@ function addMmScanNode(){
 | 
			
		||||
	});
 | 
			
		||||
	
 | 
			
		||||
	if (!nodeName) {
 | 
			
		||||
		alert('You should select nodes first!');
 | 
			
		||||
		$('#addBladeCenter').prepend(createWarnBar('Please select a node!'));
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// Disabled the button
 | 
			
		||||
	// Disabled button
 | 
			
		||||
	$('.ui-dialog-buttonpane button').attr('disabled', 'disabled');
 | 
			
		||||
	
 | 
			
		||||
	nodeName = nodeName.substr(0, nodeName.length - 1);
 | 
			
		||||
	$('#nodeAttrs').append(createLoader());
 | 
			
		||||
	
 | 
			
		||||
	// Send the add request
 | 
			
		||||
	// Send add request
 | 
			
		||||
	$.ajax({
 | 
			
		||||
		url : 'lib/cmd.php',
 | 
			
		||||
        dataType : 'json',
 | 
			
		||||
        data : {
 | 
			
		||||
            cmd : 'webrun',
 | 
			
		||||
            tgt : '',
 | 
			
		||||
            args : 'addnode;node;' + mmName + ',' + nodeName,
 | 
			
		||||
            args : 'addnode;node;' + ammName + ',' + nodeName,
 | 
			
		||||
            msg : ''
 | 
			
		||||
        },
 | 
			
		||||
        success : function(data){
 | 
			
		||||
        	// Refresh the area on the right side
 | 
			
		||||
        	$('#addBladeCenter').dialog('close');
 | 
			
		||||
        	$('.selectgroup').trigger('click');
 | 
			
		||||
        }
 | 
			
		||||
	});
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -110,7 +110,7 @@ esxPlugin.prototype.loadClonePage = function(node) {
 | 
			
		||||
	// If there is no existing clone tab
 | 
			
		||||
	if (!$('#' + newTabId).length) {
 | 
			
		||||
		// Create info bar
 | 
			
		||||
		var infoBar = createInfoBar('Not supported');
 | 
			
		||||
		var infoBar = createInfoBar('Not yet supported');
 | 
			
		||||
 | 
			
		||||
		// Create clone form
 | 
			
		||||
		var cloneForm = $('<div class="form"></div>');
 | 
			
		||||
@@ -163,7 +163,7 @@ esxPlugin.prototype.loadProvisionPage = function(tabId) {
 | 
			
		||||
	var provForm = $('<div class="form"></div>');
 | 
			
		||||
 | 
			
		||||
	// Create info bar
 | 
			
		||||
	var infoBar = createInfoBar('Provision an KVM virtual machine.');
 | 
			
		||||
	var infoBar = createInfoBar('Provision an ESX virtual machine.');
 | 
			
		||||
	provForm.append(infoBar);
 | 
			
		||||
 | 
			
		||||
	// Append to provision tab
 | 
			
		||||
@@ -477,106 +477,74 @@ esxPlugin.prototype.loadResources = function() {
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Add node range
 | 
			
		||||
 * 
 | 
			
		||||
 * @return Nothing
 | 
			
		||||
 */
 | 
			
		||||
esxPlugin.prototype.addNode = function() {
 | 
			
		||||
    var diag = $('<div id="addIdplx" class="form"></div>');
 | 
			
		||||
    var info = createInfoBar('Add a node range');
 | 
			
		||||
    diag.append(info);
 | 
			
		||||
    var dialog = $('<div id="addEsx" class="form"></div>');
 | 
			
		||||
    var info = createInfoBar('Add a ESX node');
 | 
			
		||||
    dialog.append(info);
 | 
			
		||||
    
 | 
			
		||||
    // Create node inputs
 | 
			
		||||
    var nodeFieldSet = $('<fieldset></fieldset>');
 | 
			
		||||
	var legend = $('<legend>Node</legend>');
 | 
			
		||||
	nodeFieldSet.append(legend);
 | 
			
		||||
	diag.append(nodeFieldSet);
 | 
			
		||||
	
 | 
			
		||||
    var nodeInputs = '<div><label>Node: </label><input type="text"></div>' +
 | 
			
		||||
               '<div><label>MAC:</label><input type="text"></div>' + 
 | 
			
		||||
               '<div><label>IP: </label><input type="text"></div>' +
 | 
			
		||||
               '<div><label>Groups: </label><input type="text"></div>';    
 | 
			
		||||
    nodeFieldSet.append(nodeInputs);
 | 
			
		||||
    dialog.append($('<div><label>Node:</label><input name="node" type="text"></div>'));
 | 
			
		||||
	dialog.append($('<div><label>VM host:</label><input name="vmhost" type="text"></div>'));
 | 
			
		||||
	dialog.append($('<div><label>IP address:</label><input name="ip" type="text"></div>'));
 | 
			
		||||
	dialog.append($('<div><label>Groups:</label><input name="groups" type="text"></div>'));
 | 
			
		||||
    
 | 
			
		||||
    var bmcFieldSet = $('<fieldset></fieldset>');
 | 
			
		||||
	var legend = $('<legend>BMC</legend>');
 | 
			
		||||
	bmcFieldSet.append(legend);
 | 
			
		||||
	diag.append(bmcFieldSet);
 | 
			
		||||
	
 | 
			
		||||
	// Create BMC inputs
 | 
			
		||||
	var bmcInputs = '<div><label>BMC:</label><input type="text"></div>' +
 | 
			
		||||
     	'<div><label>IP:</label><input type="text"></div>' +
 | 
			
		||||
     	'<div><label>Groups:</label><input type="text"></div>';    
 | 
			
		||||
	 bmcFieldSet.append(bmcInputs);
 | 
			
		||||
 | 
			
		||||
    diag.dialog({
 | 
			
		||||
    dialog.dialog({
 | 
			
		||||
    	title: 'Add node',
 | 
			
		||||
        modal: true,
 | 
			
		||||
        width: 400,
 | 
			
		||||
        close: function(){$(this).remove();},
 | 
			
		||||
        buttons: {
 | 
			
		||||
            "OK" : function(){addIdataplex();},
 | 
			
		||||
            "OK" : function(){addEsxNode();},
 | 
			
		||||
            "Cancel": function(){$(this).dialog('close');}
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Add iDataPlex node range
 | 
			
		||||
 * 
 | 
			
		||||
 * @return Nothing
 | 
			
		||||
 * Add ESX node
 | 
			
		||||
 */
 | 
			
		||||
function addIdataplex(){
 | 
			
		||||
    var tempArray = new Array();
 | 
			
		||||
function addEsxNode(){
 | 
			
		||||
	var attr, args;
 | 
			
		||||
    var errorMessage = '';
 | 
			
		||||
    var attr = '';
 | 
			
		||||
    var args = '';
 | 
			
		||||
    
 | 
			
		||||
        
 | 
			
		||||
    // Remove existing warnings
 | 
			
		||||
    $('#addIdplx .ui-state-error').remove();
 | 
			
		||||
    $('#addEsx .ui-state-error').remove();
 | 
			
		||||
    
 | 
			
		||||
    // Get input values
 | 
			
		||||
    $('#addIdplx input').each(function(){
 | 
			
		||||
    // Return input border colors to normal
 | 
			
		||||
    $('#addEsx input').css('border', 'solid #BDBDBD 1px');
 | 
			
		||||
    
 | 
			
		||||
    // Check node attributes
 | 
			
		||||
    $('#addEsx input').each(function(){
 | 
			
		||||
        attr = $(this).val();
 | 
			
		||||
        if (attr) {
 | 
			
		||||
            tempArray.push($(this).val());
 | 
			
		||||
        } else {
 | 
			
		||||
        if (!attr) {
 | 
			
		||||
            errorMessage = "Please provide a value for each missing field!";
 | 
			
		||||
            return false;
 | 
			
		||||
            $(this).css('border', 'solid #FF0000 1px');
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
    
 | 
			
		||||
    // Show error message (if any)
 | 
			
		||||
    if (errorMessage) {
 | 
			
		||||
        $('#addIdplx').prepend(createWarnBar(errorMessage));
 | 
			
		||||
        $('#addEsx').prepend(createWarnBar(errorMessage));
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    // Create loader
 | 
			
		||||
    $('#addIdplx').append(createLoader());
 | 
			
		||||
    $('#addEsx').append(createLoader());
 | 
			
		||||
    
 | 
			
		||||
    // Change dialog buttons
 | 
			
		||||
    $('#addIdplx').dialog('option', 'buttons', {
 | 
			
		||||
    $('#addEsx').dialog('option', 'buttons', {
 | 
			
		||||
    	'Close':function(){
 | 
			
		||||
    		$('#addIdplx').dialog('close');
 | 
			
		||||
    		$('#addEsx').dialog('close');
 | 
			
		||||
    	}
 | 
			
		||||
    });
 | 
			
		||||
    
 | 
			
		||||
    // Generate chdef arguments
 | 
			
		||||
    args = '-t;node;-o;' + tempArray[0] + ';mac=' + tempArray[1] + ';ip=' + tempArray[2] + ';groups=' + 
 | 
			
		||||
          tempArray[3] + ';mgt=esx;chain="runcmd=bmcsetup";netboot=xnba;nodetype=osi;profile=compute;' +
 | 
			
		||||
          'bmc=' + tempArray[4];
 | 
			
		||||
    $.ajax({
 | 
			
		||||
        url : 'lib/cmd.php',
 | 
			
		||||
        dataType : 'json',
 | 
			
		||||
        data : {
 | 
			
		||||
            cmd : 'chdef',
 | 
			
		||||
            tgt : '',
 | 
			
		||||
            args : args,
 | 
			
		||||
            msg : ''
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
     
 | 
			
		||||
    // Generate chdef arguments for BMC
 | 
			
		||||
    args = '-t;node;-o;' + tempArray[4] + ';ip=' + tempArray[5] + ';groups=' + tempArray[6];
 | 
			
		||||
    args = '-t;node;-o;' + $('#addEsx input[name="node"]').val()
 | 
			
		||||
	    + ';ip=' + $('#addEsx input[name="ip"]').val()
 | 
			
		||||
	    + ';groups=' + $('#addEsx input[name="groups"]').val() 
 | 
			
		||||
	    + ';vmhost=' + $('#addEsx input[name="vmhost"]').val() 
 | 
			
		||||
	    + ';mgt=esx;netboot=xnba;nodetype=osi;profile=compute';
 | 
			
		||||
    $.ajax({
 | 
			
		||||
        url : 'lib/cmd.php',
 | 
			
		||||
        dataType : 'json',
 | 
			
		||||
@@ -587,15 +555,30 @@ function addIdataplex(){
 | 
			
		||||
            msg : ''
 | 
			
		||||
        },
 | 
			
		||||
        success: function(data) {
 | 
			
		||||
            $('#addIdplx img').remove();
 | 
			
		||||
        	// Update /etc/hosts
 | 
			
		||||
        	$.ajax({
 | 
			
		||||
    			url : 'lib/cmd.php',
 | 
			
		||||
    			dataType : 'json',
 | 
			
		||||
    			data : {
 | 
			
		||||
    				cmd : 'makehosts',
 | 
			
		||||
    				tgt : '',
 | 
			
		||||
    				args : '',
 | 
			
		||||
    				msg : ''
 | 
			
		||||
    			},
 | 
			
		||||
    		});
 | 
			
		||||
        	
 | 
			
		||||
        	// Remove loader
 | 
			
		||||
            $('#addEsx img').remove();
 | 
			
		||||
            
 | 
			
		||||
            // Get return message
 | 
			
		||||
            var message = '';
 | 
			
		||||
            for (var i in data.rsp) {
 | 
			
		||||
                message += data.rsp[i];
 | 
			
		||||
                message += data.rsp[i] + '<br/>';
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            if (message) {
 | 
			
		||||
                $('#addIdplx').prepend(createInfoBar(message));
 | 
			
		||||
            }
 | 
			
		||||
            // Show return message
 | 
			
		||||
            if (message)
 | 
			
		||||
                $('#addEsx').prepend(createInfoBar(message));
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -14,6 +14,44 @@ var hmcPlugin = function() {
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Steps for hardware discovery wizard
 | 
			
		||||
 * 
 | 
			
		||||
 * @return Discovery steps
 | 
			
		||||
 */
 | 
			
		||||
hmcPlugin.prototype.getStep = function(){
 | 
			
		||||
	return ['Basic patterns',
 | 
			
		||||
	        'Supernode',
 | 
			
		||||
	        'More patterns',
 | 
			
		||||
	        'Power on hardware',
 | 
			
		||||
            'Discover frames',
 | 
			
		||||
            'Management node',
 | 
			
		||||
            'Update definitions',
 | 
			
		||||
            'Create LPARs'];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
hmcPlugin.prototype.getInitFunction = function(){
 | 
			
		||||
	return [powerInitBasicPattern,
 | 
			
		||||
            powerInitSupernode,
 | 
			
		||||
            powerInitSiteTable,
 | 
			
		||||
            powerInitPoweronHardware,
 | 
			
		||||
            powerInitDiscoverFrames,
 | 
			
		||||
            powerInitConfig,
 | 
			
		||||
            powerInitUpdateDefinition,
 | 
			
		||||
            powerInitCreateLpar];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
hmcPlugin.prototype.getNextFunction = function(){
 | 
			
		||||
	return [checkBasicPattern,
 | 
			
		||||
            checkSupernode,
 | 
			
		||||
            checkSiteTable,
 | 
			
		||||
            undefined,
 | 
			
		||||
            checkFrameMtms,
 | 
			
		||||
            undefined,
 | 
			
		||||
            undefined,
 | 
			
		||||
            collectInputValue];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Clone node (service page)
 | 
			
		||||
 * 
 | 
			
		||||
@@ -191,237 +229,108 @@ hmcPlugin.prototype.loadResources = function() {
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Add node range
 | 
			
		||||
 * 
 | 
			
		||||
 * @return Nothing
 | 
			
		||||
 */
 | 
			
		||||
hmcPlugin.prototype.addNode = function() {
 | 
			
		||||
	var diaDiv = $('<div id="addpnodeDiv" class="form"></div>');
 | 
			
		||||
	diaDiv.append(createInfoBar('Add a node range'));
 | 
			
		||||
	diaDiv.append('<div><label>Type:</label><select id="pnodetype"><option>HMC</option><option>Scan Node</option></select></div>');
 | 
			
		||||
	diaDiv.append('<div id="pnodeeditarea" ></div>');
 | 
			
		||||
	var dialog = $('<div id="addHmc" class="form"></div>');
 | 
			
		||||
	dialog.append(createInfoBar('Add a System p node range'));
 | 
			
		||||
	
 | 
			
		||||
	// Show the dialog
 | 
			
		||||
	diaDiv.dialog({
 | 
			
		||||
	// Create option to select node type
 | 
			
		||||
	dialog.append('<div><label>Node type:</label>' +
 | 
			
		||||
			'<select id="nodeType"><option>HMC</option>' + 
 | 
			
		||||
			'<option>Scan node</option>' + 
 | 
			
		||||
		'</select></div>');
 | 
			
		||||
	dialog.append('<div id="nodeSettings"></div>');
 | 
			
		||||
	
 | 
			
		||||
	// Show dialog
 | 
			
		||||
	dialog.dialog({
 | 
			
		||||
        modal : true,
 | 
			
		||||
        width : 400,
 | 
			
		||||
        title : 'Add node',
 | 
			
		||||
        close : function(){$('#addpnodeDiv').remove();}
 | 
			
		||||
        close : function(){$('#addHmc').remove();}
 | 
			
		||||
	});
 | 
			
		||||
	
 | 
			
		||||
	// Bind the select change event
 | 
			
		||||
	$('#pnodetype').bind('change', function() {
 | 
			
		||||
		$('#pnodeeditarea').empty();
 | 
			
		||||
		if ('HMC' == $(this).val()) {
 | 
			
		||||
			$('#addpnodeDiv').dialog('option', 'width', '400');
 | 
			
		||||
			$('#pnodeeditarea').append('<label>Name:</label><input><br/><label>Username:</label><input><br/>' +
 | 
			
		||||
		              '<label>Password:</label><input><br/><label>IP Adress:</label><input>');
 | 
			
		||||
	// Bind to select change event
 | 
			
		||||
	$('#nodeType').bind('change', function() {
 | 
			
		||||
		// Remove existing warnings
 | 
			
		||||
	    $('#addHmc .ui-state-error').remove();
 | 
			
		||||
	    
 | 
			
		||||
		// Clear settings section
 | 
			
		||||
		$('#nodeSettings').empty();
 | 
			
		||||
		if ($(this).val() == 'HMC') {
 | 
			
		||||
			$('#addHmc').dialog('option', 'width', '400');
 | 
			
		||||
			$('#nodeSettings').append('<div><label>Node:</label><input type="text" name="node"/></div>');
 | 
			
		||||
			$('#nodeSettings').append('<div><label>User name:</label><input type="text" name="username"/></div>');
 | 
			
		||||
			$('#nodeSettings').append('<div><label>Password:</label><input type="password" name="password"/></div>');
 | 
			
		||||
			$('#nodeSettings').append('<div><label>IP adress:</label><input type="text" name="ip"/></div>');
 | 
			
		||||
			
 | 
			
		||||
			$('#addpnodeDiv').dialog('option', 'buttons', 
 | 
			
		||||
					                 {'Add': function(){addHmcNode();}, 
 | 
			
		||||
				                      'Cancel': function(){$('#addpnodeDiv').dialog('close');}});
 | 
			
		||||
			// Change dialog buttons
 | 
			
		||||
			$('#addHmc').dialog('option', 'buttons', {
 | 
			
		||||
				'Add': function() {addHmcNode();}, 
 | 
			
		||||
				'Cancel': function() {$('#addHmc').dialog('close');}
 | 
			
		||||
			});
 | 
			
		||||
		} else {
 | 
			
		||||
			//add loader image and delete buttons
 | 
			
		||||
			$('#pnodeeditarea').append(createLoader());
 | 
			
		||||
			$('#addpnodeDiv').dialog('option', 'buttons', {'Cancel': function(){$('#addpnodeDiv').dialog('close');}});
 | 
			
		||||
			$('#addpnodeDiv').dialog('option', 'width', '650');
 | 
			
		||||
			// Add loader
 | 
			
		||||
			$('#nodeSettings').append(createLoader());
 | 
			
		||||
			
 | 
			
		||||
			// Change dialog buttons
 | 
			
		||||
			$('#addHmc').dialog('option', 'buttons', {
 | 
			
		||||
				'Cancel': function() {$('#addHmc').dialog('close');}
 | 
			
		||||
			});
 | 
			
		||||
			
 | 
			
		||||
			// Set to longer dialog width
 | 
			
		||||
			$('#addHmc').dialog('option', 'width', '650');
 | 
			
		||||
			$.ajax({
 | 
			
		||||
				url : 'lib/cmd.php',
 | 
			
		||||
		        dataType : 'json',
 | 
			
		||||
		        data : {
 | 
			
		||||
		            cmd : 'nodels',
 | 
			
		||||
		            tgt : 'all',
 | 
			
		||||
		            args : 'ppc.nodetype==hmc',
 | 
			
		||||
		            args : 'nodetype.nodetype==hmc',
 | 
			
		||||
		            msg : ''
 | 
			
		||||
		        },
 | 
			
		||||
		        success : function(data) {
 | 
			
		||||
		        	$('#pnodeeditarea img').remove();
 | 
			
		||||
		        	// Remove loader
 | 
			
		||||
		        	$('#nodeSettings img').remove();
 | 
			
		||||
		        	drawHmcSelector(data.rsp);
 | 
			
		||||
		        }
 | 
			
		||||
			});
 | 
			
		||||
		}
 | 
			
		||||
	});
 | 
			
		||||
	
 | 
			
		||||
	// Trigger the select change event
 | 
			
		||||
	$('#pnodetype').trigger('change');
 | 
			
		||||
	// Trigger select event change
 | 
			
		||||
	$('#nodeType').trigger('change');
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
hmcPlugin.prototype.getStep = function(){
 | 
			
		||||
	return ['Basic Patterns',
 | 
			
		||||
	        'Supernode',
 | 
			
		||||
	        'More patterns',
 | 
			
		||||
	        'Power on hardware',
 | 
			
		||||
            'Discover frames',
 | 
			
		||||
            'Management node',
 | 
			
		||||
            'Update definitions',
 | 
			
		||||
            'Create LPARs'];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
hmcPlugin.prototype.getInitFunction = function(){
 | 
			
		||||
	return [powerInitBasicPattern,
 | 
			
		||||
            powerInitSupernode,
 | 
			
		||||
            powerInitSiteTable,
 | 
			
		||||
            powerInitPoweronHardware,
 | 
			
		||||
            powerInitDiscoverFrames,
 | 
			
		||||
            powerInitConfig,
 | 
			
		||||
            powerInitUpdateDefinition,
 | 
			
		||||
            powerInitCreateLpar];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
hmcPlugin.prototype.getNextFunction = function(){
 | 
			
		||||
	return [checkBasicPattern,
 | 
			
		||||
            checkSupernode,
 | 
			
		||||
            checkSiteTable,
 | 
			
		||||
            undefined,
 | 
			
		||||
            checkFrameMtms,
 | 
			
		||||
            undefined,
 | 
			
		||||
            undefined,
 | 
			
		||||
            collectInputValue];
 | 
			
		||||
};
 | 
			
		||||
/**
 | 
			
		||||
 * Add HMCs into the dialog
 | 
			
		||||
 * 
 | 
			
		||||
 * @param hmc
 | 
			
		||||
 * 			HMCs
 | 
			
		||||
 * @return Nothing
 | 
			
		||||
 */
 | 
			
		||||
function drawHmcSelector(hmcs){
 | 
			
		||||
	if (1 > hmcs.length) {
 | 
			
		||||
		$('#pnodeeditarea').append(createWarnBar('Please define HMC node first.'));
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// Add HMCs into a selector and add a scan button
 | 
			
		||||
	var hmcoption = '';
 | 
			
		||||
	var scanbutton = createButton('Scan');
 | 
			
		||||
	for (var i in hmcs) {
 | 
			
		||||
		hmcoption += '<option>' + hmcs[i][0] + '</option>';
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	$('#pnodeeditarea').append('<label>HMC:</label><select>' + hmcoption + '</select>');
 | 
			
		||||
	$('#pnodeeditarea').append(scanbutton);
 | 
			
		||||
	
 | 
			
		||||
	scanbutton.bind('click', function() {
 | 
			
		||||
		var hmcname = $('#pnodeeditarea select').val();
 | 
			
		||||
		$('#pnodeeditarea').append(createLoader());
 | 
			
		||||
		$.ajax({
 | 
			
		||||
			url : 'lib/cmd.php',
 | 
			
		||||
	        dataType : 'json',
 | 
			
		||||
	        data : {
 | 
			
		||||
	            cmd : 'rscan',
 | 
			
		||||
	            tgt : hmcname,
 | 
			
		||||
	            args : '',
 | 
			
		||||
	            msg : ''
 | 
			
		||||
	        },
 | 
			
		||||
	        success : function(data) {
 | 
			
		||||
	        	$('#pnodeeditarea img').remove();
 | 
			
		||||
	        	
 | 
			
		||||
	        	// Draw a table with checkbox
 | 
			
		||||
	        	drawRscanResult(data.rsp[0]);
 | 
			
		||||
	        	
 | 
			
		||||
	        	// Add the add button
 | 
			
		||||
	        	$('#addpnodeDiv').dialog('option', 'buttons', 
 | 
			
		||||
		                 {'Add': function(){addPNode();}, 
 | 
			
		||||
	                      'Cancel': function(){$('#addpnodeDiv').dialog('close');}});
 | 
			
		||||
	        }
 | 
			
		||||
		});
 | 
			
		||||
	});
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function drawRscanResult(rscanresult){
 | 
			
		||||
	var line = '';
 | 
			
		||||
	var tempreg = /\S+/g;
 | 
			
		||||
	var idpreg = /^\d+$/;
 | 
			
		||||
	var resultDiv = $('<div class="tab" style="height:300px;overflow:auto;"></div>');
 | 
			
		||||
	var rscantable = $('<table></table>');
 | 
			
		||||
	var temprow = '';
 | 
			
		||||
	var colnum = 0;
 | 
			
		||||
	var fields = 0;
 | 
			
		||||
	
 | 
			
		||||
	$('#pnodeeditarea div').remove();
 | 
			
		||||
	if (!rscanresult) {
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	var rows = rscanresult.split("\n");
 | 
			
		||||
	if (rows.length < 2) {
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// Add the table header
 | 
			
		||||
	fields = rows[0].match(tempreg);
 | 
			
		||||
	colnum = fields.length;
 | 
			
		||||
	temprow = '<tr><td><input type="checkbox" onclick="selectAllRscanNode(this)"></td>';
 | 
			
		||||
	for(var i in fields) {
 | 
			
		||||
		temprow += '<td>' + fields[i] + '</td>';
 | 
			
		||||
	}
 | 
			
		||||
	rscantable.append(temprow);
 | 
			
		||||
	
 | 
			
		||||
	// Add the tbody
 | 
			
		||||
	for (var i = 1; i < rows.length; i++) {
 | 
			
		||||
		line = rows[i];
 | 
			
		||||
		if (!line) {
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		var fields = line.match(tempreg);
 | 
			
		||||
		if ('hmc' == fields[0]) {
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		// May be the 3rd field(id) is empty, so we should add the new 
 | 
			
		||||
		if (!idpreg.test(fields[2])){
 | 
			
		||||
			fields = [fields[0], fields[1], ''].concat(fields.slice(2));
 | 
			
		||||
		}
 | 
			
		||||
		temprow = '<tr><td><input type="checkbox" name="' + fields[1] + '"></td>';
 | 
			
		||||
		
 | 
			
		||||
		for(var j = 0; j < colnum; j++) {
 | 
			
		||||
			temprow += '<td>';
 | 
			
		||||
			if (fields[j]) {
 | 
			
		||||
				if (j == 1){
 | 
			
		||||
					temprow += '<input value="' + fields[j] + '">';
 | 
			
		||||
				}
 | 
			
		||||
				else{
 | 
			
		||||
					temprow += fields[j];
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			temprow += '</td>';
 | 
			
		||||
		}
 | 
			
		||||
		temprow += '</tr>';
 | 
			
		||||
		rscantable.append(temprow);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	resultDiv.append(rscantable);
 | 
			
		||||
	$('#pnodeeditarea').append(resultDiv);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Add hmc node
 | 
			
		||||
 * 
 | 
			
		||||
 * @return Nothing
 | 
			
		||||
 * Add HMC node
 | 
			
		||||
 */
 | 
			
		||||
function addHmcNode(){
 | 
			
		||||
	var errorinfo = '';
 | 
			
		||||
	// Remove existing warnings
 | 
			
		||||
    $('#addHmc .ui-state-error').remove();
 | 
			
		||||
    
 | 
			
		||||
	var errorMessage = '';
 | 
			
		||||
	var args = '';
 | 
			
		||||
	$('#pnodeeditarea input').each(function(){
 | 
			
		||||
		if (!$(this).val()){
 | 
			
		||||
			errorinfo = 'Please provide a value for each missing field!';
 | 
			
		||||
		}
 | 
			
		||||
	$('#nodeSettings input').each(function(){
 | 
			
		||||
		if (!$(this).val())
 | 
			
		||||
			errorMessage = 'Please provide a value for each missing field!';
 | 
			
		||||
		args += $(this).val() + ',';
 | 
			
		||||
	});
 | 
			
		||||
	
 | 
			
		||||
	if (errorinfo){
 | 
			
		||||
		// Add warning message
 | 
			
		||||
		alert(errorinfo);
 | 
			
		||||
	// Do no continue if an error is found
 | 
			
		||||
	if (errorMessage){
 | 
			
		||||
		$('#addHmc').prepend(createWarnBar(errorMessage));
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// Disabled the button
 | 
			
		||||
	// Disabled button
 | 
			
		||||
	$('.ui-dialog-buttonpane button').attr('disabled', 'disabled');
 | 
			
		||||
	
 | 
			
		||||
	// Remove last comma
 | 
			
		||||
	args = args.substr(0, args.length - 1);
 | 
			
		||||
	
 | 
			
		||||
	$('#pnodeeditarea').append(createLoader());
 | 
			
		||||
	// Send the save HMC request
 | 
			
		||||
	// Append loader
 | 
			
		||||
	$('#nodeSettings').append(createLoader());
 | 
			
		||||
	
 | 
			
		||||
	// Send request to add HMC
 | 
			
		||||
	$.ajax({
 | 
			
		||||
		url : 'lib/cmd.php',
 | 
			
		||||
        dataType : 'json',
 | 
			
		||||
@@ -432,13 +341,139 @@ function addHmcNode(){
 | 
			
		||||
            msg : ''
 | 
			
		||||
        },
 | 
			
		||||
        success : function(data){
 | 
			
		||||
        	// Refresh the area on the right side
 | 
			
		||||
        	$('#addpnodeDiv').dialog('close');
 | 
			
		||||
        	$('.selectgroup').trigger('click');
 | 
			
		||||
        	$('#addHmc').dialog('close');
 | 
			
		||||
        }
 | 
			
		||||
	});
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Add HMCs into dialog
 | 
			
		||||
 * 
 | 
			
		||||
 * @param hmcs
 | 
			
		||||
 * 			HMCs
 | 
			
		||||
 * @return Nothing
 | 
			
		||||
 */
 | 
			
		||||
function drawHmcSelector(hmcs){
 | 
			
		||||
	// Remove existing warnings
 | 
			
		||||
    $('#addHmc .ui-state-error').remove();
 | 
			
		||||
    
 | 
			
		||||
	// Do not continue if no HMCs are given
 | 
			
		||||
	if (hmcs.length < 1) {
 | 
			
		||||
		$('#addHmc').prepend(createWarnBar('Please define an HMC node first!'));
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// Add HMCs into a dropdown and add scan button
 | 
			
		||||
	var hmcSelect = $('<select></select>');
 | 
			
		||||
	var scanButton = createButton('Scan');
 | 
			
		||||
	for (var i in hmcs) {
 | 
			
		||||
		hmcSelect.append('<option>' + hmcs[i][0] + '</option>');
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	$('#nodeSettings').append($('<div><label>HMC:</label></div>').append(hmcSelect, scanButton));
 | 
			
		||||
	
 | 
			
		||||
	scanButton.bind('click', function() {
 | 
			
		||||
		var hmcname = $('#nodeSettings select').val();
 | 
			
		||||
		$('#nodeSettings').append(createLoader());
 | 
			
		||||
		$.ajax({
 | 
			
		||||
			url : 'lib/cmd.php',
 | 
			
		||||
	        dataType : 'json',
 | 
			
		||||
	        data : {
 | 
			
		||||
	            cmd : 'rscan',
 | 
			
		||||
	            tgt : hmcname,
 | 
			
		||||
	            args : '',
 | 
			
		||||
	            msg : ''
 | 
			
		||||
	        },
 | 
			
		||||
	        success : function(data) {
 | 
			
		||||
	        	// Remove loader
 | 
			
		||||
	        	$('#nodeSettings img').remove();
 | 
			
		||||
	        	
 | 
			
		||||
	        	// Draw table with checkboxes
 | 
			
		||||
	        	drawRscanResult(data.rsp[0]);
 | 
			
		||||
	        	
 | 
			
		||||
	        	// Add the add button
 | 
			
		||||
	        	$('#addHmc').dialog('option', 'buttons', {
 | 
			
		||||
	        		'Add': function(){addPNode();}, 
 | 
			
		||||
	                'Cancel': function(){$('#addHmc').dialog('close');}
 | 
			
		||||
	        	});
 | 
			
		||||
	        }
 | 
			
		||||
		});
 | 
			
		||||
	});
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Draw table showing HMC rscan results
 | 
			
		||||
 * 
 | 
			
		||||
 * @param results
 | 
			
		||||
 * 			Data returned from rscan
 | 
			
		||||
 * @return Nothing
 | 
			
		||||
 */
 | 
			
		||||
function drawRscanResult(results) {	
 | 
			
		||||
	var tmpRegex = /\S+/g;
 | 
			
		||||
	var idRegex = /^\d+$/;
 | 
			
		||||
	var rSection = $('<div class="tab" style="height:300px; overflow:auto;"></div>');
 | 
			
		||||
	var rTable = $('<table></table>');
 | 
			
		||||
	
 | 
			
		||||
	// Empty node settings section
 | 
			
		||||
	$('#nodeSettings div').remove();
 | 
			
		||||
	if (!results)
 | 
			
		||||
		return;
 | 
			
		||||
	
 | 
			
		||||
	var lines = results.split("\n");
 | 
			
		||||
	// Do not continue if no results are found
 | 
			
		||||
	if (lines.length < 2) {
 | 
			
		||||
		return;
 | 
			
		||||
	}	
 | 
			
		||||
	
 | 
			
		||||
	var fields = lines[0].match(tmpRegex);
 | 
			
		||||
	var cols = fields.length;
 | 
			
		||||
	
 | 
			
		||||
	// Add table header
 | 
			
		||||
	var tHead = $('<thead class="ui-widget-header"></thead>').append('<th><input type="checkbox" onclick="selectAllRscanNode(this)"></th>');
 | 
			
		||||
	for(var i in fields) {
 | 
			
		||||
		tHead.append('<th>' + fields[i] + '</th>');
 | 
			
		||||
	}
 | 
			
		||||
	rTable.append(tHead);
 | 
			
		||||
	
 | 
			
		||||
	// Add table body
 | 
			
		||||
	var tBody = $('<tbody></tbody>');
 | 
			
		||||
	rTable.append(tBody);
 | 
			
		||||
	for (var i = 1; i < lines.length; i++) {
 | 
			
		||||
		var row = $('<tr></tr>');
 | 
			
		||||
		
 | 
			
		||||
		// Go to next row if there is nothing
 | 
			
		||||
		if (!lines[i])
 | 
			
		||||
			continue;
 | 
			
		||||
		
 | 
			
		||||
		fields = lines[i].match(tmpRegex);
 | 
			
		||||
		
 | 
			
		||||
		// Go to next row if this row is the HMC
 | 
			
		||||
		if (fields[0] == 'hmc')
 | 
			
		||||
			continue;
 | 
			
		||||
		
 | 
			
		||||
		// If the 3rd field is empty, create an empty column
 | 
			
		||||
		if (!idRegex.test(fields[2]))
 | 
			
		||||
			fields = [fields[0], fields[1], ''].concat(fields.slice(2));
 | 
			
		||||
		row.append('<td><input type="checkbox" name="' + fields[1] + '"></td>');
 | 
			
		||||
		
 | 
			
		||||
		// Go through each field and add it to the row as a column
 | 
			
		||||
		for(var j = 0; j < cols; j++) {
 | 
			
		||||
			var col = $('<td></td>');
 | 
			
		||||
			if (fields[j]) {
 | 
			
		||||
				if (j == 1)
 | 
			
		||||
					col.append('<input value="' + fields[j] + '"/>');
 | 
			
		||||
				else
 | 
			
		||||
					col.append(fields[j]);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		tBody.append(row);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	rSection.append(rTable);
 | 
			
		||||
	$('#nodeSettings').append(rSection);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Add System p node, contains frame, cec, lpar 
 | 
			
		||||
 * 
 | 
			
		||||
@@ -446,10 +481,10 @@ function addHmcNode(){
 | 
			
		||||
 */
 | 
			
		||||
function addPNode(){
 | 
			
		||||
	// Get the HMC name
 | 
			
		||||
	var hmcname = $('#pnodeeditarea select').val();
 | 
			
		||||
	var hmcname = $('#nodeSettings select').val();
 | 
			
		||||
	var nodename = '';
 | 
			
		||||
	// Get checked nodes
 | 
			
		||||
	$('#pnodeeditarea :checked').each(function() {
 | 
			
		||||
	$('#nodeSettings :checked').each(function() {
 | 
			
		||||
		if ($(this).attr('name')) {
 | 
			
		||||
			nodename += $(this).attr('name') + ',';
 | 
			
		||||
			nodename += $(this).parents('tr').find('input').eq(1).val() + ',';
 | 
			
		||||
@@ -465,7 +500,7 @@ function addPNode(){
 | 
			
		||||
	$('.ui-dialog-buttonpane button').attr('disabled', 'disabled');
 | 
			
		||||
	
 | 
			
		||||
	nodename = nodename.substr(0, nodename.length - 1);
 | 
			
		||||
	$('#pnodeeditarea').append(createLoader());
 | 
			
		||||
	$('#nodeSettings').append(createLoader());
 | 
			
		||||
	// Send the add request
 | 
			
		||||
	$.ajax({
 | 
			
		||||
		url : 'lib/cmd.php',
 | 
			
		||||
@@ -478,7 +513,7 @@ function addPNode(){
 | 
			
		||||
        },
 | 
			
		||||
        success : function(data) {
 | 
			
		||||
        	// Refresh the area on the right side
 | 
			
		||||
        	$('#addpnodeDiv').dialog('close');
 | 
			
		||||
        	$('#addHmc').dialog('close');
 | 
			
		||||
        	$('.selectgroup').trigger('click');
 | 
			
		||||
        }
 | 
			
		||||
	});
 | 
			
		||||
 
 | 
			
		||||
@@ -14,6 +14,28 @@ var ipmiPlugin = function() {
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Steps for hardware discovery wizard
 | 
			
		||||
 * 
 | 
			
		||||
 * @return Discovery steps
 | 
			
		||||
 */
 | 
			
		||||
ipmiPlugin.prototype.getStep = function(){
 | 
			
		||||
	return ['Basic patterns', 'Switches', 'Network', 'Services', 'Power on hardware'];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * return steps's init function for hardware discovery wizard
 | 
			
		||||
 * 
 | 
			
		||||
 * @return Nothing
 | 
			
		||||
 */
 | 
			
		||||
ipmiPlugin.prototype.getInitFunction = function(){
 | 
			
		||||
	return [idataplexInitBasic, idataplexInitSwitch, idataplexInitNetwork, idataplexInitService, idataplexInitPowerOn];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
ipmiPlugin.prototype.getNextFunction = function(){
 | 
			
		||||
	return [idataplexCheckBasic, undefined, idataplexCheckNetwork, undefined, undefined];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Clone node (service page)
 | 
			
		||||
 * 
 | 
			
		||||
@@ -66,7 +88,6 @@ ipmiPlugin.prototype.loadInventory = function(data) {
 | 
			
		||||
	$('#' + tabId).find('img').remove();
 | 
			
		||||
 | 
			
		||||
	// Create division to hold inventory
 | 
			
		||||
	var invDivId = tabId + 'Inventory';
 | 
			
		||||
	var invDiv = $('<div></div>');
 | 
			
		||||
	
 | 
			
		||||
	// Create a fieldset
 | 
			
		||||
@@ -179,8 +200,6 @@ ipmiPlugin.prototype.loadProvisionPage = function(tabId) {
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Load resources
 | 
			
		||||
 * 
 | 
			
		||||
 * @return Nothing
 | 
			
		||||
 */
 | 
			
		||||
ipmiPlugin.prototype.loadResources = function() {
 | 
			
		||||
	// Get resource tab ID
 | 
			
		||||
@@ -200,38 +219,19 @@ ipmiPlugin.prototype.loadResources = function() {
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Add node range
 | 
			
		||||
 * 
 | 
			
		||||
 * @return Nothing
 | 
			
		||||
 */
 | 
			
		||||
ipmiPlugin.prototype.addNode = function() {
 | 
			
		||||
    var diag = $('<div id="addIdplx" class="form"></div>');
 | 
			
		||||
    var info = createInfoBar('Add a node range');
 | 
			
		||||
    diag.append(info);
 | 
			
		||||
    var dialog = $('<div id="addIdplx" class="form"></div>');
 | 
			
		||||
    var info = createInfoBar('Add a iDataPlex node');
 | 
			
		||||
    dialog.append(info);
 | 
			
		||||
    
 | 
			
		||||
    // Create node inputs
 | 
			
		||||
    var nodeFieldSet = $('<fieldset></fieldset>');
 | 
			
		||||
	var legend = $('<legend>Node</legend>');
 | 
			
		||||
	nodeFieldSet.append(legend);
 | 
			
		||||
	diag.append(nodeFieldSet);
 | 
			
		||||
	
 | 
			
		||||
    var nodeInputs = '<div><label>Node: </label><input type="text"></div>' +
 | 
			
		||||
               '<div><label>MAC:</label><input type="text"></div>' + 
 | 
			
		||||
               '<div><label>IP: </label><input type="text"></div>' +
 | 
			
		||||
               '<div><label>Groups: </label><input type="text"></div>';    
 | 
			
		||||
    nodeFieldSet.append(nodeInputs);
 | 
			
		||||
    
 | 
			
		||||
    var bmcFieldSet = $('<fieldset></fieldset>');
 | 
			
		||||
	var legend = $('<legend>BMC</legend>');
 | 
			
		||||
	bmcFieldSet.append(legend);
 | 
			
		||||
	diag.append(bmcFieldSet);
 | 
			
		||||
	
 | 
			
		||||
	// Create BMC inputs
 | 
			
		||||
	var bmcInputs = '<div><label>BMC:</label><input type="text"></div>' +
 | 
			
		||||
     	'<div><label>IP:</label><input type="text"></div>' +
 | 
			
		||||
     	'<div><label>Groups:</label><input type="text"></div>';    
 | 
			
		||||
	 bmcFieldSet.append(bmcInputs);
 | 
			
		||||
    dialog.append($('<div><label>Node:</label><input name="node" type="text"/></div>'));
 | 
			
		||||
	dialog.append($('<div><label>IP address:</label><input name="ip" type="text"/></div>'));
 | 
			
		||||
	dialog.append($('<div><label>MAC address:</label><input name="mac" type="text"/></div>'));
 | 
			
		||||
	dialog.append($('<div><label>Groups:</label><input name="groups" type="text"/></div>'));
 | 
			
		||||
 | 
			
		||||
    diag.dialog({
 | 
			
		||||
    dialog.dialog({
 | 
			
		||||
    	title: 'Add node',
 | 
			
		||||
        modal: true,
 | 
			
		||||
        width: 400,
 | 
			
		||||
@@ -243,53 +243,29 @@ ipmiPlugin.prototype.addNode = function() {
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * return steps name for hardware discovery wizard
 | 
			
		||||
 * 
 | 
			
		||||
 * @return Nothing
 | 
			
		||||
 */
 | 
			
		||||
ipmiPlugin.prototype.getStep = function(){
 | 
			
		||||
	return ['Basic Patterns', 'Swithes', 'Network', 'Services', 'Power on hardwares'];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * return steps's init function for hardware discovery wizard
 | 
			
		||||
 * 
 | 
			
		||||
 * @return Nothing
 | 
			
		||||
 */
 | 
			
		||||
ipmiPlugin.prototype.getInitFunction = function(){
 | 
			
		||||
	return [idataplexInitBasic, idataplexInitSwitch, idataplexInitNetwork, idataplexInitService, idataplexInitPowerOn];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
ipmiPlugin.prototype.getNextFunction = function(){
 | 
			
		||||
	return [idataplexCheckBasic, undefined, idataplexCheckNetwork, undefined, undefined];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Add iDataPlex node range
 | 
			
		||||
 * 
 | 
			
		||||
 * @return Nothing
 | 
			
		||||
 */
 | 
			
		||||
function addIdataplex(){
 | 
			
		||||
    var tempArray = new Array();
 | 
			
		||||
	var attr, args;
 | 
			
		||||
    var errorMessage = '';
 | 
			
		||||
    var attr = '';
 | 
			
		||||
    var args = '';
 | 
			
		||||
    
 | 
			
		||||
        
 | 
			
		||||
    // Remove existing warnings
 | 
			
		||||
    $('#addIdplx .ui-state-error').remove();
 | 
			
		||||
    
 | 
			
		||||
    // Get input values
 | 
			
		||||
    // Return input border colors to normal
 | 
			
		||||
    $('#addIdplx input').css('border', 'solid #BDBDBD 1px');
 | 
			
		||||
    
 | 
			
		||||
    // Check node attributes
 | 
			
		||||
    $('#addIdplx input').each(function(){
 | 
			
		||||
        attr = $(this).val();
 | 
			
		||||
        if (attr) {
 | 
			
		||||
            tempArray.push($(this).val());
 | 
			
		||||
        } else {
 | 
			
		||||
        if (!attr) {
 | 
			
		||||
            errorMessage = "Please provide a value for each missing field!";
 | 
			
		||||
            return false;
 | 
			
		||||
            $(this).css('border', 'solid #FF0000 1px');
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
    
 | 
			
		||||
    // Show error message (if any)
 | 
			
		||||
    if (errorMessage) {
 | 
			
		||||
        $('#addIdplx').prepend(createWarnBar(errorMessage));
 | 
			
		||||
        return;
 | 
			
		||||
@@ -306,22 +282,11 @@ function addIdataplex(){
 | 
			
		||||
    });
 | 
			
		||||
    
 | 
			
		||||
    // Generate chdef arguments
 | 
			
		||||
    args = '-t;node;-o;' + tempArray[0] + ';mac=' + tempArray[1] + ';ip=' + tempArray[2] + ';groups=' + 
 | 
			
		||||
          tempArray[3] + ';mgt=ipmi;chain="runcmd=bmcsetup";netboot=xnba;nodetype=osi;profile=compute;' +
 | 
			
		||||
          'bmc=' + tempArray[4];
 | 
			
		||||
    $.ajax({
 | 
			
		||||
        url : 'lib/cmd.php',
 | 
			
		||||
        dataType : 'json',
 | 
			
		||||
        data : {
 | 
			
		||||
            cmd : 'chdef',
 | 
			
		||||
            tgt : '',
 | 
			
		||||
            args : args,
 | 
			
		||||
            msg : ''
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
     
 | 
			
		||||
    // Generate chdef arguments for BMC
 | 
			
		||||
    args = '-t;node;-o;' + tempArray[4] + ';ip=' + tempArray[5] + ';groups=' + tempArray[6];
 | 
			
		||||
    args = '-t;node;-o;' + $('#addIdplx input[name="node"]').val()
 | 
			
		||||
	    + ';ip=' + $('#addIdplx input[name="ip"]').val()
 | 
			
		||||
	    + ';mac=' + $('#addIdplx input[name="mac"]').val() 
 | 
			
		||||
	    + ';groups=' + $('#addIdplx input[name="groups"]').val()
 | 
			
		||||
	    + ';mgt=ipmi;netboot=xnba;nodetype=osi;profile=compute';
 | 
			
		||||
    $.ajax({
 | 
			
		||||
        url : 'lib/cmd.php',
 | 
			
		||||
        dataType : 'json',
 | 
			
		||||
@@ -332,15 +297,30 @@ function addIdataplex(){
 | 
			
		||||
            msg : ''
 | 
			
		||||
        },
 | 
			
		||||
        success: function(data) {
 | 
			
		||||
        	// Update /etc/hosts
 | 
			
		||||
        	$.ajax({
 | 
			
		||||
    			url : 'lib/cmd.php',
 | 
			
		||||
    			dataType : 'json',
 | 
			
		||||
    			data : {
 | 
			
		||||
    				cmd : 'makehosts',
 | 
			
		||||
    				tgt : '',
 | 
			
		||||
    				args : '',
 | 
			
		||||
    				msg : ''
 | 
			
		||||
    			},
 | 
			
		||||
    		});
 | 
			
		||||
        	
 | 
			
		||||
        	// Remove loader
 | 
			
		||||
            $('#addIdplx img').remove();
 | 
			
		||||
            
 | 
			
		||||
            // Get return message
 | 
			
		||||
            var message = '';
 | 
			
		||||
            for (var i in data.rsp) {
 | 
			
		||||
                message += data.rsp[i];
 | 
			
		||||
                message += data.rsp[i] + '<br/>';
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            if (message) {
 | 
			
		||||
            // Show return message
 | 
			
		||||
            if (message)
 | 
			
		||||
                $('#addIdplx').prepend(createInfoBar(message));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -66,7 +66,6 @@ kvmPlugin.prototype.loadInventory = function(data) {
 | 
			
		||||
	$('#' + tabId).find('img').remove();
 | 
			
		||||
 | 
			
		||||
	// Create division to hold inventory
 | 
			
		||||
	var invDivId = tabId + 'Inventory';
 | 
			
		||||
	var invDiv = $('<div></div>');
 | 
			
		||||
	
 | 
			
		||||
	// Create a fieldset
 | 
			
		||||
@@ -110,7 +109,7 @@ kvmPlugin.prototype.loadClonePage = function(node) {
 | 
			
		||||
	// If there is no existing clone tab
 | 
			
		||||
	if (!$('#' + newTabId).length) {
 | 
			
		||||
		// Create info bar
 | 
			
		||||
		var infoBar = createInfoBar('Not supported');
 | 
			
		||||
		var infoBar = createInfoBar('Not yet supported');
 | 
			
		||||
 | 
			
		||||
		// Create clone form
 | 
			
		||||
		var cloneForm = $('<div class="form"></div>');
 | 
			
		||||
@@ -477,44 +476,25 @@ kvmPlugin.prototype.loadResources = function() {
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Add node range
 | 
			
		||||
 * 
 | 
			
		||||
 * @return Nothing
 | 
			
		||||
 */
 | 
			
		||||
kvmPlugin.prototype.addNode = function() {
 | 
			
		||||
    var diag = $('<div id="addIdplx" class="form"></div>');
 | 
			
		||||
    var info = createInfoBar('Add a node range');
 | 
			
		||||
    diag.append(info);
 | 
			
		||||
	var dialog = $('<div id="addKvm" class="form"></div>');
 | 
			
		||||
    var info = createInfoBar('Add a KVM node');
 | 
			
		||||
    dialog.append(info);
 | 
			
		||||
    
 | 
			
		||||
    // Create node inputs
 | 
			
		||||
    var nodeFieldSet = $('<fieldset></fieldset>');
 | 
			
		||||
	var legend = $('<legend>Node</legend>');
 | 
			
		||||
	nodeFieldSet.append(legend);
 | 
			
		||||
	diag.append(nodeFieldSet);
 | 
			
		||||
	
 | 
			
		||||
    var nodeInputs = '<div><label>Node: </label><input type="text"></div>' +
 | 
			
		||||
               '<div><label>MAC:</label><input type="text"></div>' + 
 | 
			
		||||
               '<div><label>IP: </label><input type="text"></div>' +
 | 
			
		||||
               '<div><label>Groups: </label><input type="text"></div>';    
 | 
			
		||||
    nodeFieldSet.append(nodeInputs);
 | 
			
		||||
    dialog.append($('<div><label>Node:</label><input name="node" type="text"></div>'));
 | 
			
		||||
	dialog.append($('<div><label>VM host:</label><input name="vmhost" type="text"></div>'));
 | 
			
		||||
	dialog.append($('<div><label>IP address:</label><input name="ip" type="text"></div>'));
 | 
			
		||||
	dialog.append($('<div><label>Groups:</label><input name="groups" type="text"></div>'));
 | 
			
		||||
    
 | 
			
		||||
    var bmcFieldSet = $('<fieldset></fieldset>');
 | 
			
		||||
	var legend = $('<legend>BMC</legend>');
 | 
			
		||||
	bmcFieldSet.append(legend);
 | 
			
		||||
	diag.append(bmcFieldSet);
 | 
			
		||||
	
 | 
			
		||||
	// Create BMC inputs
 | 
			
		||||
	var bmcInputs = '<div><label>BMC:</label><input type="text"></div>' +
 | 
			
		||||
     	'<div><label>IP:</label><input type="text"></div>' +
 | 
			
		||||
     	'<div><label>Groups:</label><input type="text"></div>';    
 | 
			
		||||
	 bmcFieldSet.append(bmcInputs);
 | 
			
		||||
 | 
			
		||||
    diag.dialog({
 | 
			
		||||
    dialog.dialog({
 | 
			
		||||
    	title: 'Add node',
 | 
			
		||||
        modal: true,
 | 
			
		||||
        width: 400,
 | 
			
		||||
        close: function(){$(this).remove();},
 | 
			
		||||
        buttons: {
 | 
			
		||||
            "OK" : function(){addIdataplex();},
 | 
			
		||||
            "OK" : function(){addKvmNode();},
 | 
			
		||||
            "Cancel": function(){$(this).dialog('close');}
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
@@ -522,61 +502,48 @@ kvmPlugin.prototype.addNode = function() {
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Add iDataPlex node range
 | 
			
		||||
 * 
 | 
			
		||||
 * @return Nothing
 | 
			
		||||
 */
 | 
			
		||||
function addIdataplex(){
 | 
			
		||||
    var tempArray = new Array();
 | 
			
		||||
function addKvmNode(){
 | 
			
		||||
	var attr, args;
 | 
			
		||||
    var errorMessage = '';
 | 
			
		||||
    var attr = '';
 | 
			
		||||
    var args = '';
 | 
			
		||||
    
 | 
			
		||||
        
 | 
			
		||||
    // Remove existing warnings
 | 
			
		||||
    $('#addIdplx .ui-state-error').remove();
 | 
			
		||||
    $('#addKvm .ui-state-error').remove();
 | 
			
		||||
    
 | 
			
		||||
    // Get input values
 | 
			
		||||
    $('#addIdplx input').each(function(){
 | 
			
		||||
    // Return input border colors to normal
 | 
			
		||||
    $('#addKvm input').css('border', 'solid #BDBDBD 1px');
 | 
			
		||||
    
 | 
			
		||||
    // Check node attributes
 | 
			
		||||
    $('#addKvm input').each(function(){
 | 
			
		||||
        attr = $(this).val();
 | 
			
		||||
        if (attr) {
 | 
			
		||||
            tempArray.push($(this).val());
 | 
			
		||||
        } else {
 | 
			
		||||
        if (!attr) {
 | 
			
		||||
            errorMessage = "Please provide a value for each missing field!";
 | 
			
		||||
            return false;
 | 
			
		||||
            $(this).css('border', 'solid #FF0000 1px');
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
    
 | 
			
		||||
    // Show error message (if any)
 | 
			
		||||
    if (errorMessage) {
 | 
			
		||||
        $('#addIdplx').prepend(createWarnBar(errorMessage));
 | 
			
		||||
        $('#addKvm').prepend(createWarnBar(errorMessage));
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    // Create loader
 | 
			
		||||
    $('#addIdplx').append(createLoader());
 | 
			
		||||
    $('#addKvm').append(createLoader());
 | 
			
		||||
    
 | 
			
		||||
    // Change dialog buttons
 | 
			
		||||
    $('#addIdplx').dialog('option', 'buttons', {
 | 
			
		||||
    $('#addKvm').dialog('option', 'buttons', {
 | 
			
		||||
    	'Close':function(){
 | 
			
		||||
    		$('#addIdplx').dialog('close');
 | 
			
		||||
    		$('#addKvm').dialog('close');
 | 
			
		||||
    	}
 | 
			
		||||
    });
 | 
			
		||||
    
 | 
			
		||||
    // Generate chdef arguments
 | 
			
		||||
    args = '-t;node;-o;' + tempArray[0] + ';mac=' + tempArray[1] + ';ip=' + tempArray[2] + ';groups=' + 
 | 
			
		||||
          tempArray[3] + ';mgt=kvm;chain="runcmd=bmcsetup";netboot=xnba;nodetype=osi;profile=compute;' +
 | 
			
		||||
          'bmc=' + tempArray[4];
 | 
			
		||||
    $.ajax({
 | 
			
		||||
        url : 'lib/cmd.php',
 | 
			
		||||
        dataType : 'json',
 | 
			
		||||
        data : {
 | 
			
		||||
            cmd : 'chdef',
 | 
			
		||||
            tgt : '',
 | 
			
		||||
            args : args,
 | 
			
		||||
            msg : ''
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
     
 | 
			
		||||
    // Generate chdef arguments for BMC
 | 
			
		||||
    args = '-t;node;-o;' + tempArray[4] + ';ip=' + tempArray[5] + ';groups=' + tempArray[6];
 | 
			
		||||
    args = '-t;node;-o;' + $('#addKvm input[name="node"]').val()
 | 
			
		||||
	    + ';ip=' + $('#addKvm input[name="ip"]').val()
 | 
			
		||||
	    + ';groups=' + $('#addKvm input[name="groups"]').val() 
 | 
			
		||||
	    + ';vmhost=' + $('#addKvm input[name="vmhost"]').val() 
 | 
			
		||||
	    + ';mgt=kvm;netboot=xnba;nodetype=osi;profile=compute';
 | 
			
		||||
    $.ajax({
 | 
			
		||||
        url : 'lib/cmd.php',
 | 
			
		||||
        dataType : 'json',
 | 
			
		||||
@@ -587,15 +554,30 @@ function addIdataplex(){
 | 
			
		||||
            msg : ''
 | 
			
		||||
        },
 | 
			
		||||
        success: function(data) {
 | 
			
		||||
            $('#addIdplx img').remove();
 | 
			
		||||
        	// Update /etc/hosts
 | 
			
		||||
        	$.ajax({
 | 
			
		||||
    			url : 'lib/cmd.php',
 | 
			
		||||
    			dataType : 'json',
 | 
			
		||||
    			data : {
 | 
			
		||||
    				cmd : 'makehosts',
 | 
			
		||||
    				tgt : '',
 | 
			
		||||
    				args : '',
 | 
			
		||||
    				msg : ''
 | 
			
		||||
    			},
 | 
			
		||||
    		});
 | 
			
		||||
        	
 | 
			
		||||
        	// Remove loader
 | 
			
		||||
            $('#addKvm img').remove();
 | 
			
		||||
            
 | 
			
		||||
            // Get return message
 | 
			
		||||
            var message = '';
 | 
			
		||||
            for (var i in data.rsp) {
 | 
			
		||||
                message += data.rsp[i];
 | 
			
		||||
                message += data.rsp[i] + '<br/>';
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            if (message) {
 | 
			
		||||
                $('#addIdplx').prepend(createInfoBar(message));
 | 
			
		||||
            }
 | 
			
		||||
            // Show return message
 | 
			
		||||
            if (message)
 | 
			
		||||
                $('#addKvm').prepend(createInfoBar(message));
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@ var zvmPlugin = function() {
 | 
			
		||||
 * @return Nothing
 | 
			
		||||
 */
 | 
			
		||||
zvmPlugin.prototype.serviceClone = function(node) {	
 | 
			
		||||
	var owner = $.cookie('srv_usrname');
 | 
			
		||||
	var owner = $.cookie('xcat_username');
 | 
			
		||||
	var group = getUserNodeAttr(node, 'groups');
 | 
			
		||||
	
 | 
			
		||||
	// Submit request to clone VM
 | 
			
		||||
@@ -88,7 +88,7 @@ zvmPlugin.prototype.loadServiceProvisionPage = function(tabId) {
 | 
			
		||||
		var hcp = $('#select-table tbody tr:eq(0) td:eq(0) input[name="hcp"]:checked').val();
 | 
			
		||||
		var group = $('#select-table tbody tr:eq(0) td:eq(1) input[name="group"]:checked').val();
 | 
			
		||||
		var img = $('#select-table tbody tr:eq(0) td:eq(2) input[name="image"]:checked').val();
 | 
			
		||||
		var owner = $.cookie('srv_usrname');
 | 
			
		||||
		var owner = $.cookie('xcat_username');
 | 
			
		||||
		
 | 
			
		||||
		if(!hcp || !group || !img) {
 | 
			
		||||
			// Show warning message
 | 
			
		||||
@@ -853,7 +853,7 @@ zvmPlugin.prototype.loadInventory = function(data) {
 | 
			
		||||
	var legend = $('<legend>General</legend>');
 | 
			
		||||
	fieldSet.append(legend);
 | 
			
		||||
	var oList = $('<ol></ol>');
 | 
			
		||||
	var item, label, input, args;
 | 
			
		||||
	var item, label, args;
 | 
			
		||||
 | 
			
		||||
	// Loop through each property
 | 
			
		||||
	for ( var k = 0; k < 5; k++) {
 | 
			
		||||
@@ -961,7 +961,7 @@ zvmPlugin.prototype.loadInventory = function(data) {
 | 
			
		||||
			// Table columns - Type, Address, ID, Base, Dedicated, and Affinity
 | 
			
		||||
			var procTabRow = $('<thead class="ui-widget-header"> <th>Type</th> <th>Address</th> <th>ID</th> <th>Base</th> <th>Dedicated</th> <th>Affinity</th> </thead>');
 | 
			
		||||
			procTable.append(procTabRow);
 | 
			
		||||
			var procType, procAddr, procId, procAff;
 | 
			
		||||
			var procId, procAff;
 | 
			
		||||
 | 
			
		||||
			/**
 | 
			
		||||
			 * Remove processor
 | 
			
		||||
@@ -989,7 +989,6 @@ zvmPlugin.prototype.loadInventory = function(data) {
 | 
			
		||||
			}];
 | 
			
		||||
 | 
			
		||||
			// Loop through each processor
 | 
			
		||||
			var closeBtn;
 | 
			
		||||
			var n, temp;
 | 
			
		||||
			var procType, procAddr, procLink;
 | 
			
		||||
			for (l = 0; l < attrs[keys[k]].length; l++) {
 | 
			
		||||
@@ -1188,7 +1187,7 @@ zvmPlugin.prototype.loadInventory = function(data) {
 | 
			
		||||
			// Table columns - Virtual device, Adapter Type, Port Name, # of Devices, MAC Address, and LAN Name
 | 
			
		||||
			var nicTabRow = $('<thead class="ui-widget-header"> <th>Virtual Device #</th> <th>Adapter Type</th> <th>Port Name</th> <th># of Devices</th> <th>LAN Name</th></thead>');
 | 
			
		||||
			nicTable.append(nicTabRow);
 | 
			
		||||
			var nicVDev, nicType, nicPortName, nicNumOfDevs, nicMacAddr, nicLanName;
 | 
			
		||||
			var nicVDev, nicType, nicPortName, nicNumOfDevs, nicLanName;
 | 
			
		||||
 | 
			
		||||
			// Loop through each NIC (Data contained in 2 lines)
 | 
			
		||||
			for (l = 0; l < attrs[keys[k]].length; l = l + 2) {
 | 
			
		||||
@@ -1289,9 +1288,6 @@ zvmPlugin.prototype.loadProvisionPage = function(tabId) {
 | 
			
		||||
 | 
			
		||||
		success : setGroupsCookies
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
	// Error message string
 | 
			
		||||
	var errMsg;
 | 
			
		||||
	
 | 
			
		||||
	// Get provision tab instance
 | 
			
		||||
	var inst = tabId.replace('zvmProvisionTab', '');
 | 
			
		||||
@@ -1388,13 +1384,14 @@ zvmPlugin.prototype.loadResources = function() {
 | 
			
		||||
 */
 | 
			
		||||
zvmPlugin.prototype.addNode = function() {
 | 
			
		||||
	// Create form to add node range
 | 
			
		||||
	var addNodeForm = $('<div class="form"></div>');
 | 
			
		||||
	var info = createInfoBar('Add a node range');
 | 
			
		||||
	var addNodeForm = $('<div id="addZvm" class="form"></div>');
 | 
			
		||||
	var info = createInfoBar('Add a z/VM node range');
 | 
			
		||||
	addNodeForm.append(info);
 | 
			
		||||
	addNodeForm.append('<div><label for="node">Node range:</label><input type="text" id="node" name="node"/></div>');
 | 
			
		||||
	addNodeForm.append('<div><label for="userId">User ID range:</label><input type="text" id="userId" name="userId"/></div>');
 | 
			
		||||
	addNodeForm.append('<div><label for="hcp">Hardware control point:</label><input type="text" id="hcp" name="hcp"/></div>');
 | 
			
		||||
	addNodeForm.append('<div><label for="group">Group:</label><input type="text" id="group" name="group"/></div>');
 | 
			
		||||
	addNodeForm.append('<div><label>Node range:</label><input type="text" name="node"/></div>');
 | 
			
		||||
	addNodeForm.append('<div><label>IP address range (optional):</label><input name="ip" type="text"></div>');
 | 
			
		||||
	addNodeForm.append('<div><label>User ID range:</label><input type="text" name="userId"/></div>');
 | 
			
		||||
	addNodeForm.append('<div><label>Hardware control point:</label><input type="text" name="hcp"/></div>');
 | 
			
		||||
	addNodeForm.append('<div><label>Groups:</label><input type="text" name="groups"/></div>');
 | 
			
		||||
	
 | 
			
		||||
	// Open form as a dialog
 | 
			
		||||
	addNodeForm.dialog({
 | 
			
		||||
@@ -1408,13 +1405,14 @@ zvmPlugin.prototype.addNode = function() {
 | 
			
		||||
        		
 | 
			
		||||
				// Get inputs
 | 
			
		||||
				var nodeRange = $(this).find('input[name=node]').val();
 | 
			
		||||
				var ipRange = $(this).find('input[name=ip]').val();
 | 
			
		||||
				var userIdRange = $(this).find('input[name=userId]').val();				
 | 
			
		||||
				var group = $(this).find('input[name=group]').val();
 | 
			
		||||
				var group = $(this).find('input[name=groups]').val();
 | 
			
		||||
				var hcp = $(this).find('input[name=hcp]').val();
 | 
			
		||||
						
 | 
			
		||||
				// Show warning message if inputs are not complete
 | 
			
		||||
				if (!nodeRange || !userIdRange || !group || !hcp) {
 | 
			
		||||
					var warn = createWarnBar('You are missing inputs.');
 | 
			
		||||
					var warn = createWarnBar('Please provide a value for each missing field!');
 | 
			
		||||
					warn.prependTo($(this));
 | 
			
		||||
        		} else {
 | 
			
		||||
    				// Check node range and user ID range
 | 
			
		||||
@@ -1422,14 +1420,12 @@ zvmPlugin.prototype.addNode = function() {
 | 
			
		||||
    				var errMsg = '';
 | 
			
		||||
    				var ready = true;
 | 
			
		||||
    				if (nodeRange.indexOf('-') > -1 || userIdRange.indexOf('-') > -1) {
 | 
			
		||||
    					if (nodeRange.indexOf('-') < 0 || userIdRange.indexOf('-') < 0) {
 | 
			
		||||
    					if (nodeRange.indexOf('-') < 0 || userIdRange.indexOf('-') < 0 || ipRange.indexOf('-') < 0) {
 | 
			
		||||
    						errMsg = errMsg + 'A user ID range and node range needs to be given. ';
 | 
			
		||||
    						ready = false;
 | 
			
		||||
    					} else {
 | 
			
		||||
    						var tmp = nodeRange.split('-');
 | 
			
		||||
    
 | 
			
		||||
    						// Get node base name
 | 
			
		||||
    						var nodeBase = tmp[0].match(/[a-zA-Z]+/);
 | 
			
		||||
    						// Get starting index
 | 
			
		||||
    						var nodeStart = parseInt(tmp[0].match(/\d+/));
 | 
			
		||||
    						// Get ending index
 | 
			
		||||
@@ -1437,24 +1433,43 @@ zvmPlugin.prototype.addNode = function() {
 | 
			
		||||
    
 | 
			
		||||
    						tmp = userIdRange.split('-');
 | 
			
		||||
    
 | 
			
		||||
    						// Get user ID base name
 | 
			
		||||
    						var userIdBase = tmp[0].match(/[a-zA-Z]+/);
 | 
			
		||||
    						// Get starting index
 | 
			
		||||
    						var userIdStart = parseInt(tmp[0].match(/\d+/));
 | 
			
		||||
    						// Get ending index
 | 
			
		||||
    						var userIdEnd = parseInt(tmp[1].match(/\d+/));
 | 
			
		||||
    
 | 
			
		||||
    						
 | 
			
		||||
    						tmp = ipRange.split('-');
 | 
			
		||||
    	    			    
 | 
			
		||||
    			    		// Get starting IP address
 | 
			
		||||
    			    		var ipStart = tmp[0].substring(tmp[0].lastIndexOf(".") + 1);
 | 
			
		||||
    			    		// Get ending IP address
 | 
			
		||||
    			    		var ipEnd = tmp[1].substring(tmp[1].lastIndexOf(".") + 1);
 | 
			
		||||
    						    
 | 
			
		||||
    						// If starting and ending index do not match
 | 
			
		||||
    						if (!(nodeStart == userIdStart) || !(nodeEnd == userIdEnd)) {
 | 
			
		||||
    							// Not ready
 | 
			
		||||
    							errMsg = errMsg + 'The node range and user ID range does not match. ';
 | 
			
		||||
    							ready = false;
 | 
			
		||||
    						}
 | 
			
		||||
    						
 | 
			
		||||
    						// If an IP address range is given and the starting and ending index do not match
 | 
			
		||||
    						if (ipRange && !(nodeStart == ipStart) || !(nodeEnd == ipEnd)) {
 | 
			
		||||
    							errMsg = errMsg + 'The node range and IP address range does not match. ';
 | 
			
		||||
    							ready = false;
 | 
			
		||||
    						}
 | 
			
		||||
    					}
 | 
			
		||||
    				}
 | 
			
		||||
    				
 | 
			
		||||
    				    				
 | 
			
		||||
    				// If there are no errors
 | 
			
		||||
    				if (ready) {
 | 
			
		||||
    					$('#addZvm').append(createLoader());
 | 
			
		||||
    					
 | 
			
		||||
	    				// Change dialog buttons
 | 
			
		||||
	    			    $('#addZvm').dialog('option', 'buttons', {
 | 
			
		||||
	    			    	'Close':function(){
 | 
			
		||||
	    			    		$('#addZvm').dialog('close');
 | 
			
		||||
	    			    	}
 | 
			
		||||
	    			    });
 | 
			
		||||
	    			    
 | 
			
		||||
    			    	// If a node range is given
 | 
			
		||||
    			    	if (nodeRange.indexOf('-') > -1 && userIdRange.indexOf('-') > -1) {
 | 
			
		||||
    			    		var tmp = nodeRange.split('-');
 | 
			
		||||
@@ -1474,11 +1489,21 @@ zvmPlugin.prototype.addNode = function() {
 | 
			
		||||
    			    		var userIdStart = parseInt(tmp[0].match(/\d+/));
 | 
			
		||||
    			    		// Get ending index
 | 
			
		||||
    			    		var userIdEnd = parseInt(tmp[1].match(/\d+/));
 | 
			
		||||
    			    		
 | 
			
		||||
    			    		tmp = ipRange.split('-');
 | 
			
		||||
    	    			    
 | 
			
		||||
    			    		// Get network base
 | 
			
		||||
    			    		var ipBase = tmp[0].substring(0, tmp[0].lastIndexOf(".") + 1);
 | 
			
		||||
    			    		// Get starting IP address
 | 
			
		||||
    			    		var ipStart = tmp[0].substring(tmp[0].lastIndexOf(".") + 1);
 | 
			
		||||
    			    		// Get ending IP address
 | 
			
		||||
    			    		var ipEnd = tmp[1].substring(tmp[1].lastIndexOf(".") + 1);
 | 
			
		||||
    			    
 | 
			
		||||
    			    		// Loop through each node in the node range
 | 
			
		||||
    			    		for ( var i = nodeStart; i <= nodeEnd; i++) {
 | 
			
		||||
    			    			var node = nodeBase + i.toString();
 | 
			
		||||
    			    			var userId = userIdBase + i.toString();
 | 
			
		||||
    			    			var ip = ipBase + i.toString();
 | 
			
		||||
    			    			var inst = i + '/' + nodeEnd;
 | 
			
		||||
    			    
 | 
			
		||||
    			    			/**
 | 
			
		||||
@@ -1492,7 +1517,8 @@ zvmPlugin.prototype.addNode = function() {
 | 
			
		||||
    			    					tgt : '',
 | 
			
		||||
    			    					args : node + ';zvm.hcp=' + hcp
 | 
			
		||||
    			    						+ ';zvm.userid=' + userId
 | 
			
		||||
    			    						+ ';nodehm.mgt=zvm' + ';groups=' + group,
 | 
			
		||||
    			    						+ ';nodehm.mgt=zvm' + ';groups=' + group
 | 
			
		||||
    			    						+ ';hosts.ip=' + ip,
 | 
			
		||||
    			    					msg : 'cmd=addnewnode;inst=' + inst + ';noderange=' + nodeRange
 | 
			
		||||
    			    				},
 | 
			
		||||
    			    
 | 
			
		||||
@@ -1508,19 +1534,33 @@ zvmPlugin.prototype.addNode = function() {
 | 
			
		||||
    			    					var rsp = data.rsp;
 | 
			
		||||
    			    					var args = data.msg.split(';');
 | 
			
		||||
    			    
 | 
			
		||||
    			    					// Get command invoked
 | 
			
		||||
    			    					var cmd = args[0].replace('cmd=', '');
 | 
			
		||||
    			    					// Get instance returned and node range
 | 
			
		||||
    			    					var inst = args[1].replace('inst=', '');    					
 | 
			
		||||
    			    					var nodeRange = args[2].replace('noderange=', '');
 | 
			
		||||
    			    					
 | 
			
		||||
    			    					// If the last node was added
 | 
			
		||||
    			    					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 : ''
 | 
			
		||||
    			    			    			},
 | 
			
		||||
    			    			    		});
 | 
			
		||||
    			    			        	
 | 
			
		||||
    			    						// Remove loader
 | 
			
		||||
    			    			            $('#addZvm img').remove();
 | 
			
		||||
    			    			            
 | 
			
		||||
    			        					// If there was an error, do not continue
 | 
			
		||||
    			        					if (rsp.length) {
 | 
			
		||||
    			        						openDialog('warn', '(Error) Failed to create node definitions');		
 | 
			
		||||
    			        						$('#addZvm').prepend(createWarnBar('Failed to create node definitions'));
 | 
			
		||||
    			        					} else {
 | 
			
		||||
    			        						openDialog('info', 'Node definitions created for ' + nodeRange);	
 | 
			
		||||
    			        						$('#addZvm').prepend(createInfoBar('Node definitions created for ' + nodeRange));
 | 
			
		||||
    			        					}
 | 
			
		||||
    			    					}
 | 
			
		||||
    			    				}
 | 
			
		||||
@@ -1536,7 +1576,8 @@ zvmPlugin.prototype.addNode = function() {
 | 
			
		||||
    			    				tgt : '',
 | 
			
		||||
    			    				args : nodeRange + ';zvm.hcp=' + hcp
 | 
			
		||||
    			    					+ ';zvm.userid=' + userIdRange
 | 
			
		||||
    			    					+ ';nodehm.mgt=zvm' + ';groups=' + group,
 | 
			
		||||
    			    					+ ';nodehm.mgt=zvm' + ';groups=' + group
 | 
			
		||||
    			    					+ ';hosts.ip=' + ipRange,
 | 
			
		||||
    			    				msg : 'cmd=addnewnode;node=' + nodeRange
 | 
			
		||||
    			    			},
 | 
			
		||||
    			    
 | 
			
		||||
@@ -1551,23 +1592,32 @@ zvmPlugin.prototype.addNode = function() {
 | 
			
		||||
    			    				// Get ajax response
 | 
			
		||||
    			    				var rsp = data.rsp;
 | 
			
		||||
    			    				var args = data.msg.split(';');
 | 
			
		||||
    			    
 | 
			
		||||
    			    				// Get command invoked
 | 
			
		||||
    			    				var cmd = args[0].replace('cmd=', '');
 | 
			
		||||
    			    				var node = args[1].replace('node=', '');
 | 
			
		||||
    			    				
 | 
			
		||||
    			    				// Update /etc/hosts
 | 
			
		||||
    			    	        	$.ajax({
 | 
			
		||||
    			    	    			url : 'lib/cmd.php',
 | 
			
		||||
    			    	    			dataType : 'json',
 | 
			
		||||
    			    	    			data : {
 | 
			
		||||
    			    	    				cmd : 'makehosts',
 | 
			
		||||
    			    	    				tgt : '',
 | 
			
		||||
    			    	    				args : '',
 | 
			
		||||
    			    	    				msg : ''
 | 
			
		||||
    			    	    			},
 | 
			
		||||
    			    	    		});
 | 
			
		||||
    			    				
 | 
			
		||||
    			    				// Remove loader
 | 
			
		||||
    			    	            $('#addZvm img').remove();
 | 
			
		||||
    			    				
 | 
			
		||||
    			    				// If there was an error, do not continue
 | 
			
		||||
    			    				if (rsp.length) {
 | 
			
		||||
    									openDialog('warn', '(Error) Failed to create node definition');		
 | 
			
		||||
    								} else {
 | 
			
		||||
    									openDialog('info', 'Node definitions created for ' + node);	
 | 
			
		||||
    								}    				
 | 
			
		||||
		        						$('#addZvm').prepend(createWarnBar('Failed to create node definitions'));
 | 
			
		||||
		        					} else {
 | 
			
		||||
		        						$('#addZvm').prepend(createInfoBar('Node definitions created for ' + node));
 | 
			
		||||
		        					}
 | 
			
		||||
    			    			}
 | 
			
		||||
    			    		});
 | 
			
		||||
    			    	}
 | 
			
		||||
    			    	
 | 
			
		||||
    			    	// Close dialog
 | 
			
		||||
    					$(this).dialog( "close" );
 | 
			
		||||
    				} else {
 | 
			
		||||
    					// Show warning message
 | 
			
		||||
    					var warn = createWarnBar(errMsg);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,16 +1,11 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Global variables
 | 
			
		||||
 */
 | 
			
		||||
// Node tabs
 | 
			
		||||
var nodesTab;
 | 
			
		||||
// Original node attributes
 | 
			
		||||
var origAttrs = new Object();
 | 
			
		||||
// Node attributes
 | 
			
		||||
var nodeAttrs;
 | 
			
		||||
// Node list
 | 
			
		||||
var nodesList;
 | 
			
		||||
// Nodes datatable ID
 | 
			
		||||
var nodesTableId = 'nodesDatatable';
 | 
			
		||||
var nodesTab; // Nodes tabs
 | 
			
		||||
var origAttrs = new Object(); // Original node attributes
 | 
			
		||||
var nodeAttrs; // Node attributes
 | 
			
		||||
var nodesList; // Node list
 | 
			
		||||
var nodesTableId = 'nodesDatatable'; // Nodes datatable ID
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Set node tab
 | 
			
		||||
 
 | 
			
		||||
@@ -189,7 +189,7 @@ function loadServiceProvisionPage(tabId) {
 | 
			
		||||
	 */
 | 
			
		||||
	var okBtn = createButton('Ok');
 | 
			
		||||
	okBtn.bind('click', function(event) {
 | 
			
		||||
		var userName = $.cookie('srv_usrname');
 | 
			
		||||
		var userName = $.cookie('xcat_username');
 | 
			
		||||
		var tmp = $.cookie(userName + '_usrnodes');
 | 
			
		||||
		
 | 
			
		||||
		// Get maximun number for nodes from cookie
 | 
			
		||||
@@ -292,7 +292,7 @@ function loadManagePage(tabId) {
 | 
			
		||||
 * Get the user nodes definitions
 | 
			
		||||
 */
 | 
			
		||||
function getUserNodesDef() {
 | 
			
		||||
	var userName = $.cookie('srv_usrname');
 | 
			
		||||
	var userName = $.cookie('xcat_username');
 | 
			
		||||
	var userNodes = $.cookie(userName + '_usrnodes');
 | 
			
		||||
	if (userNodes) {	
 | 
			
		||||
		 // Get nodes definitions
 | 
			
		||||
@@ -590,7 +590,7 @@ function loadNodesTable(data) {
 | 
			
		||||
				getNodesCurrentLoad();
 | 
			
		||||
				
 | 
			
		||||
				// Refresh nodes table
 | 
			
		||||
				var userName = $.cookie('srv_usrname');
 | 
			
		||||
				var userName = $.cookie('xcat_username');
 | 
			
		||||
				var userNodes = $.cookie(userName + '_usrnodes');
 | 
			
		||||
				if (userNodes) {
 | 
			
		||||
					// Get nodes definitions
 | 
			
		||||
@@ -1057,7 +1057,7 @@ function setOSImageCookies(data) {
 | 
			
		||||
function setUserNodes(data) {
 | 
			
		||||
	if (data.rsp) {
 | 
			
		||||
		// Get user name that is logged in
 | 
			
		||||
		var userName = $.cookie('srv_usrname');
 | 
			
		||||
		var userName = $.cookie('xcat_username');
 | 
			
		||||
		var usrNodes = new Array();
 | 
			
		||||
		
 | 
			
		||||
		// Ignore first columns because it is the header
 | 
			
		||||
@@ -1290,7 +1290,7 @@ function monitorNode(node, monitor) {
 | 
			
		||||
 * @return Nothing
 | 
			
		||||
 */
 | 
			
		||||
function cloneNode(tgtNodes) {	
 | 
			
		||||
	var userName = $.cookie('srv_usrname');	
 | 
			
		||||
	var userName = $.cookie('xcat_username');	
 | 
			
		||||
	var nodes = tgtNodes.split(',');
 | 
			
		||||
	var tmp = $.cookie(userName + '_usrnodes');
 | 
			
		||||
	var usrNodes = tmp.split(',');
 | 
			
		||||
@@ -1586,7 +1586,7 @@ function unlockNode(tgtNodes) {
 | 
			
		||||
 * Get nodes current load information
 | 
			
		||||
 */
 | 
			
		||||
function getNodesCurrentLoad(){
 | 
			
		||||
	var userName = $.cookie('srv_usrname');
 | 
			
		||||
	var userName = $.cookie('xcat_username');
 | 
			
		||||
	var nodes = $.cookie(userName + '_usrnodes');
 | 
			
		||||
	
 | 
			
		||||
    // Get nodes current status
 | 
			
		||||
@@ -2144,7 +2144,7 @@ function getNodeAttr(node, attrName) {
 | 
			
		||||
 * Set the maximum number of VMs a user could have
 | 
			
		||||
 */
 | 
			
		||||
function setMaxVM() {
 | 
			
		||||
	var userName = $.cookie('srv_usrname');
 | 
			
		||||
	var userName = $.cookie('xcat_username');
 | 
			
		||||
	
 | 
			
		||||
	$.ajax( {
 | 
			
		||||
		url : 'lib/srv_cmd.php',
 | 
			
		||||
 
 | 
			
		||||
@@ -64,11 +64,11 @@ function onlogin(data, txtStatus) {
 | 
			
		||||
	if (data.authenticated == 'yes') {
 | 
			
		||||
		$('#login_status').text('Login successful');
 | 
			
		||||
		window.location = 'service.php';
 | 
			
		||||
		
 | 
			
		||||
		// Set user name cookie		
 | 
			
		||||
				
 | 
			
		||||
		// Set user name cookie
 | 
			
		||||
		var exDate = new Date();
 | 
			
		||||
		exDate.setTime(exDate.getTime() + (240 * 60 * 1000));
 | 
			
		||||
		$.cookie('srv_usrname', usrName, { expires: exDate });
 | 
			
		||||
		$.cookie('xcat_username', usrName, { expires: exDate });
 | 
			
		||||
	} else {
 | 
			
		||||
		$('#login_status').text('Authentication failure');
 | 
			
		||||
		$('#login_status').css('color', '#FF0000');
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										144
									
								
								xCAT-UI/js/ui.js
									
									
									
									
									
								
							
							
						
						
									
										144
									
								
								xCAT-UI/js/ui.js
									
									
									
									
									
								
							@@ -796,18 +796,61 @@ function createIFrame(src) {
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Open dialog to set xCAT UI settings
 | 
			
		||||
 * 
 | 
			
		||||
 * @return Nothing
 | 
			
		||||
 */
 | 
			
		||||
function openSettings() {
 | 
			
		||||
	// Create form to add node range
 | 
			
		||||
	var settingsForm = $('<div class="form"></div>');
 | 
			
		||||
	var dialog = $('<div class="form"></div>');
 | 
			
		||||
	var info = createInfoBar('Select the settings you desire');
 | 
			
		||||
	settingsForm.append(info);
 | 
			
		||||
	dialog.append(info);
 | 
			
		||||
	
 | 
			
		||||
	var style = {
 | 
			
		||||
		'color': 'blue',
 | 
			
		||||
		'cursor': 'pointer',
 | 
			
		||||
		'padding': '5px'
 | 
			
		||||
	};
 | 
			
		||||
	
 | 
			
		||||
	var changeThemeOption = $('<div><center><a style="color: blue;">Change xCAT theme</a></center></div>').css(style);
 | 
			
		||||
	dialog.append(changeThemeOption);
 | 
			
		||||
	
 | 
			
		||||
	var changePasswordOption = $('<div><center><a style="color: blue;">Change password</a></center></div>').css(style);
 | 
			
		||||
	dialog.append(changePasswordOption);
 | 
			
		||||
	
 | 
			
		||||
	// Open form as a dialog
 | 
			
		||||
	dialog.dialog({
 | 
			
		||||
		modal: true,
 | 
			
		||||
		title: 'Settings',
 | 
			
		||||
		width: 400,
 | 
			
		||||
		buttons: {
 | 
			
		||||
        	"Cancel": function(){
 | 
			
		||||
        		$(this).dialog("close");
 | 
			
		||||
        	}
 | 
			
		||||
		}
 | 
			
		||||
	});
 | 
			
		||||
	
 | 
			
		||||
	// Bind to click event
 | 
			
		||||
	changeThemeOption.click(function() {
 | 
			
		||||
		dialog.dialog("close");
 | 
			
		||||
		changeTheme();
 | 
			
		||||
	});
 | 
			
		||||
	
 | 
			
		||||
	changePasswordOption.click(function() {
 | 
			
		||||
		dialog.dialog("close");
 | 
			
		||||
		changePassword();
 | 
			
		||||
	});
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Open dialog to change xCAT theme
 | 
			
		||||
 */
 | 
			
		||||
function changeTheme() {
 | 
			
		||||
	// Create form to add node range
 | 
			
		||||
	var dialog = $('<div class="form"></div>');
 | 
			
		||||
	var info = createInfoBar('Select the xCAT theme you desire');
 | 
			
		||||
	dialog.append(info);
 | 
			
		||||
	
 | 
			
		||||
	// Create select drop down for themes
 | 
			
		||||
	var themeFS = $('<fieldset></fieldset>');
 | 
			
		||||
	settingsForm.append(themeFS);
 | 
			
		||||
	dialog.append(themeFS);
 | 
			
		||||
	var legend = $('<legend>Theme</legend>');
 | 
			
		||||
	themeFS.append(legend);
 | 
			
		||||
	var oList = $('<ol></ol>');
 | 
			
		||||
@@ -827,9 +870,9 @@ function openSettings() {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Open form as a dialog
 | 
			
		||||
	settingsForm.dialog({
 | 
			
		||||
	dialog.dialog({
 | 
			
		||||
		modal: true,
 | 
			
		||||
		title: 'Settings',
 | 
			
		||||
		title: 'xCAT Theme',
 | 
			
		||||
		width: 400,
 | 
			
		||||
		buttons: {
 | 
			
		||||
        	"Ok": function(){
 | 
			
		||||
@@ -856,6 +899,93 @@ function openSettings() {
 | 
			
		||||
	});
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Open dialog to change user password
 | 
			
		||||
 */
 | 
			
		||||
function changePassword() {
 | 
			
		||||
	// Create form to add node range
 | 
			
		||||
	var dialog = $('<div id="changePassword" class="form"></div>');
 | 
			
		||||
	var info = createInfoBar('Change your password');
 | 
			
		||||
	dialog.append(info);
 | 
			
		||||
	
 | 
			
		||||
	dialog.append('<div><label>New password:</label><input type="password" name="newPassword"/></div>');
 | 
			
		||||
	dialog.append('<div><label>Confirm password:</label><input type="password" name="confirmPassword"/></div>');
 | 
			
		||||
	
 | 
			
		||||
	// Open form as a dialog
 | 
			
		||||
	dialog.dialog({
 | 
			
		||||
		modal: true,
 | 
			
		||||
		title: 'Change Password',
 | 
			
		||||
		width: 400,
 | 
			
		||||
		buttons: {
 | 
			
		||||
        	"Ok": function(){
 | 
			
		||||
        		// Remove any warning messages
 | 
			
		||||
        		$(this).find('.ui-state-error').remove();
 | 
			
		||||
        		
 | 
			
		||||
        		var errorMessage = "";
 | 
			
		||||
        		
 | 
			
		||||
        		// Check each input is provided
 | 
			
		||||
        		$('#changePassword input').each(function() {
 | 
			
		||||
        			if (!$(this).val()) {
 | 
			
		||||
        				errorMessage = "Please provide a value for each missing input!";
 | 
			
		||||
        			}
 | 
			
		||||
        		});
 | 
			
		||||
        		
 | 
			
		||||
        		// Do not continue if error found
 | 
			
		||||
        		if (errorMessage) {
 | 
			
		||||
        			dialog.prepend(createWarnBar(errorMessage));
 | 
			
		||||
        			return;
 | 
			
		||||
        		}
 | 
			
		||||
        		
 | 
			
		||||
        		// Check new and confirm passwords match
 | 
			
		||||
        		var user = $.cookie('xcat_username');
 | 
			
		||||
        		var newPassword = $('#changePassword input[name="newPassword"]').val();
 | 
			
		||||
        		var confirmPassword = $('#changePassword input[name="confirmPassword"]').val();
 | 
			
		||||
        		if (newPassword != confirmPassword) {
 | 
			
		||||
        			dialog.prepend(createWarnBar("Please confirm new password!"));
 | 
			
		||||
        			return;
 | 
			
		||||
        		}
 | 
			
		||||
        		
 | 
			
		||||
        		// Change dialog buttons
 | 
			
		||||
        	    $('#changePassword').dialog('option', 'buttons', {
 | 
			
		||||
        	    	'Close':function(){
 | 
			
		||||
        	    		$('#changePassword').dialog('close');
 | 
			
		||||
        	    	}
 | 
			
		||||
        	    });
 | 
			
		||||
        		
 | 
			
		||||
        		// Send request to change password
 | 
			
		||||
        	    var url = window.location.pathname;
 | 
			
		||||
        		var page = url.replace('/xcat/', '');
 | 
			
		||||
        	    var url = 'lib/cmd.php';
 | 
			
		||||
        	    // Service portal does not have access to cmd.php
 | 
			
		||||
        	    if (page == 'service.php')
 | 
			
		||||
        	    	url = 'lib/srv_cmd.php';
 | 
			
		||||
        		$.ajax( {
 | 
			
		||||
    				url : url,
 | 
			
		||||
    				dataType : 'json',
 | 
			
		||||
    				data : {
 | 
			
		||||
    					cmd : 'webrun',
 | 
			
		||||
    					tgt : '',
 | 
			
		||||
    					args : 'passwd;' + user + ';' + newPassword,
 | 
			
		||||
    					msg : ''
 | 
			
		||||
    				},
 | 
			
		||||
    				
 | 
			
		||||
    				success : function (data) {
 | 
			
		||||
    					// Show response message
 | 
			
		||||
    					var rspMessage = "";
 | 
			
		||||
    					for (var i in data.rsp)
 | 
			
		||||
    						rspMessage += data.rsp[i] + "<br/>";
 | 
			
		||||
    					
 | 
			
		||||
    					 $('#changePassword').prepend(createInfoBar(rspMessage));
 | 
			
		||||
    				}
 | 
			
		||||
        		});
 | 
			
		||||
        	},
 | 
			
		||||
        	"Cancel": function(){
 | 
			
		||||
        		$(this).dialog( "close" );
 | 
			
		||||
        	}
 | 
			
		||||
		}
 | 
			
		||||
	});
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Adjust datatable column size
 | 
			
		||||
 * 
 | 
			
		||||
 
 | 
			
		||||
@@ -74,6 +74,12 @@ function onlogin(data, txtStatus) {
 | 
			
		||||
		    window.location = 'help.php';
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		// Set user name cookie
 | 
			
		||||
		var usrName = $("#login input[name='username']").val();
 | 
			
		||||
		var exDate = new Date();
 | 
			
		||||
		exDate.setTime(exDate.getTime() + (240 * 60 * 1000));
 | 
			
		||||
		$.cookie('xcat_username', usrName, { expires: exDate });
 | 
			
		||||
		
 | 
			
		||||
		// Set the logonflag
 | 
			
		||||
		$.cookie('logonflag', 'yes', {
 | 
			
		||||
		    path : '/xcat',
 | 
			
		||||
 
 | 
			
		||||
@@ -61,7 +61,8 @@ sub process_request {
 | 
			
		||||
	    'rinstall'	    => \&web_rinstall,
 | 
			
		||||
        'addnode'      => \&web_addnode,
 | 
			
		||||
		'graph'		    => \&web_graphinfo,
 | 
			
		||||
		'getdefaultuserentry' => \&web_getdefaultuserentry
 | 
			
		||||
		'getdefaultuserentry' => \&web_getdefaultuserentry,
 | 
			
		||||
		'passwd' => \&web_passwd
 | 
			
		||||
	);
 | 
			
		||||
 | 
			
		||||
	#check whether the request is authorized or not
 | 
			
		||||
@@ -1973,13 +1974,12 @@ sub web_addnode{
 | 
			
		||||
		`/bin/grep '$hcpname' /etc/hosts`;
 | 
			
		||||
		if ($?){
 | 
			
		||||
			open(OUTPUTFILE, '>>/etc/hosts');
 | 
			
		||||
			print OUTPUTFILE "$ip  $hcpname\n";
 | 
			
		||||
			print OUTPUTFILE "$ip $hcpname\n";
 | 
			
		||||
			close(OUTPUTFILE);
 | 
			
		||||
		}
 | 
			
		||||
		if ('hmc' eq $nodetype){
 | 
			
		||||
			`chdef -t node -o $hcpname username=$username password=$passwd mgt=hmc nodetype=$nodetype groups=all`
 | 
			
		||||
		}
 | 
			
		||||
		else{
 | 
			
		||||
		if ('hmc' eq $nodetype) {
 | 
			
		||||
			`chdef -t node -o $hcpname username=$username password=$passwd mgt=hmc nodetype=$nodetype ip=$ip groups=all`
 | 
			
		||||
		} else {
 | 
			
		||||
			`chdef -t node -o $hcpname username=$username password=$passwd mgt=blade mpa=$hcpname nodetype=$nodetype id=0 groups=mm,all`
 | 
			
		||||
		}
 | 
			
		||||
		return;
 | 
			
		||||
@@ -2225,4 +2225,21 @@ sub web_getdefaultuserentry {
 | 
			
		||||
	
 | 
			
		||||
	$callback->( { data => $entry } );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub web_passwd() {
 | 
			
		||||
	my ( $request, $callback, $sub_req ) = @_;
 | 
			
		||||
 | 
			
		||||
	# Get current and new passwords
 | 
			
		||||
	my $user = $request->{arg}->[1];
 | 
			
		||||
	my $newPassword = $request->{arg}->[2];
 | 
			
		||||
	
 | 
			
		||||
	# Generate encrypted password
 | 
			
		||||
	my $encrypted = `perl -e "print crypt($newPassword, 03162012)"`;
 | 
			
		||||
	# Save in xCAT passwd table
 | 
			
		||||
	`chtab username=$user passwd.key=xcat passwd.password=$encrypted`;
 | 
			
		||||
	
 | 
			
		||||
	my $info = "Password successfully changed";
 | 
			
		||||
	$callback->( { info => $info } );
 | 
			
		||||
	return;
 | 
			
		||||
}
 | 
			
		||||
1;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user