mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-10-31 03:12:30 +00:00 
			
		
		
		
	git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@9421 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
		
			
				
	
	
		
			202 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			202 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /**
 | |
|  * Load netboot page
 | |
|  * 
 | |
|  * @param tgtNodes
 | |
|  *            Targets to run rnetboot against
 | |
|  * @return Nothing
 | |
|  */
 | |
| function loadNetbootPage(tgtNodes) {
 | |
| 	// Get node OS
 | |
| 	var osHash = new Object();
 | |
| 	var nodes = tgtNodes.split(',');
 | |
| 	for (var i in nodes) {
 | |
| 		var os = getNodeAttr(nodes[i], 'os');
 | |
| 		var osBase = os.match(/[a-zA-Z]+/);
 | |
| 		if (osBase) {
 | |
| 			nodes[osBase] = 1;
 | |
| 		}
 | |
| 	}
 | |
| 	
 | |
| 	// Get nodes tab
 | |
| 	var tab = getNodesTab();
 | |
| 	
 | |
| 	// Generate new tab ID
 | |
| 	var inst = 0;
 | |
| 	var newTabId = 'netbootTab' + inst;
 | |
| 	while ($('#' + newTabId).length) {
 | |
| 		// If one already exists, generate another one
 | |
| 		inst = inst + 1;
 | |
| 		newTabId = 'netbootTab' + inst;
 | |
| 	}
 | |
| 
 | |
| 	// Create netboot form
 | |
| 	var netbootForm = $('<div class="form"></div>');
 | |
| 
 | |
| 	// Create status bar
 | |
| 	var statBarId = 'netbootStatusBar' + inst;
 | |
| 	var statusBar = createStatusBar(statBarId).hide();
 | |
| 	netbootForm.append(statusBar);
 | |
| 
 | |
| 	// Create loader
 | |
| 	var loader = createLoader('netbootLoader');
 | |
| 	statusBar.find('div').append(loader);
 | |
| 
 | |
| 	// Create info bar
 | |
| 	var infoBar = createInfoBar('Cause the range of nodes to boot to network');
 | |
| 	netbootForm.append(infoBar);
 | |
| 
 | |
| 	// Create target node or group input
 | |
| 	var target = $('<div><label for="target">Target node range:</label><input type="text" name="target" value="' + tgtNodes + '" title="The node or node range to boot to network"/></div>');
 | |
| 	netbootForm.append(target);
 | |
| 
 | |
| 	// Create options
 | |
| 	var optsDIV = $('<div></div>');
 | |
| 	var optsLabel = $('<label>Options:</label>');	
 | |
| 	var optsList = $('<ul></ul>');
 | |
| 	var opt = $('<li></li>');
 | |
| 	optsList.append(opt);
 | |
| 	optsDIV.append(optsLabel);
 | |
| 	optsDIV.append(optsList);
 | |
| 	netbootForm.append(optsDIV);
 | |
| 	
 | |
| 	// Create boot order checkbox
 | |
| 	var bootOrderChkBox = $('<input type="checkbox" id="s" name="s"/>');
 | |
| 	opt.append(bootOrderChkBox);
 | |
| 	opt.append('Set the boot device order');
 | |
| 	// Create boot order input
 | |
| 	var bootOrder = $('<li><label for="bootOrder">Boot order:</label><input type="text" name="bootOrder"/></li>');
 | |
| 	bootOrder.hide();
 | |
| 	optsList.append(bootOrder);
 | |
| 	
 | |
| 	// Create force reboot checkbox
 | |
| 	optsList.append('<li><input type="checkbox" id="F" name="F"/>Force reboot</li>');
 | |
| 	// Create force shutdown checkbox
 | |
| 	optsList.append('<li><input type="checkbox" id="f" name="f"/>Force immediate shutdown of the partition</li>');
 | |
| 	if (osHash['AIX']) {
 | |
| 		// Create iscsi dump checkbox
 | |
| 		optsList.append('<li><input type="checkbox" id="I" name="I"/>Do a iscsi dump on AIX</li>');
 | |
| 	}
 | |
| 	
 | |
| 	// Show boot order when checkbox is checked
 | |
| 	bootOrderChkBox.bind('click', function(event) {
 | |
| 		if ($(this).is(':checked')) {
 | |
| 			bootOrder.show();
 | |
| 		} else {
 | |
| 			bootOrder.hide();
 | |
| 		}
 | |
| 	});
 | |
| 
 | |
| 	// Determine plugin
 | |
| 	var tmp = tgtNodes.split(',');
 | |
| 	for ( var i = 0; i < tmp.length; i++) {
 | |
| 		var mgt = getNodeAttr(tmp[i], 'mgt');
 | |
| 		// If it is zvm
 | |
| 		if (mgt == 'zvm') {
 | |
| 			// Add IPL input
 | |
| 			netbootForm.append('<div><label for="ipl">IPL:</label><input type="text" name="ipl" title="The virtual address to IPL"/></div>');
 | |
| 			break;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	// Generate tooltips
 | |
| 	netbootForm.find('div input[title]').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.bind('click', function(event) {
 | |
| 		// Remove any warning messages
 | |
| 		$(this).parent().parent().find('.ui-state-error').remove();
 | |
| 		
 | |
| 		// Check inputs
 | |
| 		var ready = true;
 | |
| 		var inputs = $("#" + newTabId + " input[type='text']:visible");
 | |
| 		for ( var i = 0; i < inputs.length; i++) {
 | |
| 			if (!inputs.eq(i).val()) {
 | |
| 				inputs.eq(i).css('border', 'solid #FF0000 1px');
 | |
| 				ready = false;
 | |
| 			} else {
 | |
| 				inputs.eq(i).css('border', 'solid #BDBDBD 1px');
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		// Generate arguments
 | |
| 		var chkBoxes = $("#" + newTabId + " input[type='checkbox']:checked");
 | |
| 		var optStr = '';
 | |
| 		var opt;
 | |
| 		for ( var i = 0; i < chkBoxes.length; i++) {
 | |
| 			opt = chkBoxes.eq(i).attr('name');
 | |
| 			optStr += '-' + opt;
 | |
| 			
 | |
| 			// If it is the boot order
 | |
| 			if (opt == 's') {
 | |
| 				// Get the boot order
 | |
| 				optStr += ';' + $('#' + newTabId + ' input[name=bootOrder]').val();
 | |
| 			}
 | |
| 			
 | |
| 			// Append ; to end of string
 | |
| 			if (i < (chkBoxes.length - 1)) {
 | |
| 				optStr += ';';
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		// If no inputs are empty
 | |
| 		if (ready) {
 | |
| 			// Get nodes
 | |
| 			var tgts = $('#' + newTabId + ' input[name=target]').val();
 | |
| 
 | |
| 			// Get IPL address
 | |
| 			var ipl = $('#' + newTabId + ' input[name=ipl]');
 | |
| 			if (ipl) {
 | |
| 				optStr += 'ipl=' + ipl.val();
 | |
| 			}
 | |
| 
 | |
| 			// Disable all inputs and Ok button
 | |
| 			$('#' + newTabId + ' input').attr('disabled', 'disabled');
 | |
| 			$(this).attr('disabled', 'true');
 | |
| 
 | |
| 			/**
 | |
| 			 * (1) Boot to network
 | |
| 			 */
 | |
| 			$.ajax( {
 | |
| 				url : 'lib/cmd.php',
 | |
| 				dataType : 'json',
 | |
| 				data : {
 | |
| 					cmd : 'rnetboot',
 | |
| 					tgt : tgts,
 | |
| 					args : optStr,
 | |
| 					msg : 'out=' + statBarId + ';cmd=rnetboot;tgt=' + tgts
 | |
| 				},
 | |
| 
 | |
| 				success : updateStatusBar
 | |
| 			});
 | |
| 
 | |
| 			// Show status bar
 | |
| 			statusBar.show();
 | |
| 		} else {
 | |
| 			// Show warning message
 | |
| 			var warn = createWarnBar('You are missing some inputs.');
 | |
| 			warn.prependTo($(this).parent().parent());
 | |
| 		}
 | |
| 	});
 | |
| 	netbootForm.append(okBtn);
 | |
| 
 | |
| 	// Append to discover tab
 | |
| 	tab.add(newTabId, 'Boot', netbootForm, true);
 | |
| 
 | |
| 	// Select new tab
 | |
| 	tab.select(newTabId);
 | |
| } |