mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-10-30 19:02:27 +00:00 
			
		
		
		
	git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@9421 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
		
			
				
	
	
		
			386 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			386 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /**
 | |
|  * Load updatenode page
 | |
|  * 
 | |
|  * @param tgtNodes
 | |
|  *            Targets to run updatenode against
 | |
|  * @return Nothing
 | |
|  */
 | |
| function loadUpdatenodePage(tgtNodes) {
 | |
| 	// Get OS images
 | |
| 	$.ajax({
 | |
| 		url : 'lib/cmd.php',
 | |
| 		dataType : 'json',
 | |
| 		data : {
 | |
| 			cmd : 'tabdump',
 | |
| 			tgt : '',
 | |
| 			args : 'osimage',
 | |
| 			msg : ''
 | |
| 		},
 | |
| 
 | |
| 		success : setOSImageCookies
 | |
| 	});
 | |
| 	
 | |
| 	// 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 = 'updatenodeTab' + inst;
 | |
| 	while ($('#' + newTabId).length) {
 | |
| 		// If one already exists, generate another one
 | |
| 		inst = inst + 1;
 | |
| 		newTabId = 'updatenodeTab' + inst;
 | |
| 	}
 | |
| 	
 | |
| 	// Create updatenode form
 | |
| 	var updatenodeForm = $('<div class="form"></div>');
 | |
| 
 | |
| 	// Create status bar
 | |
| 	var statBarId = 'updatenodeStatusBar' + inst;
 | |
| 	var statusBar = createStatusBar(statBarId).hide();
 | |
| 	updatenodeForm.append(statusBar);
 | |
| 
 | |
| 	// Create loader
 | |
| 	var loader = createLoader('updatenodeLoader');
 | |
| 	statusBar.find('div').append(loader);
 | |
| 
 | |
| 	// Create info bar
 | |
| 	var infoBar = createInfoBar('Update nodes in an xCAT environment');
 | |
| 	updatenodeForm.append(infoBar);
 | |
| 	
 | |
| 	// Create target node or group input
 | |
| 	var tgt = $('<div><label for="target">Target node range:</label><input type="text" name="target" value="' + tgtNodes + '" title="The node or node range to update"/></div>');
 | |
| 	updatenodeForm.append(tgt);
 | |
| 
 | |
| 	// Create options
 | |
| 	var options = $('<div></div>');
 | |
| 	var optionsLabel = $('<label>Options:</label>');	
 | |
| 	var optionsList = $('<ul></ul>');
 | |
| 	options.append(optionsLabel);
 | |
| 	options.append(optionsList);
 | |
| 	updatenodeForm.append(options);
 | |
| 		
 | |
| 	// Create update all software checkbox (only AIX)
 | |
| 	if (osHash['AIX']) {
 | |
| 		var updateAllOption = $('<li></li>');
 | |
|     	var updateAllChkBox = $('<input type="checkbox" id="A" name="A"/>');
 | |
|     	updateAllOption.append(updateAllChkBox);
 | |
|     	optionsList.append(updateAllOption);
 | |
|     	updateAllOption.append('Install or update all software contained in the source directory');
 | |
|     	
 | |
|     	// Create source directory input
 | |
|     	var allSwScrDirectory = $('<li><label for="allSwSrcDirectory" style="vertical-align: middle">Source directory:</label><input type="text" id="allSwSrcDirectory" name="allSwSrcDirectory"/></li>');
 | |
|     	// Browse server directory and files
 | |
|     	var allSWSrcDirBrowse = createButton('Browse');
 | |
|     	allSWSrcDirBrowse.serverBrowser({
 | |
|     		onSelect : function(path) {
 | |
|     			$('#allSwSrcDirectory').val(path);
 | |
|     		},
 | |
|     		onLoad : function() {
 | |
|     			return $('#allSwSrcDirectory').val();
 | |
|     		},
 | |
|     		knownExt : [ 'exe', 'js', 'txt' ],
 | |
|     		knownPaths : [ {
 | |
|     			text : 'Install',
 | |
|     			image : 'desktop.png',
 | |
|     			path : '/install'
 | |
|     		} ],
 | |
|     		imageUrl : 'images/serverbrowser/',
 | |
|     		systemImageUrl : 'images/serverbrowser/',
 | |
|     		handlerUrl : 'lib/getpath.php',
 | |
|     		title : 'Browse',
 | |
|     		requestMethod : 'POST',
 | |
|     		width : '500',
 | |
|     		height : '300',
 | |
|     		basePath : '/install' // Limit user to only install directory
 | |
|     	});
 | |
|     	allSwScrDirectory.append(allSWSrcDirBrowse);
 | |
|     	allSwScrDirectory.hide();
 | |
|     	optionsList.append(allSwScrDirectory);
 | |
| 
 | |
|     	// Show source directory when checked
 | |
|     	updateAllChkBox.bind('click', function(event) {
 | |
|     		if ($(this).is(':checked')) {
 | |
|     			allSwScrDirectory.show();
 | |
|     		} else {
 | |
|     			allSwScrDirectory.hide();
 | |
|     		}
 | |
|     	});
 | |
| 	}
 | |
| 	
 | |
| 	// Create update software checkbox
 | |
| 	var updateOption = $('<li></li>');
 | |
| 	var updateChkBox = $('<input type="checkbox" id="S" name="S"/>');
 | |
| 	optionsList.append(updateOption);
 | |
| 	updateOption.append(updateChkBox);
 | |
| 	updateOption.append('Update existing software');
 | |
| 		
 | |
| 	// Create source directory input
 | |
| 	var scrDirectory = $('<li><label for="srcDirectory" style="vertical-align: middle">Source directory:</label><input type="text" id="srcDirectory" name="srcDirectory" title="You must give the source directory containing the updated software packages"/></li>');
 | |
| 	// Browse server directory and files
 | |
| 	var srcDirBrowse = createButton('Browse');
 | |
| 	srcDirBrowse.serverBrowser({
 | |
| 		onSelect : function(path) {
 | |
| 			$('#srcDirectory').val(path);
 | |
| 		},
 | |
| 		onLoad : function() {
 | |
| 			return $('#srcDirectory').val();
 | |
| 		},
 | |
| 		knownExt : [ 'exe', 'js', 'txt' ],
 | |
| 		knownPaths : [ {
 | |
| 			text : 'Install',
 | |
| 			image : 'desktop.png',
 | |
| 			path : '/install'
 | |
| 		} ],
 | |
| 		imageUrl : 'images/serverbrowser/',
 | |
| 		systemImageUrl : 'images/serverbrowser/',
 | |
| 		handlerUrl : 'lib/getpath.php',
 | |
| 		title : 'Browse',
 | |
| 		requestMethod : 'POST',
 | |
| 		width : '500',
 | |
| 		height : '300',
 | |
| 		basePath : '/install' // Limit user to only install directory
 | |
| 	});
 | |
| 	scrDirectory.append(srcDirBrowse);
 | |
| 	scrDirectory.hide();
 | |
| 	optionsList.append(scrDirectory);
 | |
| 	
 | |
| 	// Create other packages input
 | |
| 	var otherPkgs = $('<li><label for="otherpkgs" style="vertical-align: middle">otherpkgs:</label><input type="text" id="otherpkgs" name="otherpkgs"/></li>');
 | |
| 	otherPkgs.hide();
 | |
| 	optionsList.append(otherPkgs);
 | |
| 	
 | |
| 	// Create RPM flags input (only AIX)
 | |
| 	var aixRpmFlags = $('<li><label for="rpm_flags">rpm_flags:</label><input type="text" name="rpm_flags"/></li>');
 | |
| 	aixRpmFlags.hide();
 | |
| 	optionsList.append(aixRpmFlags);
 | |
| 	
 | |
| 	// Create installp flags input (only AIX)
 | |
| 	var aixInstallPFlags = $('<li><label for="installp_flags">installp_flags:</label><input type="text" name="installp_flags"/></li>');
 | |
| 	aixInstallPFlags.hide();
 | |
| 	optionsList.append(aixInstallPFlags);
 | |
| 	
 | |
| 	// Create emgr flags input (only AIX)
 | |
| 	var aixEmgrFlags = $('<li><label for="emgr_flags">emgr_flags:</label><input type="text" name="emgr_flags"/></li>');
 | |
| 	aixEmgrFlags.hide();
 | |
| 	optionsList.append(aixEmgrFlags);
 | |
| 	
 | |
| 	// Show flags when checked
 | |
| 	updateChkBox.bind('click', function(event) {
 | |
| 		if ($(this).is(':checked')) {
 | |
| 			scrDirectory.show();
 | |
| 			otherPkgs.show();
 | |
| 			if (osHash['AIX']) {
 | |
|     			aixRpmFlags.show();
 | |
|     			aixInstallPFlags.show();
 | |
|     			aixEmgrFlags.show();
 | |
| 			}
 | |
| 		} else {
 | |
| 			scrDirectory.hide();
 | |
| 			otherPkgs.hide();
 | |
| 			if (osHash['AIX']) {
 | |
|     			aixRpmFlags.hide();
 | |
|     			aixInstallPFlags.hide();
 | |
|     			aixEmgrFlags.hide();
 | |
| 			}
 | |
| 		}
 | |
| 	});
 | |
| 	
 | |
| 	// Create postscripts input
 | |
| 	var postOption = $('<li></li>');
 | |
| 	var postChkBox = $('<input type="checkbox" id="P" name="P"/>');
 | |
| 	optionsList.append(postOption);
 | |
| 	postOption.append(postChkBox);
 | |
| 	postOption.append('Run postscripts');
 | |
| 	var postscripts = $('<li><label for="postscripts" style="vertical-align: middle">Postscripts:</label><input type="text" id="postscripts" name="postscripts" title="You must give the postscript(s) to run"/></li>');
 | |
| 	postscripts.hide();
 | |
| 	optionsList.append(postscripts);
 | |
| 	
 | |
| 	// Show alternate source directory when checked
 | |
| 	postChkBox.bind('click', function(event) {
 | |
| 		if ($(this).is(':checked')) {
 | |
| 			postscripts.show();
 | |
| 		} else {
 | |
| 			postscripts.hide();
 | |
| 		}
 | |
| 	});
 | |
| 	optionsList.append('<li><input type="checkbox" id="F" name="F"/>Distribute and synchronize files</li>');
 | |
| 	optionsList.append('<li><input type="checkbox" id="k" name="k"/>Update the ssh keys and host keys for the service nodes and compute nodes</li>');
 | |
| 	
 | |
| 	// Create update OS checkbox
 | |
| 	if (!osHash['AIX']) {
 | |
| 		var osOption = $('<li></li>');
 | |
|     	var osChkBox = $('<input type="checkbox" id="o" name="o"/>');
 | |
|     	optionsList.append(osOption);
 | |
|     	osOption.append(osChkBox);
 | |
|     	osOption.append('Update the operating system');
 | |
|     	
 | |
|     	var os = $('<li></li>').hide();
 | |
|     	var osLabel = $('<label for="os">Operating system:</label>');
 | |
|     	var osInput = $('<input type="text" name="os" title="You must give the operating system to upgrade to, e.g. rhel5.5"/>');
 | |
|     	osInput.one('focus', function(){
 | |
|     		var tmp = $.cookie('osvers');
 | |
|     		if (tmp) {
 | |
|     			// Turn on auto complete
 | |
|     			$(this).autocomplete({
 | |
|     				source: tmp.split(',')
 | |
|     			});
 | |
|     		}
 | |
|     	});
 | |
|     	os.append(osLabel);
 | |
|     	os.append(osInput);
 | |
|     	optionsList.append(os);
 | |
|     	
 | |
|     	// Show alternate source directory when checked
 | |
|     	osChkBox.bind('click', function(event) {
 | |
|     		if ($(this).is(':checked')) {
 | |
|     			os.show();
 | |
|     		} else {
 | |
|     			os.hide();
 | |
|     		}
 | |
|     	});
 | |
| 	}
 | |
| 	
 | |
| 	// Generate tooltips
 | |
| 	updatenodeForm.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();
 | |
| 		var ready = true;
 | |
| 		
 | |
| 		// Generate arguments
 | |
| 		var chkBoxes = $("#" + newTabId + " input[type='checkbox']:checked");
 | |
| 		var optionsStr = '';
 | |
| 		var option;
 | |
| 		for ( var i = 0; i < chkBoxes.length; i++) {
 | |
| 			option = chkBoxes.eq(i).attr('name');
 | |
| 			optionsStr += '-' + option;
 | |
| 			
 | |
| 			// If update all software is checked
 | |
| 			if (option == 'S') {
 | |
| 				var srcDir = $('#' + newTabId + ' input[name=allSwSrcDirectory]').val();
 | |
| 				if (srcDir) {
 | |
| 					optionsStr += ';-d ' + srcDir;
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 			// If update software is checked
 | |
| 			if (option == 'S') {
 | |
| 				// Get source directory
 | |
| 				var srcDirectory = $('#' + newTabId + ' input[name=srcDirectory]').val();
 | |
| 				if (srcDirectory) {
 | |
| 					optionsStr += ';-d;' + srcDirectory;
 | |
| 				}
 | |
| 				
 | |
| 				// Get otherpkgs
 | |
| 				var otherpkgs = $('#' + newTabId + ' input[name=otherpkgs]').val();
 | |
| 				if (otherpkgs) {
 | |
| 					optionsStr += ';otherpkgs=' + otherpkgs;
 | |
| 				}
 | |
| 				
 | |
| 				// Get rpm_flags
 | |
| 				var rpm_flags = $('#' + newTabId + ' input[name=rpm_flags]').val();
 | |
| 				if (rpm_flags) {
 | |
| 					optionsStr += ';rpm_flags=' + rpm_flags;
 | |
| 				}
 | |
| 				
 | |
| 				// Get installp_flags
 | |
| 				var installp_flags = $('#' + newTabId + ' input[name=installp_flags]').val();
 | |
| 				if (installp_flags) {
 | |
| 					optionsStr += ';installp_flags=' + installp_flags;
 | |
| 				}
 | |
| 				
 | |
| 				// Get emgr_flags
 | |
| 				var emgr_flags = $('#' + newTabId + ' input[name=emgr_flags]').val();
 | |
| 				if (emgr_flags) {
 | |
| 					optionsStr += ';emgr_flags=' + emgr_flags;
 | |
| 				}
 | |
| 			}
 | |
| 			
 | |
| 			// If postscripts is checked
 | |
| 			if (option == 'P') {
 | |
| 				// Get postscripts
 | |
| 				optionsStr += ';' + $('#' + newTabId + ' input[name=postscripts]').val();
 | |
| 			}
 | |
| 			
 | |
| 			// If operating system is checked
 | |
| 			if (option == 'o') {
 | |
| 				// Get the OS
 | |
| 				optionsStr += ';' + $('#' + newTabId + ' input[name=os]').val();
 | |
| 			}
 | |
| 			
 | |
| 			// Append ; to end of string
 | |
| 			if (i < (chkBoxes.length - 1)) {
 | |
| 				optionsStr += ';';
 | |
| 			}
 | |
| 		}
 | |
| 		
 | |
| 		// If no inputs are empty
 | |
| 		if (ready) {
 | |
| 			// Get nodes
 | |
| 			var tgts = $('#' + newTabId + ' input[name=target]').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 : 'updatenode',
 | |
| 					tgt : tgts,
 | |
| 					args : optionsStr,
 | |
| 					msg : 'out=' + statBarId + ';cmd=updatenode;tgt=' + tgts
 | |
| 				},
 | |
| 
 | |
| 				success : updateStatusBar
 | |
| 			});
 | |
| 
 | |
| 			// Show status bar
 | |
| 			statusBar.show();
 | |
| 		} else {
 | |
| 			// Show warning message
 | |
| 			var warn = createWarnBar('You are missing some values');
 | |
| 			warn.prependTo($(this).parent().parent());
 | |
| 		}
 | |
| 	});
 | |
| 	updatenodeForm.append(okBtn);
 | |
| 
 | |
| 	// Append to discover tab
 | |
| 	tab.add(newTabId, 'Update', updatenodeForm, true);
 | |
| 
 | |
| 	// Select new tab
 | |
| 	tab.select(newTabId);
 | |
| } |