|
|
|
@ -140,7 +140,7 @@ function loadImages(data) {
|
|
|
|
|
// Copy CD into install directory
|
|
|
|
|
var copyCDLnk = $('<a>Copy CD</a>');
|
|
|
|
|
copyCDLnk.click(function() {
|
|
|
|
|
loadCopyCdPage();
|
|
|
|
|
openCopyCdDialog();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Generate stateless or statelite image
|
|
|
|
@ -155,7 +155,7 @@ function loadImages(data) {
|
|
|
|
|
var tgtImages = getNodesChecked(imgTableId).split(',');
|
|
|
|
|
if (tgtImages) {
|
|
|
|
|
for (var i in tgtImages) {
|
|
|
|
|
loadEditImagePage(tgtImages[i]);
|
|
|
|
|
openEditImagePage(tgtImages[i]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
@ -163,7 +163,7 @@ function loadImages(data) {
|
|
|
|
|
// Add a row
|
|
|
|
|
var addLnk = $('<a>Add</a>');
|
|
|
|
|
addLnk.click(function() {
|
|
|
|
|
loadAddImageDialog();
|
|
|
|
|
openAddImageDialog();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Remove a row
|
|
|
|
@ -354,10 +354,8 @@ function confirmImageDeleteDialog(images) {
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Open a dialog to add an image
|
|
|
|
|
*
|
|
|
|
|
* @return Nothing
|
|
|
|
|
*/
|
|
|
|
|
function loadAddImageDialog() {
|
|
|
|
|
function openAddImageDialog() {
|
|
|
|
|
// Create dialog to add image
|
|
|
|
|
var dialogId = 'addImage';
|
|
|
|
|
var addImageForm = $('<div id="' + dialogId + '" class="form"></div>');
|
|
|
|
@ -383,6 +381,30 @@ function loadAddImageDialog() {
|
|
|
|
|
provisionMethod.append(provisionSelect);
|
|
|
|
|
|
|
|
|
|
// Create inputs for optional attributes
|
|
|
|
|
var exList = $('<div><label>Exclusion list:</label></div>');
|
|
|
|
|
var exListInput = $('<input type="text" name="exlist"/>');
|
|
|
|
|
exList.append(exListInput);
|
|
|
|
|
exListInput.serverBrowser({
|
|
|
|
|
onSelect : function(path) {
|
|
|
|
|
$('#addImage input[name="exlist"]').val(path);
|
|
|
|
|
},
|
|
|
|
|
onLoad : function() {
|
|
|
|
|
return $('#addImage input[name="exlist"]').val();
|
|
|
|
|
},
|
|
|
|
|
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
|
|
|
|
|
});
|
|
|
|
|
var otherpkgDirectory = $('<div><label>Other package directory:</label></div>');
|
|
|
|
|
var otherpkgDirectoryInput = $('<input type="text" name="otherpkgdir"/>');
|
|
|
|
|
otherpkgDirectory.append(otherpkgDirectoryInput);
|
|
|
|
@ -455,6 +477,30 @@ function loadAddImageDialog() {
|
|
|
|
|
height : '300',
|
|
|
|
|
basePath : '/install' // Limit user to only install directory
|
|
|
|
|
});
|
|
|
|
|
var postInstall = $('<div><label>Post install script:</label></div>');
|
|
|
|
|
var postInstallInput = $('<input type="text" name="postinstall"/>');
|
|
|
|
|
postInstall.append(postInstallInput);
|
|
|
|
|
postInstallInput.serverBrowser({
|
|
|
|
|
onSelect : function(path) {
|
|
|
|
|
$('#addImage input[name="postinstall"]').val(path);
|
|
|
|
|
},
|
|
|
|
|
onLoad : function() {
|
|
|
|
|
return $('#addImage input[name="postinstall"]').val();
|
|
|
|
|
},
|
|
|
|
|
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
|
|
|
|
|
});
|
|
|
|
|
var template = $('<div><label>Template:</label></div>');
|
|
|
|
|
var templateInput = $('<input type="text" name="template"/>');
|
|
|
|
|
template.append(templateInput);
|
|
|
|
@ -481,63 +527,81 @@ function loadAddImageDialog() {
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
addImageForm.append(imageName, imageType, architecture, osName, osVersion, profile, provisionMethod,
|
|
|
|
|
otherpkgDirectory, packageDirectory, packageList, template);
|
|
|
|
|
exList, otherpkgDirectory, packageDirectory, packageList, postInstall, template);
|
|
|
|
|
|
|
|
|
|
// Open dialog to add image
|
|
|
|
|
addImageForm.dialog({
|
|
|
|
|
title:'Add image',
|
|
|
|
|
modal: true,
|
|
|
|
|
width: 500,
|
|
|
|
|
width: 400,
|
|
|
|
|
buttons: {
|
|
|
|
|
"Ok": function(){
|
|
|
|
|
// Remove any warning messages
|
|
|
|
|
$(this).find('.ui-state-error').remove();
|
|
|
|
|
|
|
|
|
|
// Get image attributes
|
|
|
|
|
var imageType = $(this).find('input[name="imagetype"]').val();
|
|
|
|
|
var architecture = $(this).find('input[name="osarch"]').val();
|
|
|
|
|
var osName = $(this).find('input[name="osname"]').val();
|
|
|
|
|
var osVersion = $(this).find('input[name="osvers"]').val();
|
|
|
|
|
var profile = $(this).find('input[name="profile"]').val();
|
|
|
|
|
var provisionMethod = $(this).find('select[name="provmethod"]').val();
|
|
|
|
|
var imageType = $(this).find('input[name="imagetype"]');
|
|
|
|
|
var architecture = $(this).find('input[name="osarch"]');
|
|
|
|
|
var osName = $(this).find('input[name="osname"]');
|
|
|
|
|
var osVersion = $(this).find('input[name="osvers"]');
|
|
|
|
|
var profile = $(this).find('input[name="profile"]');
|
|
|
|
|
var provisionMethod = $(this).find('select[name="provmethod"]');
|
|
|
|
|
|
|
|
|
|
// Get optional image attributes
|
|
|
|
|
var otherpkgDirectory = $(this).find('input[name="otherpkgdir"]').val();
|
|
|
|
|
var pkgDirectory = $(this).find('input[name="pkgdir"]').val();
|
|
|
|
|
var pkgList = $(this).find('input[name="pkglist"]').val();
|
|
|
|
|
var template = $(this).find('input[name="template"]').val();
|
|
|
|
|
var exList = $(this).find('input[name="exlist"]');
|
|
|
|
|
var otherpkgDirectory = $(this).find('input[name="otherpkgdir"]');
|
|
|
|
|
var pkgDirectory = $(this).find('input[name="pkgdir"]');
|
|
|
|
|
var pkgList = $(this).find('input[name="pkglist"]');
|
|
|
|
|
var postInstall = $(this).find('input[name="postinstall"]');
|
|
|
|
|
var template = $(this).find('input[name="template"]');
|
|
|
|
|
|
|
|
|
|
// Override image name
|
|
|
|
|
$(this).find('input[name="imagename"]').val(osVersion + '-' + architecture + '-' + provisionMethod + '-' + profile);
|
|
|
|
|
var imageName = $(this).find('input[name="imagename"]').val();
|
|
|
|
|
// Check that image attributes are provided before continuing
|
|
|
|
|
var ready = 1;
|
|
|
|
|
var inputs = new Array(imageType, architecture, osName, osVersion, profile, provisionMethod);
|
|
|
|
|
for (var i in inputs) {
|
|
|
|
|
if (!inputs[i].val()) {
|
|
|
|
|
inputs[i].css('border-color', 'red');
|
|
|
|
|
ready = 0;
|
|
|
|
|
} else
|
|
|
|
|
inputs[i].css('border-color', '');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// If inputs are not complete, show warning message
|
|
|
|
|
if (!imageType || !architecture || !osName || !osVersion || !profile || !provisionMethod) {
|
|
|
|
|
if (!ready) {
|
|
|
|
|
var warn = createWarnBar('Please provide a value for each missing field.');
|
|
|
|
|
warn.prependTo($(this));
|
|
|
|
|
} else {
|
|
|
|
|
// Override image name
|
|
|
|
|
$(this).find('input[name="imagename"]').val(osVersion.val() + '-' + architecture.val() + '-' + provisionMethod.val() + '-' + profile.val());
|
|
|
|
|
var imageName = $(this).find('input[name="imagename"]');
|
|
|
|
|
|
|
|
|
|
// Change dialog buttons
|
|
|
|
|
$(this).dialog('option', 'buttons', {
|
|
|
|
|
'Close': function() {$(this).dialog("close");}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Create arguments to send via AJAX
|
|
|
|
|
var args = '-t;osimage;-o;' + imageName + ';' +
|
|
|
|
|
'imagetype=' + imageType + ';' +
|
|
|
|
|
'osarch=' + architecture + ';' +
|
|
|
|
|
'osname=' + osName + ';' +
|
|
|
|
|
'osvers=' + osVersion + ';' +
|
|
|
|
|
'profile=' + profile + ';' +
|
|
|
|
|
'provmethod=' + provisionMethod;
|
|
|
|
|
var args = '-t;osimage;-o;' + imageName.val() + ';' +
|
|
|
|
|
'imagetype=' + imageType.val() + ';' +
|
|
|
|
|
'osarch=' + architecture.val() + ';' +
|
|
|
|
|
'osname=' + osName.val() + ';' +
|
|
|
|
|
'osvers=' + osVersion.val() + ';' +
|
|
|
|
|
'profile=' + profile.val() + ';' +
|
|
|
|
|
'provmethod=' + provisionMethod.val();
|
|
|
|
|
|
|
|
|
|
if (otherpkgDirectory)
|
|
|
|
|
args += ';otherpkgdir=' + otherpkgDirectory;
|
|
|
|
|
if (pkgDirectory)
|
|
|
|
|
args += ';pkgdir=' + pkgDirectory;
|
|
|
|
|
if (pkgList)
|
|
|
|
|
args += ';pkglist=' + pkgList;
|
|
|
|
|
if (template)
|
|
|
|
|
args += ';template=' + template;
|
|
|
|
|
// Get optional attributes
|
|
|
|
|
if (exList.val())
|
|
|
|
|
args += ';exlist=' + exList.val();
|
|
|
|
|
if (otherpkgDirectory.val())
|
|
|
|
|
args += ';otherpkgdir=' + otherpkgDirectory.val();
|
|
|
|
|
if (pkgDirectory.val())
|
|
|
|
|
args += ';pkgdir=' + pkgDirectory.val();
|
|
|
|
|
if (pkgList.val())
|
|
|
|
|
args += ';pkglist=' + pkgList.val();
|
|
|
|
|
if (postInstall.val())
|
|
|
|
|
args += ';postinstall=' + postInstall.val();
|
|
|
|
|
if (template.val())
|
|
|
|
|
args += ';template=' + template.val();
|
|
|
|
|
|
|
|
|
|
// Add image to xCAT
|
|
|
|
|
$.ajax( {
|
|
|
|
@ -571,13 +635,23 @@ function loadAddImageDialog() {
|
|
|
|
|
function updateImageDialog(data) {
|
|
|
|
|
var dialogId = data.msg;
|
|
|
|
|
var infoMsg;
|
|
|
|
|
|
|
|
|
|
// Delete loader if one does exist
|
|
|
|
|
$('.ui-dialog #' + dialogId + ' img[src="images/loader.gif"]').remove();
|
|
|
|
|
|
|
|
|
|
// Create info message
|
|
|
|
|
if (jQuery.isArray(data.rsp)) {
|
|
|
|
|
infoMsg = '';
|
|
|
|
|
for (var i in data.rsp) {
|
|
|
|
|
|
|
|
|
|
// If the data returned is more than 10 lines, get only the last line
|
|
|
|
|
var i, start;
|
|
|
|
|
if (data.rsp.length > 10)
|
|
|
|
|
start = data.rsp.length - 1;
|
|
|
|
|
else
|
|
|
|
|
start = 0;
|
|
|
|
|
|
|
|
|
|
for (i = start; i < data.rsp.length; i++)
|
|
|
|
|
infoMsg += data.rsp[i] + '</br>';
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
infoMsg = data.rsp;
|
|
|
|
|
}
|
|
|
|
@ -956,7 +1030,7 @@ function hpcShow() {
|
|
|
|
|
* Target image to set properties
|
|
|
|
|
* @return Nothing
|
|
|
|
|
*/
|
|
|
|
|
function loadEditImagePage(tgtImage) {
|
|
|
|
|
function openEditImagePage(tgtImage) {
|
|
|
|
|
// Get nodes tab
|
|
|
|
|
var tab = getProvisionTab();
|
|
|
|
|
|
|
|
|
@ -1223,31 +1297,11 @@ function loadEditImagePage(tgtImage) {
|
|
|
|
|
*
|
|
|
|
|
* @return Nothing
|
|
|
|
|
*/
|
|
|
|
|
function loadCopyCdPage() {
|
|
|
|
|
// Get provision tab
|
|
|
|
|
var tab = getProvisionTab();
|
|
|
|
|
|
|
|
|
|
// Generate new tab ID
|
|
|
|
|
var inst = 0;
|
|
|
|
|
newTabId = 'copyLinuxTab' + inst;
|
|
|
|
|
while ($('#' + newTabId).length) {
|
|
|
|
|
// If one already exists, generate another one
|
|
|
|
|
inst = inst + 1;
|
|
|
|
|
newTabId = 'copyLinuxTab' + inst;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function openCopyCdDialog() {
|
|
|
|
|
// Create copy Linux form
|
|
|
|
|
var copyLinuxForm = $('<div class="form"></div>');
|
|
|
|
|
|
|
|
|
|
// Create status bar, hide on load
|
|
|
|
|
var statBarId = 'copyLinuxStatusBar' + inst;
|
|
|
|
|
var statBar = createStatusBar(statBarId).hide();
|
|
|
|
|
copyLinuxForm.append(statBar);
|
|
|
|
|
|
|
|
|
|
// Create loader
|
|
|
|
|
var loader = createLoader('');
|
|
|
|
|
statBar.find('div').append(loader);
|
|
|
|
|
|
|
|
|
|
var dialogId = 'imageCopyCd';
|
|
|
|
|
var copyLinuxForm = $('<div id="' + dialogId + '" class="form"></div>');
|
|
|
|
|
|
|
|
|
|
// Create info bar
|
|
|
|
|
var infoBar = createInfoBar('Copy Linux distributions and service levels from CDs or DVDs to the install directory.');
|
|
|
|
|
copyLinuxForm.append(infoBar);
|
|
|
|
@ -1261,26 +1315,10 @@ function loadCopyCdPage() {
|
|
|
|
|
copyLinuxForm.append(iso);
|
|
|
|
|
|
|
|
|
|
// Create architecture input
|
|
|
|
|
copyLinuxForm.append('<div><label>Architecture:</label><input type="text" id="arch" name="arch" title="The architecture of the Linux distro on the ISO/DVD, e.g. rhel5.3, centos5.1, fedora9."/></div>');
|
|
|
|
|
copyLinuxForm.append('<div><label>Architecture:</label><input type="text" id="arch" name="arch"/></div>');
|
|
|
|
|
// Create distribution input
|
|
|
|
|
copyLinuxForm.append('<div><label>Distribution:</label><input type="text" id="distro" name="distro" title="The Linux distro name and version that the ISO/DVD contains, e.g. x86, s390x, ppc64."/></div>');
|
|
|
|
|
|
|
|
|
|
// Generate tooltips
|
|
|
|
|
copyLinuxForm.find('div input[title]').tooltip({
|
|
|
|
|
position: "center right",
|
|
|
|
|
offset: [-2, 10],
|
|
|
|
|
effect: "fade",
|
|
|
|
|
opacity: 0.7,
|
|
|
|
|
delay: 500,
|
|
|
|
|
predelay: 800,
|
|
|
|
|
events: {
|
|
|
|
|
def: "mouseover,mouseout",
|
|
|
|
|
input: "mouseover,mouseout",
|
|
|
|
|
widget: "focus mouseover,blur mouseout",
|
|
|
|
|
tooltip: "mouseover,mouseout"
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
copyLinuxForm.append('<div><label>Distribution:</label><input type="text" id="distro" name="distro"/></div>');
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Browse
|
|
|
|
|
*/
|
|
|
|
@ -1289,10 +1327,10 @@ function loadCopyCdPage() {
|
|
|
|
|
// Browse server directory and files
|
|
|
|
|
browseBtn.serverBrowser({
|
|
|
|
|
onSelect : function(path) {
|
|
|
|
|
$('#iso').val(path);
|
|
|
|
|
$('#imageCopyCd #iso').val(path);
|
|
|
|
|
},
|
|
|
|
|
onLoad : function() {
|
|
|
|
|
return $('#iso').val();
|
|
|
|
|
return $('#imageCopyCd #iso').val();
|
|
|
|
|
},
|
|
|
|
|
knownExt : [ 'exe', 'js', 'txt' ],
|
|
|
|
|
knownPaths : [ {
|
|
|
|
@ -1310,90 +1348,49 @@ function loadCopyCdPage() {
|
|
|
|
|
basePath : '/install' // Limit user to only install directory
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Copy
|
|
|
|
|
*/
|
|
|
|
|
var copyBtn = createButton('Copy');
|
|
|
|
|
copyLinuxForm.append(copyBtn);
|
|
|
|
|
copyBtn.bind('click', function(event) {
|
|
|
|
|
// Disable all inputs and buttons
|
|
|
|
|
$('#' + newTabId + ' input').attr('disabled', 'true');
|
|
|
|
|
$('#' + newTabId + ' button').attr('disabled', 'true');
|
|
|
|
|
// Show status bar and loader
|
|
|
|
|
$('#' + statBarId).show();
|
|
|
|
|
$('#' + statBarId).find('img').show();
|
|
|
|
|
|
|
|
|
|
// Get Linux ISO
|
|
|
|
|
var iso = $('#' + newTabId + ' input[name=iso]').val();
|
|
|
|
|
// Get architecture
|
|
|
|
|
var arch = $('#' + newTabId + ' input[name=arch]').val();
|
|
|
|
|
// Get distribution
|
|
|
|
|
var distro = $('#' + newTabId + ' input[name=distro]').val();
|
|
|
|
|
// Open dialog to copy CD
|
|
|
|
|
copyLinuxForm.dialog({
|
|
|
|
|
title:'Copy CD',
|
|
|
|
|
modal: true,
|
|
|
|
|
width: 600,
|
|
|
|
|
buttons: {
|
|
|
|
|
"Copy": function() {
|
|
|
|
|
// Show loader
|
|
|
|
|
$('.ui-dialog #imageCopyCd').append(createLoader(''));
|
|
|
|
|
|
|
|
|
|
// Change dialog buttons
|
|
|
|
|
$(this).dialog('option', 'buttons', {
|
|
|
|
|
'Close': function() {$(this).dialog("close");}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Get image attributes
|
|
|
|
|
var iso = $(this).find('input[name="iso"]');
|
|
|
|
|
var arch = $(this).find('input[name="arch"]');
|
|
|
|
|
var distro = $(this).find('input[name="distro"]');
|
|
|
|
|
|
|
|
|
|
// Send ajax request to copy ISO
|
|
|
|
|
$.ajax( {
|
|
|
|
|
url : 'lib/cmd.php',
|
|
|
|
|
dataType : 'json',
|
|
|
|
|
data : {
|
|
|
|
|
cmd : 'copycds',
|
|
|
|
|
tgt : '',
|
|
|
|
|
args : '-n;' + distro + ';-a;' + arch + ';' + iso,
|
|
|
|
|
msg : 'out=' + statBarId
|
|
|
|
|
// Send ajax request to copy ISO
|
|
|
|
|
$.ajax({
|
|
|
|
|
url : 'lib/cmd.php',
|
|
|
|
|
dataType : 'json',
|
|
|
|
|
data : {
|
|
|
|
|
cmd : 'copycds',
|
|
|
|
|
tgt : '',
|
|
|
|
|
args : '-n;' + distro.val() + ';-a;' + arch.val() + ';' + iso.val(),
|
|
|
|
|
msg : dialogId
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
success : updateImageDialog
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Show output
|
|
|
|
|
*
|
|
|
|
|
* @param data
|
|
|
|
|
* Data returned from HTTP request
|
|
|
|
|
* @return Nothing
|
|
|
|
|
*/
|
|
|
|
|
success : function(data) {
|
|
|
|
|
// Get output
|
|
|
|
|
var out = data.rsp;
|
|
|
|
|
// Get status bar ID
|
|
|
|
|
var statBarId = data.msg.replace('out=', '');
|
|
|
|
|
// Get tab ID
|
|
|
|
|
var tabId = statBarId.replace('copyLinuxStatusBar', 'copyLinuxTab');
|
|
|
|
|
|
|
|
|
|
// Go through output and append to paragraph
|
|
|
|
|
var prg = $('<pre></pre>');
|
|
|
|
|
for (var i in out) {
|
|
|
|
|
if (out[i].length > 6) {
|
|
|
|
|
prg.append(out[i] + '<br/>');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
$('#' + statBarId).find('div').append(prg);
|
|
|
|
|
|
|
|
|
|
// Hide loader
|
|
|
|
|
$('#' + statBarId).find('img').hide();
|
|
|
|
|
// Enable inputs and buttons
|
|
|
|
|
$('#' + tabId + ' input').attr('disabled', '');
|
|
|
|
|
$('#' + tabId + ' button').attr('disabled', '');
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
"Cancel": function() {
|
|
|
|
|
$(this).dialog( "close" );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Cancel
|
|
|
|
|
*/
|
|
|
|
|
var cancelBtn = createButton('Cancel');
|
|
|
|
|
copyLinuxForm.append(cancelBtn);
|
|
|
|
|
cancelBtn.bind('click', function(event) {
|
|
|
|
|
// Close the tab
|
|
|
|
|
tab.remove($(this).parent().parent().attr('id'));
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
tab.add(newTabId, 'Copy', copyLinuxForm, true);
|
|
|
|
|
tab.select(newTabId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* use users' input or select to create image
|
|
|
|
|
*
|
|
|
|
|
* @param
|
|
|
|
|
*
|
|
|
|
|
* @return Nothing
|
|
|
|
|
*/
|
|
|
|
|
function createImage() {
|
|
|
|
|
var osvers = $("#createImageTab #osvers").val();
|
|
|
|
|