mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-11-04 05:12:30 +00:00 
			
		
		
		
	git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/branches/2.8@16168 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
		
			
				
	
	
		
			342 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			342 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/**
 | 
						|
 * Load nodeset page
 | 
						|
 * 
 | 
						|
 * @param tgtNodes Targets to run nodeset against
 | 
						|
 */
 | 
						|
function loadNodesetPage(tgtNodes) {
 | 
						|
    // Get OS images
 | 
						|
    $.ajax( {
 | 
						|
        url : 'lib/cmd.php',
 | 
						|
        dataType : 'json',
 | 
						|
        data : {
 | 
						|
            cmd : 'tabdump',
 | 
						|
            tgt : '',
 | 
						|
            args : 'osimage',
 | 
						|
            msg : ''
 | 
						|
        },
 | 
						|
 | 
						|
        success : setOSImageCookies
 | 
						|
    });
 | 
						|
 | 
						|
    // Get nodes tab
 | 
						|
    var tab = getNodesTab();
 | 
						|
 | 
						|
    // Generate new tab ID
 | 
						|
    var inst = 0;
 | 
						|
    var tabId = 'nodesetTab' + inst;
 | 
						|
    while ($('#' + tabId).length) {
 | 
						|
        // If one already exists, generate another one
 | 
						|
        inst = inst + 1;
 | 
						|
        tabId = 'nodesetTab' + inst;
 | 
						|
    }
 | 
						|
    
 | 
						|
    // Create nodeset form
 | 
						|
    var nodesetForm = $('<div class="form"></div>');
 | 
						|
 | 
						|
    // Create status bar
 | 
						|
    var statBarId = 'nodesetStatusBar' + inst;
 | 
						|
    var statBar = createStatusBar(statBarId).hide();
 | 
						|
 | 
						|
    // Create loader
 | 
						|
    var loader = createLoader('nodesetLoader');
 | 
						|
    statBar.find('div').append(loader);
 | 
						|
 | 
						|
    // Create info bar
 | 
						|
    var infoBar = createInfoBar('Set the boot state for a node range');
 | 
						|
    nodesetForm.append(statBar, infoBar);
 | 
						|
    
 | 
						|
	// Create VM fieldset
 | 
						|
    var vmFS = $('<fieldset></fieldset>');
 | 
						|
    var vmLegend = $('<legend>Virtual Machine</legend>');
 | 
						|
    vmFS.append(vmLegend);
 | 
						|
    nodesetForm.append(vmFS);
 | 
						|
    
 | 
						|
    var vmAttr = $('<div style="display: inline-table; vertical-align: middle;"></div>');
 | 
						|
    vmFS.append($('<div style="display: inline-table; vertical-align: middle;"><img src="images/provision/computer.png"></img></div>'));
 | 
						|
    vmFS.append(vmAttr);
 | 
						|
    
 | 
						|
	// Create options fieldset
 | 
						|
    var imageFS = $('<fieldset></fieldset>');
 | 
						|
    var imageLegend = $('<legend>Image</legend>');
 | 
						|
    imageFS.append(imageLegend);
 | 
						|
    nodesetForm.append(imageFS);
 | 
						|
    
 | 
						|
    var imageAttr = $('<div style="display: inline-table; vertical-align: middle;"></div>');
 | 
						|
    imageFS.append($('<div style="display: inline-table; vertical-align: middle;"><img src="images/provision/setting.png" style="width: 70px;"></img></div>'));
 | 
						|
    imageFS.append(imageAttr);
 | 
						|
 | 
						|
    // Create target node or group
 | 
						|
    var tgt = $('<div><label>Target node range:</label><input type="text" name="target" value="' + tgtNodes + '" title="The node or node range to set the boot state for"/></div>');
 | 
						|
    vmAttr.append(tgt);
 | 
						|
    
 | 
						|
    // Create boot type drop down
 | 
						|
    var type = $('<div></div>');
 | 
						|
    var typeLabel = $('<label>Boot type:</label>');
 | 
						|
    var typeSelect = $('<select id="bootType" name="bootType" title="The type of network booting to use for this node"></select>');
 | 
						|
    typeSelect.append('<option value="zvm">zvm</option>'
 | 
						|
        + '<option value="install">pxe</option>'
 | 
						|
        + '<option value="iscsiboot">yaboot</option>'
 | 
						|
    );
 | 
						|
    type.append(typeLabel);
 | 
						|
    type.append(typeSelect);
 | 
						|
    imageAttr.append(type);
 | 
						|
    
 | 
						|
    // Create operating system image input
 | 
						|
    var os = $('<div></div>');
 | 
						|
    var osLabel = $('<label>Operating system image:</label>');
 | 
						|
    var osSelect = $('<select name="os" title="The operating system image to be installed on this node"></select>');
 | 
						|
    osSelect.append($('<option value=""></option>'));
 | 
						|
    
 | 
						|
    var imageNames = $.cookie('imagenames').split(',');
 | 
						|
    if (imageNames) {
 | 
						|
        imageNames.sort();
 | 
						|
        for (var i in imageNames) {
 | 
						|
            osSelect.append($('<option value="' + imageNames[i] + '">' + imageNames[i] + '</option>'));
 | 
						|
        }
 | 
						|
    }
 | 
						|
    os.append(osLabel);
 | 
						|
    os.append(osSelect);
 | 
						|
    imageAttr.append(os);
 | 
						|
 | 
						|
    // Generate tooltips
 | 
						|
    nodesetForm.find('div input[title],select').tooltip({
 | 
						|
        position: "center right",
 | 
						|
        offset: [-2, 10],
 | 
						|
        effect: "fade",
 | 
						|
        opacity: 0.7,
 | 
						|
        predelay: 800,
 | 
						|
        events : {
 | 
						|
            def : "mouseover,mouseout",
 | 
						|
            input : "mouseover,mouseout",
 | 
						|
            widget : "focus mouseover,blur mouseout",
 | 
						|
            tooltip : "mouseover,mouseout"
 | 
						|
        }
 | 
						|
    });
 | 
						|
    
 | 
						|
    /**
 | 
						|
     * Ok
 | 
						|
     */
 | 
						|
    var okBtn = createButton('Ok');
 | 
						|
    okBtn.css({
 | 
						|
    	'width': '80px',
 | 
						|
    	'display': 'block'
 | 
						|
    });
 | 
						|
    okBtn.bind('click', function(event) {
 | 
						|
    	// Remove any warning messages
 | 
						|
    	$(this).parents('.ui-tabs-panel').find('.ui-state-error').remove();
 | 
						|
        
 | 
						|
        // Check state, OS, arch, and profile
 | 
						|
        var ready = true;
 | 
						|
        var inputs = $('#' + tabId + ' input');
 | 
						|
        for ( var i = 0; i < inputs.length; i++) {
 | 
						|
            if (!inputs.eq(i).val() && inputs.eq(i).attr('name') != 'diskPw') {
 | 
						|
                inputs.eq(i).css('border', 'solid #FF0000 1px');
 | 
						|
                ready = false;
 | 
						|
            } else {
 | 
						|
                inputs.eq(i).css('border', 'solid #BDBDBD 1px');
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        if (ready) {
 | 
						|
            // Get nodes
 | 
						|
            var tgts = $('#' + tabId + ' input[name=target]').val();            
 | 
						|
            // Get boot type
 | 
						|
            var type = $('#' + tabId + ' select[id=bootType]').val();
 | 
						|
            // Get operating system image
 | 
						|
            var os = $('#' + tabId + ' select[name=os]').val();
 | 
						|
 | 
						|
            // Disable all inputs, selects, and Ok button
 | 
						|
            inputs.attr('disabled', 'disabled');
 | 
						|
            $('#' + tabId + ' select').attr('disabled', 'disabled');
 | 
						|
            $(this).attr('disabled', 'true');
 | 
						|
 | 
						|
            /**
 | 
						|
             * (1) Set the OS, arch, and profile
 | 
						|
             */
 | 
						|
            $.ajax( {
 | 
						|
                url : 'lib/cmd.php',
 | 
						|
                dataType : 'json',
 | 
						|
                data : {
 | 
						|
                    cmd : 'nodeadd',
 | 
						|
                    tgt : '',
 | 
						|
                    args : tgts + ';noderes.netboot=' + type,
 | 
						|
                    msg : 'cmd=nodeadd;inst=' + inst
 | 
						|
                },
 | 
						|
 | 
						|
                success : updateNodesetStatus
 | 
						|
            });
 | 
						|
 | 
						|
            // Show status bar
 | 
						|
            statBar.show();
 | 
						|
        } else {
 | 
						|
            // Show warning message
 | 
						|
            var warn = createWarnBar('You are missing some values!');
 | 
						|
            warn.prependTo($(this).parents('.ui-tabs-panel'));
 | 
						|
        }
 | 
						|
    });
 | 
						|
    nodesetForm.append(okBtn);
 | 
						|
 | 
						|
    // Append to discover tab
 | 
						|
    tab.add(tabId, 'Nodeset', nodesetForm, true);
 | 
						|
 | 
						|
    // Select new tab
 | 
						|
    tab.select(tabId);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Update nodeset status
 | 
						|
 * 
 | 
						|
 * @param data Data returned from HTTP request
 | 
						|
 */
 | 
						|
function updateNodesetStatus(data) {
 | 
						|
    // Get ajax response
 | 
						|
    var rsp = data.rsp;
 | 
						|
    var args = data.msg.split(';');
 | 
						|
    var cmd = args[0].replace('cmd=', '');
 | 
						|
 | 
						|
    // Get nodeset instance
 | 
						|
    var inst = args[1].replace('inst=', '');
 | 
						|
    // Get status bar ID
 | 
						|
    var statBarId = 'nodesetStatusBar' + inst;
 | 
						|
    // Get tab ID
 | 
						|
    var tabId = 'nodesetTab' + inst;
 | 
						|
 | 
						|
    // Get nodes
 | 
						|
    var tgts = $('#' + tabId + ' input[name=target]').val();
 | 
						|
	// Get operating system image
 | 
						|
    var os = $('#' + tabId + ' select[name=os]').val();
 | 
						|
 | 
						|
    /**
 | 
						|
     * (2) Update /etc/hosts
 | 
						|
     */
 | 
						|
    if (cmd == 'nodeadd') {
 | 
						|
        if (rsp.length) {
 | 
						|
            $('#' + statBarId).find('img').hide();
 | 
						|
            $('#' + statBarId).find('div').append('<pre>(Error) Failed to create node definition</pre>');
 | 
						|
        } else {
 | 
						|
            // Create target nodes string
 | 
						|
            var tgtNodesStr = '';
 | 
						|
            var nodes = tgts.split(',');
 | 
						|
            
 | 
						|
            // Loop through each node
 | 
						|
            for ( var i in nodes) {
 | 
						|
                // If it is the 1st and only node
 | 
						|
                if (i == 0 && i == nodes.length - 1) {
 | 
						|
                    tgtNodesStr += nodes[i];
 | 
						|
                }
 | 
						|
                // If it is the 1st node of many nodes
 | 
						|
                else if (i == 0 && i != nodes.length - 1) {
 | 
						|
                    // Append a comma to the string
 | 
						|
                    tgtNodesStr += nodes[i] + ', ';
 | 
						|
                } else {
 | 
						|
                    // If it is the last node
 | 
						|
                    if (i == nodes.length - 1) {
 | 
						|
                        // Append nothing to the string
 | 
						|
                        tgtNodesStr += nodes[i];
 | 
						|
                    } else {
 | 
						|
                        // Append a comma to the string
 | 
						|
                        tgtNodesStr += nodes[i] + ', ';
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
            
 | 
						|
            $('#' + statBarId).find('div').append('<pre>Node definition created for ' + tgtNodesStr + '</pre>');
 | 
						|
            $.ajax( {
 | 
						|
                url : 'lib/cmd.php',
 | 
						|
                dataType : 'json',
 | 
						|
                data : {
 | 
						|
                    cmd : 'makehosts',
 | 
						|
                    tgt : '',
 | 
						|
                    args : '',
 | 
						|
                    msg : 'cmd=makehosts;inst=' + inst
 | 
						|
                },
 | 
						|
 | 
						|
                success : updateNodesetStatus
 | 
						|
            });
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * (4) Update DNS
 | 
						|
     */
 | 
						|
    else if (cmd == 'makehosts') {
 | 
						|
        // If no output, no errors occurred
 | 
						|
        if (rsp.length) {
 | 
						|
            $('#' + statBarId).find('div').append('<pre>(Error) Failed to update /etc/hosts</pre>');
 | 
						|
        } else {
 | 
						|
            $('#' + statBarId).find('div').append('<pre>/etc/hosts updated</pre>');
 | 
						|
        }
 | 
						|
 | 
						|
        // Update DNS
 | 
						|
        $.ajax( {
 | 
						|
            url : 'lib/cmd.php',
 | 
						|
            dataType : 'json',
 | 
						|
            data : {
 | 
						|
                cmd : 'makedns',
 | 
						|
                tgt : '',
 | 
						|
                args : '',
 | 
						|
                msg : 'cmd=makedns;inst=' + inst
 | 
						|
            },
 | 
						|
 | 
						|
            success : updateNodesetStatus
 | 
						|
        });
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * (5) Update DHCP
 | 
						|
     */
 | 
						|
    else if (cmd == 'makedns') {
 | 
						|
        // Write ajax response to status bar
 | 
						|
        var prg = writeRsp(rsp, '');    
 | 
						|
        $('#' + statBarId).find('div').append(prg);    
 | 
						|
        
 | 
						|
        // Update DHCP
 | 
						|
        $.ajax( {
 | 
						|
            url : 'lib/cmd.php',
 | 
						|
            dataType : 'json',
 | 
						|
            data : {
 | 
						|
                cmd : 'makedhcp',
 | 
						|
                tgt : '',
 | 
						|
                args : '-a',
 | 
						|
                msg : 'cmd=makedhcp;inst=' + inst
 | 
						|
            },
 | 
						|
 | 
						|
            success : updateNodesetStatus
 | 
						|
        });
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * (6) Prepare node for boot
 | 
						|
     */
 | 
						|
    else if (cmd == 'makedhcp') {
 | 
						|
        // Write ajax response to status bar
 | 
						|
        var prg = writeRsp(rsp, '');    
 | 
						|
        $('#' + statBarId).find('div').append(prg);    
 | 
						|
 | 
						|
        // Prepare node for boot
 | 
						|
        $.ajax( {
 | 
						|
            url : 'lib/cmd.php',
 | 
						|
            dataType : 'json',
 | 
						|
            data : {
 | 
						|
                cmd : 'nodeset',
 | 
						|
                tgt : tgts,
 | 
						|
                args : 'osimage=' + os,
 | 
						|
                msg : 'cmd=nodeset;inst=' + inst
 | 
						|
            },
 | 
						|
 | 
						|
            success : updateNodesetStatus
 | 
						|
        });
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * (7) Boot node from network
 | 
						|
     */
 | 
						|
    else if (cmd == 'nodeset') {
 | 
						|
        // Write ajax response to status bar
 | 
						|
        var prg = writeRsp(rsp, '');    
 | 
						|
        $('#' + statBarId).find('div').append(prg);    
 | 
						|
 | 
						|
        // Hide loader
 | 
						|
        $('#' + statBarId).find('img').hide();
 | 
						|
    }
 | 
						|
} |