2
0
mirror of https://github.com/xcat2/xcat-core.git synced 2025-05-30 01:26:38 +00:00

bug 1155 Initial merge of UI code; to test the process

Change-Id: I4c594869f8919c8367174ab7610327f7f3af4e59
This commit is contained in:
Chuck Brazie 2016-06-29 13:36:12 -04:00
parent 73598b8963
commit 340524b30f
19 changed files with 18778 additions and 16599 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -6,8 +6,8 @@ var topPriority = 0;
var tableId = 'usersTable';
/**
* Get user access table
*
* Get user access table
*
* @returns User access table
*/
function getUsersTable(){
@ -16,7 +16,7 @@ function getUsersTable(){
/**
* Set user access table
*
*
* @param table User access table
*/
function setUsersTable(table){
@ -44,43 +44,43 @@ function loadUserPage() {
/**
* Load user table
*
* @param data Data returned from HTTP request
*
* @param data Data returned from HTTP request
*/
function loadUserTable(data){
var tabId = 'usersTab';
$('#' + tabId).empty();
// Set padding for page
$('#' + tabId).css('padding', '20px 60px');
// Create info bar
var info = $('#' + tabId).find('.ui-state-highlight');
// If there is no info bar
if (!info.length) {
var infoBar = createInfoBar('Configure access given to users.');
// Create users page
var userPg = $('<div class="form"></div>');
$('#' + tabId).append(infoBar, userPg);
}
if (data.rsp) {
// Create a datatable if one does not exist
// Create a datatable if one does not exist
var table = new DataTable(tableId);
var headers = new Array('Priority', 'Name', 'Host', 'Commands', 'Noderange', 'Parameters', 'Time', 'Rule', 'Comments', 'Disable');
// Add column for the checkbox
headers.unshift('<input type="checkbox" onclick="selectAllCheckbox(event, $(this))">');
table.init(headers);
headers.shift();
// Append datatable to panel
$('#' + tabId).append(table.object());
topPriority = 0;
// Add table rows
// Start with the 2nd row (1st row is the headers)
for (var i = 1; i < data.rsp.length; i++) {
@ -104,7 +104,7 @@ function loadUserTable(data){
// Replace quote
cols[j] = cols[j].replace(new RegExp('"', 'g'), '');
}
// Set the highest priority
priority = cols[0];
if (priority > topPriority)
@ -116,9 +116,9 @@ function loadUserTable(data){
// Add row
table.add(cols);
}
// Turn table into datatable
var dTable = $('#' + tableId).dataTable({
var dTable = $('#' + tableId).dataTable({
'iDisplayLength': 50,
'bLengthChange': false,
"bScrollCollapse": true,
@ -134,15 +134,15 @@ function loadUserTable(data){
});
setUsersTable(dTable); // Cache user access table
}
// Create action bar
var actionBar = $('<div class="actionBar"></div>').css("width", "450px");
var createLnk = $('<a>Create</a>');
createLnk.click(function() {
openCreateUserDialog("");
});
var editLnk = $('<a>Edit</a>');
editLnk.click(function() {
// Should only allow 1 user to be edited at a time
@ -151,7 +151,7 @@ function loadUserTable(data){
openCreateUserDialog(users[i]);
}
});
var deleteLnk = $('<a>Delete</a>');
deleteLnk.click(function() {
// Find the user name from datatable
@ -166,85 +166,85 @@ function loadUserTable(data){
}
}
}
if (usersList) {
openDeleteUserDialog(usersList);
}
});
var refreshLnk = $('<a>Refresh</a>');
refreshLnk.click(function() {
loadUserPage();
});
// Create an action menu
var actionsMenu = createMenu([refreshLnk, createLnk, editLnk, deleteLnk]);
actionsMenu.superfish();
actionsMenu.css('display', 'inline-block');
actionBar.append(actionsMenu);
// Set correct theme for action menu
actionsMenu.find('li').hover(function() {
setMenu2Theme($(this));
}, function() {
setMenu2Normal($(this));
});
// Create a division to hold actions menu
var menuDiv = $('<div id="' + tableId + '_menuDiv" class="menuDiv"></div>');
$('#' + tableId + '_wrapper').prepend(menuDiv);
menuDiv.append(actionBar);
menuDiv.append(actionBar);
$('#' + tableId + '_filter').appendTo(menuDiv);
}
/**
* Open create user dialog
*
*
* @param data User data (only during edit)
*/
function openCreateUserDialog(data) {
var dialogId = 'createUser';
// Generate the user priority
var priority = parseFloat(topPriority) + 0.01;
priority = priority.toPrecision(3);
// Create form to create user
var createUserForm = $('<div id="' + dialogId + '" class="form"></div>');
// Create info bar
var info = createInfoBar('Create a user and configure access to xCAT.');
var userFS = $('<fieldset></fieldset>');
var userLegend = $('<legend>User</legend>');
userFS.append(userLegend);
var userAttr = $('<div style="display: inline-table; vertical-align: middle;"></div>');
userFS.append($('<div style="display: inline-table; vertical-align: middle;"><img src="images/nodes/users.png"></img></div>'));
userFS.append(userAttr);
var optionFS = $('<fieldset></fieldset>');
var optionLegend = $('<legend>Options</legend>');
optionFS.append(optionLegend);
var optionAttr = $('<div style="display: inline-table; vertical-align: middle;"></div>');
optionFS.append($('<div style="display: inline-table; vertical-align: middle;"><img src="images/provision/setting.png" style="width: 70px;"></img></div>'));
optionFS.append(optionAttr);
createUserForm.append(info, userFS, optionFS);
userAttr.append($('<div><label>Priority:</label><input type="text" name="priority" disabled="disabled" value="' + priority + '" title="The priority value for this user"/></div>'));
userAttr.append($('<div><label>User name:</label><input type="text" name="name" title="The user name to log into xCAT with"/></div>'));
var type = $('<div><label>Type:</label></div>');
var typeSelect = $('<select name="user_type" title="Specifies the type of user.">' +
'<option value="guest">Guest</option>' +
'<option value="admin">Administrator</option>' +
'<option value="admin">Administrator</option>' +
'</select>');
type.append(typeSelect);
type.append(typeSelect);
userAttr.append(type);
userAttr.append($('<div><label>Password:</label><input name="password" type="password" title="The user password that will be used to log into xCAT"></div>'));
userAttr.append($('<div><label>Confirm password:</label><input name="confirm_password" type="password" title="The user password that will be used to log into xCAT"></div>'));
optionAttr.append($('<div><label>Host:</label><input type="text" name="host" title="The host from which users may issue the commands specified by this rule. By default, it is all hosts."/></div>'));
optionAttr.append($('<div><label>Commands:</label><input type="text" name="commands" title="The list of commands that this rule applies to. By default, it is all commands."/></div>'));
optionAttr.append($('<div><label>Parameters:</label><input type="text" name="parameters" title="A regular expression that matches the command parameters (everything except the noderange) that this rule applies to. By default, it is all parameters."/></div>'));
@ -253,15 +253,15 @@ function openCreateUserDialog(data) {
'<option value="allow">Allow</option>' +
'<option value="accept">Accept</option>' +
'<option value="trusted">Trusted</option>' +
'<option value="deny">Deny</option>' +
'<option value="deny">Deny</option>' +
'</select></div>'));
optionAttr.append($('<div><label>Comments:</label><input type="text" name="comments" style="width: 250px;" title="Any user written notes"/></div>'));
optionAttr.append($('<div><label>Disable:</label><select name="disable" title="Set to yes to disable the user">' +
'<option value="">No</option>' +
optionAttr.append($('<div><label>Disable:</label><select name="disable" title="Set to yes to disable the user">' +
'<option value="">No</option>' +
'<option value="yes">Yes</option>' +
'</select></div>'));
// Generate tooltips
createUserForm.find('div input[title],select[title]').tooltip({
position: "center right",
@ -282,7 +282,7 @@ function openCreateUserDialog(data) {
this.getTip().css('z-index', $.topZIndex());
}
});
// Open dialog to add disk
createUserForm.dialog({
title:'Configure user',
@ -295,7 +295,7 @@ function openCreateUserDialog(data) {
"Ok": function(){
// Remove any warning messages
$(this).find('.ui-state-error').remove();
// Get inputs
var priority = $(this).find('input[name=priority]').val();
var usrName = $(this).find('input[name=name]').val();
@ -308,14 +308,14 @@ function openCreateUserDialog(data) {
var rule = $(this).find('select[name=rule]').val();
var comments = $(this).find('input[name=comments]').val();
var disable = $(this).find('select[name=disable]').val();
// Verify user name and passwords are supplied
if (!usrName) {
var warn = createWarnBar('Please provide a user name');
warn.prependTo($(this));
return;
}
// Verify passwords match
if (password != confirmPassword) {
var warn = createWarnBar('Passwords do not match');
@ -331,47 +331,48 @@ function openCreateUserDialog(data) {
} if (disable) {
args += ' policy.disable=' + disable;
}
// Handle cases where there are value or no value
if (host) {
args += " policy.host='" + host + "'";
} else {
args += " policy.host=''";
}
//else {
// args += " policy.host=''";
//}
if (parameters) {
args += " policy.parameters='" + parameters + "'";
} else {
args += " policy.parameters=''";
}
}// else {
// args += " policy.parameters=''";
//}
if (nodeRange) {
args += " policy.noderange='" + nodeRange + "'";
} else {
args += " policy.noderange=''";
}
}// else {
// args += " policy.noderange=''";
//}
if (comments) {
args += " policy.comments='" + comments + "'";
} else {
args += " policy.comments=''";
}
}// else {
// args += " policy.comments=''";
//}
if (commands) {
args += " policy.commands='" + commands + "'";
} else {
args += " policy.commands=''";
}
}// else {
// args += " policy.commands=''";
//}
// Trim any extra spaces
args = jQuery.trim(args);
args = jQuery.trim(args);
// Change dialog buttons
$(this).dialog('option', 'buttons', {
'Close': function() {$(this).dialog("close");}
});
// Submit request to update policy and passwd tables
// Submit request to update policy and passwd tables
$.ajax({
url : 'lib/cmd.php',
dataType : 'json',
@ -381,7 +382,7 @@ function openCreateUserDialog(data) {
args : 'policy||' + priority + '||' + args,
msg : dialogId
},
success : updatePanel
});
@ -395,11 +396,11 @@ function openCreateUserDialog(data) {
args : 'passwd||' + usrName + '||' + password,
msg : dialogId
},
success : updatePanel
});
}
// Update highest priority
topPriority = priority;
},
@ -408,47 +409,47 @@ function openCreateUserDialog(data) {
}
}
});
// Change comments if access checkbox is checked
typeSelect.change(function() {
var comments = createUserForm.find('input[name=comments]').val();
var cmds = createUserForm.find('input[name=commands]').val();
comments = jQuery.trim(comments);
cmds = jQuery.trim(cmds);
var tag = "privilege:root";
// The list of every command used by the self-service page
// Every command must be separated by a comma
var authorizedCmds = "authcheck,lsdef,nodestat,tabdump,rinv,rpower,rmvm,webportal,webrun";
// Append tag to commands and comments
if (typeSelect.val().indexOf("admin") > -1) {
if (typeSelect.val().indexOf("admin") > -1) {
if (comments && comments.charAt(comments.length - 1) != ";") {
comments += ";";
}
comments += tag;
createUserForm.find('input[name=comments]').val(comments);
createUserForm.find('input[name=comments]').val(comments);
createUserForm.find('input[name=commands]').val("");
} else {
comments = comments.replace(tag, "");
comments = comments.replace(";;", ";");
createUserForm.find('input[name=comments]').val(comments);
createUserForm.find('input[name=comments]').val(comments);
createUserForm.find('input[name=commands]').val(authorizedCmds);
}
// Strip off leading semi-colon
if (comments.charAt(0) == ";") {
comments = comments.substr(1, comments.length);
createUserForm.find('input[name=comments]').val(comments);
}
});
// Set the user data (on edit)
if (data) {
var checkBox = $('#' + tableId + ' input[name="' + data + '"]');
var priority = data;
var name = checkBox.parents('tr').find('td:eq(2)').text();
var host = checkBox.parents('tr').find('td:eq(3)').text();
@ -459,14 +460,14 @@ function openCreateUserDialog(data) {
var rule = checkBox.parents('tr').find('td:eq(8)').text();
var comments = checkBox.parents('tr').find('td:eq(9)').text();
var disable = checkBox.parents('tr').find('td:eq(10)').text();
createUserForm.find('input[name=priority]').val(priority);
createUserForm.find('input[name=name]').val(name);
// Do not show password (security)
createUserForm.find('input[name=password]').val();
createUserForm.find('input[name=confirm_password]').val();
createUserForm.find('input[name=host]').val(host);
createUserForm.find('input[name=commands]').val(commands);
createUserForm.find('input[name=parameters]').val(parameters);
@ -474,7 +475,7 @@ function openCreateUserDialog(data) {
createUserForm.find('select[name=rule]').val(rule);
createUserForm.find('input[name=comments]').val(comments);
createUserForm.find('select[name=disable]').val(disable);
if (comments.indexOf("privilege:root") > -1) {
typeSelect.val("admin");
}
@ -485,18 +486,18 @@ function openCreateUserDialog(data) {
}
/**
* Open dialog to confirm user delete
*
*
* @param users Users to delete
*/
function openDeleteUserDialog(users) {
// Create form to delete disk to pool
var dialogId = 'deleteUser';
var deleteForm = $('<div id="' + dialogId + '" class="form"></div>');
// Create info bar
var info = createInfoBar('Are you sure you want to delete ' + users.replace(new RegExp(',', 'g'), ', ') + '?');
deleteForm.append(info);
// Open dialog to delete user
deleteForm.dialog({
title:'Delete user',
@ -509,12 +510,12 @@ function openDeleteUserDialog(users) {
"Ok": function(){
// Remove any warning messages
$(this).find('.ui-state-error').remove();
// Change dialog buttons
$(this).dialog('option', 'buttons', {
'Close': function() {$(this).dialog("close");}
});
// Delete user
$.ajax({
url : 'lib/cmd.php',

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -6,29 +6,26 @@ function loadHelpPage(){
var tab = new Tab();
tab.init();
$('#content').append(tab.object());
var helpForm = $('<div class="form"></div>');
helpForm.append(
'<fieldset>' +
'<fieldset>' +
'<legend>Quick Start</legend>' +
'<div style="display: inline-table; vertical-align: middle;"><img src="images/help/quick_start.png" style="width: 90%;"></img></div>' +
'<ol style="display: inline-table; vertical-align: middle;">' +
'<li><a href="configure.php" style="color: blue;">1. Discover hardware</a><br/>Discover all hardware in the cluster. Define them in the xCAT database.</li>' +
'<li><a href="index.php" style="color: blue;">2. View defined nodes</a><br/>View node definitions by groups in a table or graphical view.</li>' +
'<li><a href="provision.php" style="color: blue;">3. Manage operating system images</a><br/>View operating system images defined in xCAT. Copy operating system ISOs into xCAT. Create stateful, stateless, or statelite images.</li>' +
'<li><a href="provision.php" style="color: blue;">4. Provision nodes</a><br/>Create stateful, stateless, or statelite virtual machines. Install an operating system onto bare metal machines.</li>' +
'<li><a href="provision.php" style="color: blue;">5. Manage and provision storage and networks</a><br/>Create network devices. Define storage for systems.</li>' +
'<li><a href="monitor.php" style="color: blue;">6. Monitor cluster</a><br/>Monitor the xCAT cluster using one or more third party software such as Ganglia, RMC, etc. </li>' +
'<li><a href="index.php" style="color: blue;">1. View defined nodes</a><br/>View node definitions by groups in a table.</li>' +
'<li><a href="provision.php" style="color: blue;">2. Manage operating system images</a><br/>View operating system images defined in xCAT. Copy operating system ISOs into xCAT.</li>' +
'<li><a href="provision.php" style="color: blue;">3. Provision nodes</a><br/>Create virtual machines. Install an operating system onto virtual machines.</li>' +
'<li><a href="provision.php" style="color: blue;">4. Manage and provision storage and networks</a><br/>Create network devices. Define storage for systems.</li>' +
'</ol>' +
'</fieldset>' +
'<fieldset>' +
'<legend>Settings</legend>' +
'<legend>Settings</legend>' +
'<div style="display: inline-table; vertical-align: middle;"><img src="images/provision/setting.png" style="width: 70px;"></img></div>' +
'<ol style="display: inline-table; vertical-align: middle;">' +
'<li><a href="configure.php" style="color: blue;">a. Manage and control user access</a></li>' +
'<li><a href="configure.php" style="color: blue;">b. Edit the xCAT database tables</a></li>' +
'<li><a href="configure.php" style="color: blue;">c. Update xCAT packages</a></li>' +
'</ol>' +
'<li><a href="configure.php" style="color: blue;">b. Edit the xCAT database tables</a></li>' +
'</ol>' +
'</fieldset>');
tab.add('helpTab', 'Help', helpForm, false);
}

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
/**
* Load nodeset page
*
*
* @param tgtNodes Targets to run nodeset against
*/
function loadNodesetPage(tgtNodes) {
@ -29,7 +29,7 @@ function loadNodesetPage(tgtNodes) {
inst = inst + 1;
tabId = 'nodesetTab' + inst;
}
// Create nodeset form
var nodesetForm = $('<div class="form"></div>');
@ -44,23 +44,23 @@ function loadNodesetPage(tgtNodes) {
// 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);
@ -68,7 +68,7 @@ function loadNodesetPage(tgtNodes) {
// 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>');
@ -80,13 +80,13 @@ function loadNodesetPage(tgtNodes) {
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();
@ -112,7 +112,7 @@ function loadNodesetPage(tgtNodes) {
tooltip : "mouseover,mouseout"
}
});
/**
* Ok
*/
@ -124,7 +124,7 @@ function loadNodesetPage(tgtNodes) {
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');
@ -139,7 +139,7 @@ function loadNodesetPage(tgtNodes) {
if (ready) {
// Get nodes
var tgts = $('#' + tabId + ' input[name=target]').val();
var tgts = $('#' + tabId + ' input[name=target]').val();
// Get boot type
var type = $('#' + tabId + ' select[id=bootType]').val();
// Get operating system image
@ -185,7 +185,7 @@ function loadNodesetPage(tgtNodes) {
/**
* Update nodeset status
*
*
* @param data Data returned from HTTP request
*/
function updateNodesetStatus(data) {
@ -217,7 +217,7 @@ function updateNodesetStatus(data) {
// 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
@ -239,7 +239,7 @@ function updateNodesetStatus(data) {
}
}
}
$('#' + statBarId).find('div').append('<pre>Node definition created for ' + tgtNodesStr + '</pre>');
$.ajax( {
url : 'lib/cmd.php',
@ -267,53 +267,7 @@ function updateNodesetStatus(data) {
$('#' + 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
// Go straight to prepare node for boot
$.ajax( {
url : 'lib/cmd.php',
dataType : 'json',
@ -329,12 +283,12 @@ function updateNodesetStatus(data) {
}
/**
* (7) Boot node from network
* (5) Boot node from network
*/
else if (cmd == 'nodeset') {
// Write ajax response to status bar
var prg = writeRsp(rsp, '');
$('#' + statBarId).find('div').append(prg);
var prg = writeRsp(rsp, '');
$('#' + statBarId).find('div').append(prg);
// Hide loader
$('#' + statBarId).find('img').hide();

View File

@ -23,7 +23,7 @@ var softwareList = {
function loadImagesPage() {
// Set padding for images page
$('#imagesTab').css('padding', '20px 60px');
// Get images within the database
$.ajax( {
url : 'lib/cmd.php',
@ -41,7 +41,7 @@ function loadImagesPage() {
/**
* Load images within the database
*
*
* @param data Data returned from HTTP request
*/
function loadImages(data) {
@ -50,12 +50,12 @@ function loadImages(data) {
if (rsp[0].indexOf('Could not find any object definitions') > -1) {
rsp = new Array();
}
// Image attributes hash
var attrs = new Object();
// Image attributes
var headers = new Object();
// Clear hash table containing image attributes
origAttrs = '';
@ -82,7 +82,7 @@ function loadImages(data) {
attrs[image][key] = val;
headers[key] = 1;
}
// Save attributes in hash table
origAttrs = attrs;
@ -108,7 +108,7 @@ function loadImages(data) {
var checkBx = '<input type="checkbox" name="' + img + '"/>';
// Push in checkbox and image name
row.push(checkBx, img);
// Go through each header
for (var i = 2; i < sorted.length; i++) {
// Add the node attributes to the row
@ -127,7 +127,7 @@ function loadImages(data) {
// Clear the tab before inserting the table
$('#imagesTab').children().remove();
// Create info bar for images tab
var info = createInfoBar('Double click on a cell to edit. Click outside the table to save changes. Hit the Escape key to ignore changes.');
$('#imagesTab').append(info);
@ -142,13 +142,13 @@ function loadImages(data) {
copyCDLnk.click(function() {
openCopyCdDialog();
});
// Generate stateless or statelite image
var generateLnk = $('<a>Generate image</a>');
generateLnk.click(function() {
loadCreateImage();
});
// Edit image attributes
var editLnk = $('<a>Edit</a>');
editLnk.click(function() {
@ -159,22 +159,22 @@ function loadImages(data) {
}
}
});
// Add a row
var addLnk = $('<a>Add</a>');
addLnk.click(function() {
openAddImageDialog();
});
// Remove a row
var removeLnk = $('<a>Remove</a>');
removeLnk.click(function() {
var images = getNodesChecked(imgTableId);
if (images) {
confirmImageDeleteDialog(images);
}
}
});
// Refresh image table
var refreshLnk = $('<a>Refresh</a>');
refreshLnk.click(function() {
@ -192,7 +192,7 @@ function loadImages(data) {
success : loadImages
});
});
// Insert table
$('#imagesTab').append(dTable.object());
@ -211,12 +211,12 @@ function loadImages(data) {
}
}
});
// Set datatable width
$('#' + imgTableId + '_wrapper').css({
'width': '880px'
});
// Actions
var actionBar = $('<div class="actionBar"></div>').css("width", "450px");
var advancedLnk = '<a>Advanced</a>';
@ -227,50 +227,50 @@ function loadImages(data) {
actionsMenu.superfish();
actionsMenu.css('display', 'inline-block');
actionBar.append(actionsMenu);
// Set correct theme for action menu
actionsMenu.find('li').hover(function() {
setMenu2Theme($(this));
}, function() {
setMenu2Normal($(this));
});
// Create a division to hold actions menu
var menuDiv = $('<div id="' + imgTableId + '_menuDiv" class="menuDiv"></div>');
$('#' + imgTableId + '_wrapper').prepend(menuDiv);
menuDiv.append(actionBar);
menuDiv.append(actionBar);
$('#' + imgTableId + '_filter').appendTo(menuDiv);
/**
* Enable editable columns
*/
// Do not make 1st or 2nd columns editable
$('#' + imgTableId + ' td:not(td:nth-child(1),td:nth-child(2))').editable(
function(value, settings) {
function(value, settings) {
// Get column index
var colPos = this.cellIndex;
// Get row index
var dTable = $('#' + imgTableId).dataTable();
var rowPos = dTable.fnGetPosition(this.parentNode);
// Update datatable
dTable.fnUpdate(value, rowPos, colPos);
// Get image name
var image = $(this).parent().find('td:eq(1)').text();
// Get table headers
var headers = $('#' + imgTableId).parents('.dataTables_scroll').find('.dataTables_scrollHead thead tr:eq(0) th');
// Get attribute name
var attrName = jQuery.trim(headers.eq(colPos).text());
// Get column value
var value = $(this).text();
var value = $(this).text();
// Build argument
var args = attrName + '=' + value;
// Send command to change image attributes
$.ajax( {
url : 'lib/cmd.php',
@ -293,7 +293,7 @@ function loadImages(data) {
event : "dblclick", // Double click and edit
height : '30px' // The height of the text area
});
// Get definable node attributes
$.ajax( {
url : 'lib/cmd.php',
@ -311,7 +311,7 @@ function loadImages(data) {
/**
* Open dialog to confirm deleting image
*
*
* @param images Comma delimited image names
*/
function confirmImageDeleteDialog(images) {
@ -321,7 +321,7 @@ function confirmImageDeleteDialog(images) {
var confirmDialog = $('<div id="' + dialogId + '">'
+ '<p>Are you sure you want to remove ' + tmp + '?</p>'
+ '</div>');
// Open dialog to confirm delete
confirmDialog.dialog({
modal: true,
@ -331,12 +331,12 @@ function confirmImageDeleteDialog(images) {
title: 'Confirm',
width: 500,
buttons: {
"Ok": function(){
"Ok": function(){
// Change dialog buttons
$(this).dialog('option', 'buttons', {
'Close': function() {$(this).dialog("close");}
});
// Add image to xCAT
$.ajax( {
url : 'lib/cmd.php',
@ -351,7 +351,7 @@ function confirmImageDeleteDialog(images) {
success : updateImageDialog
});
},
"Cancel": function(){
"Cancel": function(){
$(this).dialog("close");
}
}
@ -365,32 +365,32 @@ function openAddImageDialog() {
// Create dialog to add image
var dialogId = 'addImage';
var addImageForm = $('<div id="' + dialogId + '" class="form"></div>');
// Create info bar
var info = createInfoBar('Provide the following attributes for the image. The image name will be generated based on the attributes you will give.');
var imageFS = $('<fieldset></fieldset>');
var imageLegend = $('<legend>Image</legend>');
imageFS.append(imageLegend);
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/operating_system.png"></img></div>'));
imageFS.append(imageAttr);
var optionFS = $('<fieldset></fieldset>');
var optionLegend = $('<legend>Options</legend>');
optionFS.append(optionLegend);
var optionAttr = $('<div style="display: inline-table; vertical-align: middle;"></div>');
optionFS.append($('<div style="display: inline-table; vertical-align: middle;"><img src="images/provision/setting.png" style="width: 70px;"></img></div>'));
optionFS.append(optionAttr);
addImageForm.append(info, imageFS, optionFS);
// Create inputs for image attributes
var imageName = $('<div><label>Image name:</label><input type="text" name="imagename" disabled="disabled" title="The name of this xCAT OS image definition"/></div>');
var imageType = $('<div><label>Image type:</label><input type="text" name="imagetype" value="linux" title="The type of operating system image this definition represents"/></div>');
var architecture = $('<div><label>OS architecture:</label><input type="text" name="osarch" title="The hardware architecture of this image. Valid values: x86_64, x86, ia64, ppc64, and s390x."/></div>');
var architecture = $('<div><label>OS architecture:</label><input type="text" name="osarch" title="The hardware architecture of this image. Valid values: s390x."/></div>');
var osName = $('<div><label>OS name:</label><input type="text" name="osname" value="Linux" title="Operating system name"/></div>');
var osVersion = $('<div><label>OS version:</label><input type="text" name="osvers" title="The operating system deployed on this node. Valid values: rhel*, centos*, fedora*, sles* (where * is the version #)."/></div>');
var osVersion = $('<div><label>OS version:</label><input type="text" name="osvers" title="The operating system deployed on this node. Valid values: rhel*, sles* (where * is the version #)."/></div>');
var profile = $('<div><label>Profile:</label><input type="text" name="profile" title="The node usage category"/></div>');
var provisionMethod = $('<div><label>Provision method:</label></div>');
var provisionSelect = $('<select name="provmethod" title="The provisioning method for node deployment">'
@ -400,7 +400,7 @@ function openAddImageDialog() {
+ '<option value="statelite">statelite</option>'
+ '</select>');
provisionMethod.append(provisionSelect);
// Create inputs for optional attributes
var otherpkgDirectory = $('<div><label>Other package directory:</label></div>');
var otherpkgDirectoryInput = $('<input type="text" name="otherpkgdir" title="The base directory where the non-distro packages are stored"/>');
@ -498,10 +498,10 @@ function openAddImageDialog() {
height : '300',
basePath : '/install' // Limit user to only install directory
});
imageAttr.append(imageName, imageType, architecture, osName, osVersion, profile, provisionMethod);
optionAttr.append(otherpkgDirectory, packageDirectory, packageList, template);
// Generate tooltips
addImageForm.find('div input[title],select[title]').tooltip({
position: "center right",
@ -522,7 +522,7 @@ function openAddImageDialog() {
this.getTip().css('z-index', $.topZIndex());
}
});
// Open dialog to add image
addImageForm.dialog({
title:'Add image',
@ -536,7 +536,7 @@ function openAddImageDialog() {
"Ok": function(){
// Remove any warning messages
$(this).find('.ui-state-error').remove();
// Get image attributes
var imageType = $(this).find('input[name="imagetype"]');
var architecture = $(this).find('input[name="osarch"]');
@ -544,13 +544,13 @@ function openAddImageDialog() {
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"]');
var pkgDirectory = $(this).find('input[name="pkgdir"]');
var pkgList = $(this).find('input[name="pkglist"]');
var template = $(this).find('input[name="template"]');
// Check that image attributes are provided before continuing
var ready = 1;
var inputs = new Array(imageType, architecture, osName, osVersion, profile, provisionMethod);
@ -561,7 +561,7 @@ function openAddImageDialog() {
} else
inputs[i].css('border-color', '');
}
// If inputs are not complete, show warning message
if (!ready) {
var warn = createWarnBar('Please provide a value for each missing field.');
@ -570,12 +570,12 @@ function openAddImageDialog() {
// 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.val() + ';' +
'imagetype=' + imageType.val() + ';' +
@ -584,7 +584,7 @@ function openAddImageDialog() {
'osvers=' + osVersion.val() + ';' +
'profile=' + profile.val() + ';' +
'provmethod=' + provisionMethod.val();
// Get optional attributes
if (otherpkgDirectory.val())
args += ';otherpkgdir=' + otherpkgDirectory.val();
@ -594,7 +594,7 @@ function openAddImageDialog() {
args += ';pkglist=' + pkgList.val();
if (template.val())
args += ';template=' + template.val();
// Add image to xCAT
$.ajax( {
url : 'lib/cmd.php',
@ -605,7 +605,7 @@ function openAddImageDialog() {
args : args,
msg : dialogId
},
success : updateImageDialog
});
}
@ -619,40 +619,40 @@ function openAddImageDialog() {
/**
* Update image dialog
*
*
* @param data HTTP request data
*/
function updateImageDialog(data) {
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 = '';
// 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;
}
// Create info bar with close button
var infoBar = $('<div class="ui-state-highlight ui-corner-all"></div>').css('margin', '5px 0px');
var icon = $('<span class="ui-icon ui-icon-info"></span>').css({
'display': 'inline-block',
'margin': '10px 5px'
});
// Create close button to close info bar
var close = $('<span class="ui-icon ui-icon-close"></span>').css({
'display': 'inline-block',
@ -660,25 +660,25 @@ function updateImageDialog(data) {
}).click(function() {
$(this).parent().remove();
});
var msg = $('<p>' + infoMsg + '</p>').css({
'display': 'inline-block',
'width': '90%'
});
infoBar.append(icon, msg, close);
infoBar.append(icon, msg, close);
infoBar.prependTo($('.ui-dialog #' + dialogId));
}
/**
* Set definable image attributes
*
*
* @param data Data returned from HTTP request
*/
function setImageDefAttrs(data) {
// Clear hash table containing definable image attributes
defAttrs = new Array();
// Get definable attributes
var attrs = data.rsp[2].split(/\n/);
@ -686,19 +686,19 @@ function setImageDefAttrs(data) {
var attr, key, descr;
for (var i in attrs) {
attr = attrs[i];
// If the line is not empty
if (attr) {
// If the line has the attribute name
// If the line has the attribute name
if (attr.indexOf(':') && attr.indexOf(' ')) {
// Get attribute name and description
key = jQuery.trim(attr.substring(0, attr.indexOf(':')));
descr = jQuery.trim(attr.substring(attr.indexOf(':') + 1));
descr = descr.replace(new RegExp('<', 'g'), '[').replace(new RegExp('>', 'g'), ']');
// Set hash table where key = attribute name and value = description
defAttrs[key] = descr;
} else {
} else {
// Append description to hash table
defAttrs[key] = defAttrs[key] + '\n' + attr.replace(new RegExp('<', 'g'), '[').replace(new RegExp('>', 'g'), ']');
}
@ -713,7 +713,7 @@ function loadCreateImage() {
// Get nodes tab
var tab = getProvisionTab();
var tabId = 'createImageTab';
// Generate new tab ID
if ($('#' + tabId).size()) {
tab.select(tabId);
@ -723,7 +723,7 @@ function loadCreateImage() {
var imageOsVers = $.cookie("osvers").split(",");
var imageArch = $.cookie("osarchs").split(",");
var profiles = $.cookie("profiles").split(",");
var createImgForm = $('<div class="form"></div>');
var createImgFS = $('<fieldset></fieldset>').append('<legend>Create Image</legend>');
createImgForm.append(createImgFS);
@ -746,20 +746,20 @@ function loadCreateImage() {
// Netboot interface input
createImgFS.append($('<div><label>Netboot interface:</label><input type="text" id="netbootif"/></div>'));
// Profile selector
var profileSelect = $('<select id="profile" onchange="hpcShow()">');
for (var i in profiles)
profileSelect.append('<option value="' + profiles[i] + '">' + profiles[i] + '</option>');
createImgFS.append($('<div><label>Profile:</label></div>').append(profileSelect));
// Boot method drop down
createImgFS.append($('<div><label>Boot method:</label>' +
'<select id="bootmethod">' +
'<option value="stateless">stateless</option>' +
'<option value="statelite">statelite</option>' +
'<option value="stateless">stateless</option>' +
'<option value="statelite">statelite</option>' +
'</select></div>'));
// Create HPC software stack fieldset
createHpcFS(createImgForm);
@ -770,25 +770,25 @@ function loadCreateImage() {
});
createImgForm.append(createImageBtn);
// Add tab
tab.add(tabId, 'Create', createImgForm, true);
tab.select(tabId);
// Check the selected OS version and OS arch for HPC stack
// If they are valid, show the HCP stack fieldset
hpcShow();
hpcShow();
}
/**
* Create HPC fieldset
*
*
* @param container The container to hold the HPC fieldset
*/
function createHpcFS(container) {
var hpcFieldset = $('<fieldset id="hpcsoft"></fieldset>');
hpcFieldset.append('<legend>HPC Software Stack</legend>');
var str = 'Before selecting the software, you should have the following already completed on your xCAT cluster:<br/><br/>'
+ '1. If you are using the xCAT hierarchy, your service nodes are installed and running.<br/>'
+ '2. Your compute nodes are defined in xCAT, and you have verified your hardware control capabilities, '
@ -797,12 +797,12 @@ function createHpcFS(container) {
+ '4. You should install the software on the management node and copy all correponding packages into the location "/install/custom/otherpkgs/" based on '
+ 'these <a href="http://sourceforge.net/apps/mediawiki/xcat/index.php?title=IBM_HPC_Stack_in_an_xCAT_Cluster" target="_blank">documents</a>.<br/>';
hpcFieldset.append(createInfoBar(str));
// Advanced software
str = '<div id="partlysupport"><ul><li id="gpfsli"><input type="checkbox" onclick="softwareCheck(this)" name="gpfs">GPFS</li>' +
'<li id="rsctli"><input type="checkbox" onclick="softwareCheck(this)" name="rsct">RSCT</li>' +
'<li id="peli"><input type="checkbox" onclick="softwareCheck(this)" name="pe">PE</li>' +
'<li id="esslli"><input type="checkbox" onclick="esslCheck(this)" name="essl">ESSl & PESSL</li>' +
'<li id="rsctli"><input type="checkbox" onclick="softwareCheck(this)" name="rsct">RSCT</li>' +
'<li id="peli"><input type="checkbox" onclick="softwareCheck(this)" name="pe">PE</li>' +
'<li id="esslli"><input type="checkbox" onclick="esslCheck(this)" name="essl">ESSl & PESSL</li>' +
'</ul></div>' +
'<div><ul><li id="gangliali"><input type="checkbox" onclick="softwareCheck(this)" name="ganglia">Ganglia</li>' +
'</ul></div>';
@ -813,7 +813,7 @@ function createHpcFS(container) {
/**
* Check the dependance for ESSL and start the software check for ESSL
*
*
* @param softwareObject The checkbox object of ESSL
*/
function esslCheck(softwareObject) {
@ -821,11 +821,11 @@ function esslCheck(softwareObject) {
if (!$('#createImageTab input[name=pe]').attr('checked')) {
var warnBar = createWarnBar('You must first select the PE');
$(':checkbox[name=essl]').attr("checked", false);
// Clear existing warnings and append new warning
$('#hpcsoft .ui-state-error').remove();
$('#hpcsoft').prepend(warnBar);
return;
} else {
softwareCheck(softwareObject);
@ -834,7 +834,7 @@ function esslCheck(softwareObject) {
/**
* Check the parameters for the HPC software
*
*
* @param softwareObject Checkbox object of the HPC software
* @return True if the checkbox is checked, false otherwise
*/
@ -869,14 +869,14 @@ function softwareCheck(softwareObject) {
/**
* Check if the RPMs are copied to the special location
*
*
* @param data Data returned from HTTP request
*/
function rpmCopyCheck(data) {
// Remove the loading image
var errorStr = '';
var softwareName = data.msg;
// Check the return information
var reg = /.+:(.+): No such.*/;
var resultArray = data.rsp.split("\n");
@ -891,7 +891,7 @@ function rpmCopyCheck(data) {
}
}
$('#createImageTab #' + softwareName + 'li').find('img').remove();
// No error, show the check image
if (!errorStr) {
var infoPart = '<div style="display:inline-block; margin:0px"><span class="ui-icon ui-icon-circle-check"></span></div>';
@ -901,7 +901,7 @@ function rpmCopyCheck(data) {
errorStr = 'To install the RSCT on your compute node. You should:<br/>' + errorStr + '</div>';
var warnBar = createWarnBar(errorStr);
$(':checkbox[name=' + softwareName + ']').attr("checked", false);
// Clear existing warnings and append new warning
$('#hpcsoft .ui-state-error').remove();
$('#hpcsoft').prepend(warnBar);
@ -910,7 +910,7 @@ function rpmCopyCheck(data) {
/**
* Generate the RPM command for rpmcheck
*
*
* @param softwareName The name of the software
* @return The RPM command
*/
@ -924,13 +924,13 @@ function genRpmCmd(softwareName) {
for (var i in softwareList['base']) {
cmdString += softwareList['base'][i] + ' ';
}
return cmdString;
}
/**
* Check if the RPMs for the HPC software are copied to the special location
*
*
* @param softwareName The name of the software
*/
function genLsCmd(softwareName) {
@ -949,7 +949,7 @@ function genLsCmd(softwareName) {
/**
* Check if all RPMs are installed
*
*
* @param checkInfo 'rpm -q' output
* @return True if all RPMs are installed, false otherwise
*/
@ -969,7 +969,7 @@ function rpmCheck(checkInfo, name) {
errorStr = errorStr.substr(0, errorStr.length - 1);
$(':checkbox[name=' + name + ']').attr('checked', false);
// Add the error
var warnBar = createWarnBar(errorStr);
$('#createImageTab #' + name + 'li').find('img').remove();
@ -977,7 +977,7 @@ function rpmCheck(checkInfo, name) {
// Clear existing warnings and append new warning
$('#hpcsoft .ui-state-error').remove();
$('#hpcsoft').prepend(warnBar);
return;
}
@ -996,7 +996,7 @@ function hpcShow() {
/**
* Load set image properties page
*
*
* @param tgtImage Target image to set properties
*/
function openEditImagePage(tgtImage) {
@ -1033,7 +1033,7 @@ function openEditImagePage(tgtImage) {
} else {
value = '';
}
// Create label and input for attribute
div = $('<div></div>').css('display', 'inline');
label = $('<label>' + key + ':</label>').css('vertical-align', 'middle');
@ -1042,17 +1042,17 @@ function openEditImagePage(tgtImage) {
'float': 'none',
'width': 'inherit'
});
// There is an element called groups that will override the defaults for the groups attribute.
// Hence, the input must have use CSS to override the float and width.
// Split attributes into 2 per row
if (attrIndex > 0 && !(attrIndex % 2)) {
div.css('display', 'inline-block');
}
attrIndex++;
// Create server browser
switch (key) {
case 'pkgdir':
@ -1178,22 +1178,22 @@ function openEditImagePage(tgtImage) {
default:
// Do nothing
}
// Change border to blue onchange
input.bind('change', function(event) {
$(this).css('border-color', 'blue');
});
div.append(label, input);
setPropsForm.append(div);
}
// Change style for last division
div.css({
'display': 'block',
'margin': '0px 0px 10px 0px'
});
// Generate tooltips
setPropsForm.find('div input[title]').tooltip({
position: "center right",
@ -1214,10 +1214,10 @@ function openEditImagePage(tgtImage) {
* Save
*/
var saveBtn = createButton('Save');
saveBtn.bind('click', function(event) {
saveBtn.bind('click', function(event) {
// Get all inputs
var inputs = $('#' + newTabId + ' input');
// Go through each input
var args = '';
var attrName, attrVal;
@ -1226,11 +1226,11 @@ function openEditImagePage(tgtImage) {
if ($(this).css('border-left-color') == 'rgb(0, 0, 255)') {
// Change border color back to normal
$(this).css('border-color', '');
// Get attribute name and value
attrName = $(this).parent().find('label').text().replace(':', '');
attrVal = $(this).val();
// Build argument string
if (args) {
// Handle subsequent arguments
@ -1241,7 +1241,7 @@ function openEditImagePage(tgtImage) {
}
}
});
// Send command to change image attributes
$.ajax( {
url : 'lib/cmd.php',
@ -1257,7 +1257,7 @@ function openEditImagePage(tgtImage) {
});
});
setPropsForm.append(saveBtn);
/**
* Cancel
*/
@ -1278,15 +1278,15 @@ function openEditImagePage(tgtImage) {
/**
* Load copy CD page
*/
function openCopyCdDialog() {
function openCopyCdDialog() {
// Create copy Linux form
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);
// Create Linux ISO input
var iso = $('<div></div>');
var isoLabel = $('<label> Linux ISO/DVD:</label>').css('vertical-align', 'middle');
@ -1294,12 +1294,12 @@ function openCopyCdDialog() {
iso.append(isoLabel);
iso.append(isoInput);
copyLinuxForm.append(iso);
// Create architecture input
copyLinuxForm.append('<div><label>Architecture:</label><input type="text" id="arch" name="arch" title="The hardware architecture of this node. Valid values: x86_64, x86, ia64, ppc64, and s390x."/></div>');
copyLinuxForm.append('<div><label>Architecture:</label><input type="text" id="arch" name="arch" title="The hardware architecture of this node. Valid values: s390x."/></div>');
// Create distribution input
copyLinuxForm.append('<div><label>Distribution:</label><input type="text" id="distro" name="distro" title="The operating system name. Valid values: rhel*, centos*, fedora*, sles* (where * is the version #)."/></div>');
copyLinuxForm.append('<div><label>Distribution:</label><input type="text" id="distro" name="distro" title="The operating system name. Valid values: rhel*, sles* (where * is the version #).<br>Note: dashes are parsed to fill in distro, profile, os, and arch fields in xCAT table."/></div>');
/**
* Browse
*/
@ -1328,7 +1328,7 @@ function openCopyCdDialog() {
height : '300',
basePath : '/install' // Limit user to only install directory
});
// Generate tooltips
copyLinuxForm.find('div input[title],select[title]').tooltip({
position: "center right",
@ -1349,7 +1349,7 @@ function openCopyCdDialog() {
this.getTip().css('z-index', $.topZIndex());
}
});
// Open dialog to copy CD
copyLinuxForm.dialog({
title:'Copy CD',
@ -1362,12 +1362,12 @@ function openCopyCdDialog() {
"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"]');
@ -1383,7 +1383,7 @@ function openCopyCdDialog() {
args : '-n;' + distro.val() + ';-a;' + arch.val() + ';' + iso.val(),
msg : dialogId
},
success : updateImageDialog
});
},
@ -1429,7 +1429,7 @@ function createImage() {
msg : ''
},
success : function(data) {
}
});
}

View File

@ -5,7 +5,7 @@ var provisionTabs; // Provision tabs
/**
* Set the provision tab
*
*
* @param obj Tab object
*/
function setProvisionTab(obj) {
@ -14,7 +14,7 @@ function setProvisionTab(obj) {
/**
* Get the provision tab
*
*
* @param Nothing
* @return Tab object
*/
@ -63,10 +63,10 @@ function loadProvisionPage() {
success : setGroupsCookies
});
}
// Create info bar
var infoBar = createInfoBar('Select a platform to provision or re-provision a node on, then click Ok.');
// Create provision page
var provPg = $('<div class="form"></div>');
provPg.append(infoBar);
@ -79,13 +79,13 @@ function loadProvisionPage() {
// Create radio buttons for platforms
var hwList = $('<ol>Platforms available:</ol>');
var esx = $('<li><input type="radio" name="hw" value="esx" checked/>ESX</li>');
var kvm = $('<li><input type="radio" name="hw" value="kvm"/>KVM</li>');
var zvm = $('<li><input type="radio" name="hw" value="zvm"/>z\/VM</li>');
var ipmi = $('<li><input type="radio" name="hw" value="ipmi"/>iDataPlex</li>');
var blade = $('<li><input type="radio" name="hw" value="blade"/>BladeCenter</li>');
var hmc = $('<li><input type="radio" name="hw" value="hmc"/>System p</li>');
var esx = $('<li><input type="radio" name="hw" value="esx" disabled/>ESX</li>');
var kvm = $('<li><input type="radio" name="hw" value="kvm" disabled/>KVM</li>');
var zvm = $('<li><input type="radio" name="hw" value="zvm" checked/>z\/VM</li>');
var ipmi = $('<li><input type="radio" name="hw" value="ipmi" disabled/>iDataPlex</li>');
var blade = $('<li><input type="radio" name="hw" value="blade" disabled/>BladeCenter</li>');
var hmc = $('<li><input type="radio" name="hw" value="hmc" disabled/>System p</li>');
hwList.append(esx);
hwList.append(kvm);
hwList.append(zvm);
@ -101,7 +101,7 @@ function loadProvisionPage() {
okBtn.bind('click', function(event) {
// Get hardware that was selected
var hw = $(this).parent().find('input[name="hw"]:checked').val();
var inst = 0;
var newTabId = hw + 'ProvisionTab' + inst;
while ($('#' + newTabId).length) {
@ -109,7 +109,7 @@ function loadProvisionPage() {
inst = inst + 1;
newTabId = hw + 'ProvisionTab' + inst;
}
// Create an instance of the plugin
var title = '';
var plugin;
@ -146,7 +146,7 @@ function loadProvisionPage() {
plugin.loadProvisionPage(newTabId);
});
provPg.append(okBtn);
// Create resources tab
var resrcPg = $('<div class="form"></div>');
@ -156,20 +156,20 @@ function loadProvisionPage() {
// Create radio buttons for platforms
var rsrcHwList = $('<ol>Platforms available:</ol>');
esx = $('<li><input type="radio" name="rsrcHw" value="esx" checked/>ESX</li>');
kvm = $('<li><input type="radio" name="rsrcHw" value="kvm"/>KVM</li>');
zvm = $('<li><input type="radio" name="rsrcHw" value="zvm"/>z\/VM</li>');
ipmi = $('<li><input type="radio" name="rsrcHw" value="ipmi"/>iDataPlex</li>');
blade = $('<li><input type="radio" name="rsrcHw" value="blade"/>BladeCenter</li>');
hmc = $('<li><input type="radio" name="rsrcHw" value="hmc"/>System p</li>');
esx = $('<li><input type="radio" name="rsrcHw" value="esx" disabled/>ESX</li>');
kvm = $('<li><input type="radio" name="rsrcHw" value="kvm" disabled/>KVM</li>');
zvm = $('<li><input type="radio" name="rsrcHw" value="zvm" checked/>z\/VM</li>');
ipmi = $('<li><input type="radio" name="rsrcHw" value="ipmi" disabled/>iDataPlex</li>');
blade = $('<li><input type="radio" name="rsrcHw" value="blade" disabled/>BladeCenter</li>');
hmc = $('<li><input type="radio" name="rsrcHw" value="hmc" disabled/>System p</li>');
rsrcHwList.append(esx);
rsrcHwList.append(kvm);
rsrcHwList.append(zvm);
rsrcHwList.append(blade);
rsrcHwList.append(ipmi);
rsrcHwList.append(hmc);
resrcPg.append(rsrcHwList);
var okBtn = createButton('Ok');
@ -212,7 +212,7 @@ function loadProvisionPage() {
displayName = "z\/VM";
break;
}
// Add resource tab and load resources
tab.add(newTabId, displayName, loader, true);
plugin.loadResources();
@ -221,8 +221,8 @@ function loadProvisionPage() {
// Select tab
tab.select(newTabId);
});
resrcPg.append(okBtn);
resrcPg.append(okBtn);
// Add provision tab
tab.add('provisionTab', 'Provision', provPg, false);
@ -230,21 +230,21 @@ function loadProvisionPage() {
tab.add('imagesTab', 'Images', '', false);
// Add resource tab
tab.add('resourceTab', 'Resources', resrcPg, false);
// Load tabs onselect
$('#provisionPageTabs').bind('tabsselect', function(event, ui){
// Load image page
$('#provisionPageTabs').bind('tabsselect', function(event, ui){
// Load image page
if (!$('#imagesTab').children().length && ui.index == 1) {
$('#imagesTab').append($('<center></center>').append(createLoader('')));
loadImagesPage();
}
});
// Open the quick provision tab
if (window.location.search) {
tab.add('quickProvisionTab', 'Quick Provision', '', true);
tab.select('quickProvisionTab');
var provForm = $('<div class="form"></div>');
$('#quickProvisionTab').append(provForm);
appendProvisionSection('quick', provForm);

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
/**
* Tab constructor
*
*
* @param tabId Tab ID
* @param tabName Tab name
*/
@ -12,7 +12,7 @@ var Tab = function(tabId) {
/**
* Initialize the tab
*
*
* @param tabName Tab name to initialize
*/
Tab.prototype.init = function() {
@ -32,14 +32,14 @@ Tab.prototype.init = function() {
if ($.cookie('tabindex_history')) {
order = $.cookie('tabindex_history').split(',');
order[1] = order[0]; // Set index 1 to last selected tab
order[0] = ui.index; // Set index 0 to currently selected tab
order[0] = ui.index; // Set index 0 to currently selected tab
} else {
// Create an array to track the tab selected
order = new Array;
order[0] = ui.index;
order[1] = ui.index;
}
$.cookie('tabindex_history', order);
});
@ -52,7 +52,7 @@ Tab.prototype.init = function() {
/**
* Return the tab object
*
*
* @return Object representing the tab
*/
Tab.prototype.object = function() {
@ -61,7 +61,7 @@ Tab.prototype.object = function() {
/**
* Add a new tab
*
*
* @param tabId Tab ID
* @param tabName Tab name
* @param tabCont Tab content
@ -77,21 +77,21 @@ Tab.prototype.add = function(tabId, tabName, tabCont, closeable) {
newTab.append(tabCont);
this.tab.append(newTab);
this.tab.tabs("add", "#" + tabId, tabName);
// Append close button
if (closeable) {
var header = this.tab.find('ul.ui-tabs-nav a[href="#' + tabId +'"]').parent();
header.append('<span class=\"tab-close ui-icon ui-icon-close\"></span>');
// Get this tab
var tabs = this.tab;
var tabLink = 'a[href="\#' + tabId + '"]';
var tabLink = 'a[href="\#' + tabId + '"]';
var thisTab = $(tabLink, tabs).parent();
// Close tab when close button is clicked
thisTab.find('span.tab-close').bind('click', function(event) {
var tabIndex = ($('li', tabs).index(thisTab));
// Do not remove first tab
if (tabIndex != 0) {
// Go back to last tab if user is trying to close currently selected tab
@ -102,9 +102,9 @@ Tab.prototype.add = function(tabId, tabName, tabCont, closeable) {
tabs.tabs('select', parseInt(order[1]));
} else {
tabs.tabs('select', 0);
}
}
}
}
tabs.tabs('remove', tabIndex);
}
});
@ -113,7 +113,7 @@ Tab.prototype.add = function(tabId, tabName, tabCont, closeable) {
/**
* Select a tab
*
*
* @param id Tab ID to select
*/
Tab.prototype.select = function(id) {
@ -122,11 +122,11 @@ Tab.prototype.select = function(id) {
/**
* Remove a tab
*
*
* @param id Tab ID to remove
*/
Tab.prototype.remove = function(id) {
var selectorStr = 'a[href="\#' + id + '"]';
var selectorStr = 'a[href="\#' + id + '"]';
var selectTab = $(selectorStr, this.tab).parent();
var index = ($('li', this.tab).index(selectTab));
this.tab.tabs("remove", index);
@ -134,7 +134,7 @@ Tab.prototype.remove = function(id) {
/**
* Table constructor
*
*
* @param tabId Tab ID
* @param tabName Tab name
*/
@ -150,7 +150,7 @@ var Table = function(tableId) {
/**
* Initialize the table
*
*
* @param Headers Array of table headers
*/
Table.prototype.init = function(headers) {
@ -174,7 +174,7 @@ Table.prototype.init = function(headers) {
/**
* Return the table object
*
*
* @return Object representing the table
*/
Table.prototype.object = function() {
@ -183,7 +183,7 @@ Table.prototype.object = function() {
/**
* Add a row to the table
*
*
* @param rowCont Array of table row contents
*/
Table.prototype.add = function(rowCont) {
@ -204,7 +204,7 @@ Table.prototype.add = function(rowCont) {
/**
* Add a footer to the table
*
*
* @param rowCont Array of table row contents
*/
Table.prototype.addFooter = function(rowCont) {
@ -225,7 +225,7 @@ Table.prototype.remove = function(id) {
/**
* Datatable class constructor
*
*
* @param tabId Tab ID
* @param tabName Tab name
*/
@ -236,7 +236,7 @@ var DataTable = function(tableId) {
/**
* Initialize the datatable
*
*
* @param Headers Array of table headers
*/
DataTable.prototype.init = function(headers) {
@ -260,7 +260,7 @@ DataTable.prototype.init = function(headers) {
/**
* Return the datatable object
*
*
* @return Object representing the table
*/
DataTable.prototype.object = function() {
@ -269,7 +269,7 @@ DataTable.prototype.object = function() {
/**
* Add a row to the datatable
*
*
* @param rowCont Array of table row contents
*/
DataTable.prototype.add = function(rowCont) {
@ -290,7 +290,7 @@ DataTable.prototype.add = function(rowCont) {
/**
* Create status bar
*
*
* @param barId Status bar ID
*/
function createStatusBar(barId) {
@ -302,21 +302,21 @@ function createStatusBar(barId) {
'max-height': '150px',
'overflow': 'auto'
});
// Create info icon
var icon = $('<span class="ui-icon ui-icon-circle-check"></span>').css({
'display': 'inline-block',
'margin': '10px 5px',
'vertical-align': 'top'
});
// Create message section
var msg = $('<div></div>').css({
'display': 'inline-block',
'margin': '10px 0px',
'width': '90%'
});
// Create hide button
var hide = $('<span class="ui-icon ui-icon-minus"></span>').css({
'display': 'inline-block',
@ -326,7 +326,7 @@ function createStatusBar(barId) {
// Remove info box on-click
$(this).parent().hide();
});
statusBar.append(icon);
statusBar.append(msg);
statusBar.append(hide);
@ -335,7 +335,7 @@ function createStatusBar(barId) {
/**
* Create info bar
*
*
* @param msg Info message
* @return Info bar
*/
@ -353,7 +353,7 @@ function createInfoBar(msg) {
'display': 'inline-block',
'width': '90%'
});
infoBar.append(icon);
infoBar.append(barMsg);
return infoBar;
@ -361,7 +361,7 @@ function createInfoBar(msg) {
/**
* Create warning bar
*
*
* @param msg Warning message
* @return Warning bar
*/
@ -375,7 +375,7 @@ function createWarnBar(msg) {
'display': 'inline-block',
'width': '90%'
});
warnBar.append(icon);
warnBar.append(barMsg);
return warnBar;
@ -383,7 +383,7 @@ function createWarnBar(msg) {
/**
* Create a loader
*
*
* @param loaderId Loader ID
*/
function createLoader(loaderId) {
@ -393,7 +393,7 @@ function createLoader(loaderId) {
/**
* Create a button
*
*
* @param name Name of the button
*/
function createButton(name) {
@ -403,7 +403,7 @@ function createButton(name) {
/**
* Create a menu
*
*
* @param items An array of items to go into the menu
* @return A division containing the menu
*/
@ -424,17 +424,17 @@ function createMenu(items) {
} else {
item.append(items[i]);
}
menu.append(item);
}
return menu;
}
/**
* Initialize the page
*/
function initPage() {
function initPage() {
// Load theme
var theme = $.cookie('xcat_theme');
if (theme) {
@ -459,7 +459,7 @@ function initPage() {
break;
default:
includeCss("css/themes/jquery-ui-start.css");
}
}
} else {
includeCss("css/themes/jquery-ui-start.css");
}
@ -469,10 +469,10 @@ function initPage() {
includeCss("css/superfish.css");
// includeCss("css/jstree.css");
includeCss("css/jquery.jqplot.css");
// Load custom stylesheet
includeCss("css/style.css");
// JQuery plugins
includeJs("js/jquery/jquery.dataTables.min.js");
includeJs("js/jquery/jquery.form.min.js");
@ -490,13 +490,13 @@ function initPage() {
includeJs("js/jquery/jqplot.categoryAxisRenderer.min.js");
includeJs("js/jquery/jqplot.dateAxisRenderer.min.js");
includeJs("js/jquery/jquery.topzindex.min.js");
// Page plugins
includeJs("js/configure/configure.js");
includeJs("js/configure/configure.js");
includeJs("js/monitor/monitor.js");
includeJs("js/nodes/nodes.js");
includeJs("js/provision/provision.js");
// Custom plugins
includeJs("js/custom/esx.js");
includeJs("js/custom/kvm.js");
@ -506,11 +506,11 @@ function initPage() {
includeJs("js/custom/hmc.js");
includeJs("js/custom/customUtils.js");
// Enable settings link
// Enable settings link
$('#xcat_settings').click(function() {
openSettings();
});
// Set header to theme
var background = '', color = '';
var theme = $.cookie('xcat_theme');
@ -539,17 +539,17 @@ function initPage() {
break;
default:
background = '#6EAC2C';
}
}
} else {
background = '#6EAC2C';
}
$('#header').addClass('ui-state-default');
$('#header').css('border', '0px');
// Set theme to user span
$('#login_user').css('color', color);
// Style for selected page
var style = {
'background-color': background,
@ -560,26 +560,20 @@ function initPage() {
var url = window.location.pathname;
var page = url.replace('/xcat/', '');
var headers = $('#header ul li a');
// Show the page
$("#content").children().remove();
if (page == 'configure.php') {
includeJs("js/configure/update.js");
includeJs("js/configure/discover.js");
includeJs("js/configure/service.js");
includeJs("js/configure/users.js");
includeJs("js/configure/files.js");
headers.eq(1).css(style);
loadConfigPage();
} else if (page == 'provision.php') {
includeJs("js/provision/images.js");
headers.eq(2).css(style);
loadProvisionPage();
} else if (page == 'monitor.php') {
includeJs("js/monitor/xcatmon.js");
includeJs("js/monitor/rmcmon.js");
includeJs("js/monitor/gangliamon.js");
headers.eq(3).css(style);
loadMonitorPage();
} else if (page == 'help.php') {
includeJs("js/help/help.js");
headers.eq(4).css(style);
@ -589,8 +583,6 @@ function initPage() {
includeJs("js/nodes/nodeset.js");
includeJs("js/nodes/rnetboot.js");
includeJs("js/nodes/updatenode.js");
includeJs("js/nodes/physical.js");
includeJs("js/nodes/mtm.js");
includeJs("js/nodes/rscan.js");
headers.eq(0).css(style);
loadNodesPage();
@ -599,7 +591,7 @@ function initPage() {
/**
* Include javascript file in <head>
*
*
* @param file File to include
*/
function includeJs(file) {
@ -620,7 +612,7 @@ function includeJs(file) {
/**
* Include CSS link in <head>
*
*
* @param file File to include
*/
function includeCss(file) {
@ -642,7 +634,7 @@ function includeCss(file) {
/**
* Write ajax response to a paragraph
*
*
* @param rsp Ajax response
* @param pattern Pattern to replace with a break
* @return Paragraph containing ajax response
@ -650,7 +642,7 @@ function includeCss(file) {
function writeRsp(rsp, pattern) {
// Create paragraph to hold ajax response
var prg = $('<pre></pre>');
for ( var i in rsp) {
if (rsp[i]) {
// Create regular expression for given pattern
@ -661,7 +653,7 @@ function writeRsp(rsp, pattern) {
} else {
prg.append(rsp[i]);
prg.append('<br/>');
}
}
}
}
@ -670,7 +662,7 @@ function writeRsp(rsp, pattern) {
/**
* Open a dialog and show given message
*
*
* @param type Type of dialog, i.e. warn or info
* @param msg Message to show
*/
@ -678,7 +670,7 @@ function openDialog(type, msg) {
var msgDialog = $('<div></div>');
var title = "";
if (type == "warn") {
// Create warning message
// Create warning message
msgDialog.append(createWarnBar(msg));
title = "Warning";
} else {
@ -686,7 +678,7 @@ function openDialog(type, msg) {
msgDialog.append(createInfoBar(msg));
title = "Info";
}
// Open dialog
msgDialog.dialog({
title: title,
@ -696,7 +688,7 @@ function openDialog(type, msg) {
},
width: 500,
buttons: {
"Ok": function(){
"Ok": function(){
$(this).dialog("close");
}
}
@ -705,7 +697,7 @@ function openDialog(type, msg) {
/**
* Create an iframe to hold the output of an xCAT command
*
*
* @param src The URL of the document to show in the iframe
* @return Info box containing the iframe
*/
@ -714,7 +706,7 @@ function createIFrame(src) {
var infoBar = $('<div class="ui-state-highlight ui-corner-all"></div>').css({
'margin-bottom': '5px'
});
// Create info and close icons
var icon = $('<span class="ui-icon ui-icon-info"></span>').css({
'display': 'inline-block',
@ -728,28 +720,28 @@ function createIFrame(src) {
// Remove info box on-click
$(this).parent().remove();
});
var iframe = $('<iframe></iframe>').attr('src', src).css({
'display': 'block',
'border': '0px',
'margin': '10px',
'width': '100%'
});
var loader = createLoader('iLoader').css({
'display': 'block',
'margin': '10px 0px'
});
infoBar.append(icon);
infoBar.append($('<div style="display: inline-block; width: 90%;"></div>').append(loader, iframe));
infoBar.append(close);
// Remove loader when done
iframe.load(function() {
loader.remove();
});
return infoBar;
}
@ -762,19 +754,19 @@ function openSettings() {
var dialog = $('<div class="form"></div>');
var info = createInfoBar('Select from the following options');
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,
@ -789,13 +781,13 @@ function openSettings() {
}
}
});
// Bind to click event
changeThemeOption.click(function() {
dialog.dialog("close");
changeTheme();
});
changePasswordOption.click(function() {
dialog.dialog("close");
changePassword();
@ -810,7 +802,7 @@ function changeTheme() {
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 oList = $('<ol></ol>');
oList.append($('<li><input type="radio" name="theme" value="cupertino">Cupertino</li>'));
@ -820,7 +812,7 @@ function changeTheme() {
oList.append($('<li><input type="radio" name="theme" value="sunny">Sunny</li>'));
oList.append($('<li><input type="radio" name="theme" value="ui_dark">UI Darkness</li>'));
dialog.append(oList);
if ($.cookie('xcat_theme')) {
// Select theme
oList.find('input[value="' + $.cookie('xcat_theme') + '"]').attr('checked', true);
@ -841,12 +833,12 @@ function changeTheme() {
// Save selected theme
var theme = $(this).find('input[name="theme"]:checked').val();
$.cookie('xcat_theme', theme); // Do not expire cookie, keep it as long as possible
// Show instructions to apply theme
$(this).empty();
var info = createInfoBar('You will need to reload this page in order for changes to take effect');
$(this).append(info);
// Only show close button
$(this).dialog("option", "buttons", {
"Close" : function() {
@ -869,10 +861,10 @@ function changePassword() {
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,
@ -885,22 +877,22 @@ function changePassword() {
"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();
@ -909,14 +901,14 @@ function changePassword() {
dialog.prepend(createWarnBar("Please confirm new password!"));
return;
}
// Change dialog buttons
$('#changePassword').dialog('option', 'buttons', {
'Close':function(){
$('#changePassword').dialog('destroy').remove();
}
});
// Send request to change password
var url = window.location.pathname;
var page = url.replace('/xcat/', '');
@ -933,13 +925,13 @@ function changePassword() {
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));
}
});
@ -953,7 +945,7 @@ function changePassword() {
/**
* Adjust datatable column size
*
*
* @param tableId Table ID
*/
function adjustColumnSize(tableId) {
@ -963,7 +955,7 @@ function adjustColumnSize(tableId) {
/**
* Set menu theme
*
*
* @param menu Menu object
*/
function setMenu2Theme(menu) {
@ -995,18 +987,18 @@ function setMenu2Theme(menu) {
break;
default:
background = '#6EAC2C';
}
}
} else {
background = '#6EAC2C';
}
menu.css('background', background);
menu.find('a:eq(0)').css('color', color);
}
/**
* Set menu back to normal before applying theme
*
*
* @param menu Menu object
*/
function setMenu2Normal(menu) {
@ -1017,7 +1009,7 @@ function setMenu2Normal(menu) {
/**
* Get nodes that are checked in a given datatable
*
*
* @param datatableId The datatable ID
* @return Nodes that were checked
*/
@ -1028,10 +1020,10 @@ function getNodesChecked(datatableId) {
var nodes = $('#' + datatableId + ' input[type=checkbox]:checked');
for (var i in nodes) {
var tgtNode = nodes.eq(i).attr('name');
if (tgtNode) {
tgts += tgtNode;
// Add a comma at the end
if (i < nodes.length - 1) {
tgts += ',';
@ -1044,7 +1036,7 @@ function getNodesChecked(datatableId) {
/**
* Check if return message contains errors
*
*
* @param msg Return message
* @return 0 If return message contains no errors
* -1 If return message contains errors

View File

@ -81,7 +81,7 @@ function submit_request($req, $skipVerify, $opts_array){
// Open syslog, include the process ID and also send the log to standard error,
// and use a user defined logging mechanism
openlog("xcat", LOG_PID | LOG_PERROR, LOG_LOCAL0);
openlog("xCAT-UI", LOG_PID | LOG_PERROR, LOG_LOCAL0);
// Open a socket to xcatd
syslog(LOG_INFO, "Opening socket to xcatd...");

View File

@ -79,7 +79,7 @@ function submit_request($req, $skipVerify, $opts_array){
// Open syslog, include the process ID and also send
// the log to standard error, and use a user defined
// logging mechanism
openlog("xcat", LOG_PID | LOG_PERROR, LOG_LOCAL0);
openlog("xCAT-UI", LOG_PID | LOG_PERROR, LOG_LOCAL0);
// Open a socket to xcatd
syslog(LOG_INFO, "Opening socket to xcatd...");

View File

@ -25,7 +25,6 @@ function loadPage() {
<li><a href="index.php" class="top_link">Nodes</a></li>
<li><a href="configure.php" class="top_link">Configure</a></li>
<li><a href="provision.php" class="top_link">Provision</a></li>
<li><a href="monitor.php" class="top_link">Monitor</a></li>
<li><a href="help.php" class="top_link">Help</a></li>
</ul>';

View File

@ -19,6 +19,12 @@ Requires: xCAT-UI-deps >= 2.6
Distribution: %{?_distribution:%{_distribution}}%{!?_distribution:%{_vendor}}
Prefix: /opt/xcat
%define s390x %(if [ "$s390x" = "1" ];then echo 1; else echo 0; fi)
%define nots390x %(if [ "$s390x" = "1" ];then echo 0; else echo 1; fi)
# Define a different location for various httpd configs in s390x mode
%define httpconfigdir %(if [ "$s390x" = "1" ];then echo "xcathttpdsave"; else echo "xcat"; fi)
%ifos linux
# httpd is provided as apache2 on SLES and httpd on RHEL
Requires: httpd
@ -35,39 +41,24 @@ Provides a browser-based interface for xCAT (Extreme Cloud Administration Toolki
# Minify Javascript files using Google Compiler
echo "Minifying Javascripts... This will take a couple of minutes."
COMPILER_JAR='/xcat2/build/tools/compiler.jar'
#COMPILER_JAR='/xcat2/build/tools/compiler.jar'
COMPILER_JAR='/root/scripts/compiler.jar'
UI_JS="js/"
%ifos linux
JAVA='/opt/ibm/java-ppc64-60/jre/bin/java'
JAVA='/usr/bin/java'
# Find all Javascript files
declare -a FILES
FILES=`find ${UI_JS} -name '*.js'`
for i in ${FILES[*]}; do
# Ignore Javascripts that are already minified
if [[ ! $i =~ '.*\.min\.js$' ]]; then
echo " Minifying $i ..."
`${JAVA} -jar ${COMPILER_JAR} --warning_level=QUIET --js=$i --js_output_file=$i.min`
# Remove old Javascript and replace it with minified version
rm -rf $i
mv $i.min $i
fi
done
# Ignore Javascripts that are already minified
if [[ ! $i =~ '.*\.min\.js$' ]]; then
echo " Minifying $i ..."
`${JAVA} -jar ${COMPILER_JAR} --warning_level=QUIET --js=$i --js_output_file=$i.min`
%else # AIX
JAVA='/usr/java6_64/bin/java'
# Find all Javascript files
FILES=`find ${UI_JS} -name '*.js'`
for i in ${FILES[*]}; do
# Ignore Javascripts that are already minified
if [[ ! $i = @(*.min.js) ]]; then
echo " Minifying $i ..."
`${JAVA} -jar ${COMPILER_JAR} --warning_level=QUIET --js=$i --js_output_file=$i.min`
# Remove old Javascript and replace it with minified version
rm -rf $i
mv $i.min $i
# Remove old Javascript and replace it with minified version
rm -rf $i
mv $i.min $i
fi
done
%endif
@ -81,6 +72,12 @@ rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT%{prefix}/ui
cp -r * $RPM_BUILD_ROOT%{prefix}/ui
chmod 755 $RPM_BUILD_ROOT%{prefix}/ui/*
mkdir -p $RPM_BUILD_ROOT/etc/%httpconfigdir/conf.orig
mkdir -p $RPM_BUILD_ROOT/etc/apache2/conf.d
mkdir -p $RPM_BUILD_ROOT/etc/httpd/conf.d
mkdir -p $RPM_BUILD_ROOT%{prefix}/etc/%httpconfigdir/conf.orig
#mkdir -p $RPM_BUILD_ROOT%{prefix}/etc/apache2/conf.d
#mkdir -p $RPM_BUILD_ROOT%{prefix}/etc/httpd/conf.d
# Copy over xCAT UI plugins
mkdir -p $RPM_BUILD_ROOT/%{prefix}/lib/perl/xCAT_plugin
@ -88,11 +85,24 @@ cp xcat/plugins/* $RPM_BUILD_ROOT/%{prefix}/lib/perl/xCAT_plugin
chmod 644 $RPM_BUILD_ROOT/%{prefix}/lib/perl/xCAT_plugin/web.pm
chmod 644 $RPM_BUILD_ROOT/%{prefix}/lib/perl/xCAT_plugin/webportal.pm
#Copy the different conf files for httpd
cp etc/apache2/conf.d/xcat-ui.conf.apach22 $RPM_BUILD_ROOT/etc/%httpconfigdir/conf.orig/xcat-ui.conf.apach22
cp etc/apache2/conf.d/xcat-ui.conf.apach24 $RPM_BUILD_ROOT/etc/%httpconfigdir/conf.orig/xcat-ui.conf.apach24
#install lower version(<2.4) apache/httpd conf files by default
cp $RPM_BUILD_ROOT/etc/%httpconfigdir/conf.orig/xcat-ui.conf.apach22 $RPM_BUILD_ROOT/etc/apache2/conf.d/xcat-ui.conf
cp $RPM_BUILD_ROOT/etc/%httpconfigdir/conf.orig/xcat-ui.conf.apach22 $RPM_BUILD_ROOT/etc/httpd/conf.d/xcat-ui.conf
# Create symbolic link to webportal command
mkdir -p $RPM_BUILD_ROOT/%{prefix}/bin
ln -sf ../bin/xcatclientnnr $RPM_BUILD_ROOT/%{prefix}/bin/webportal
mkdir -p $RPM_BUILD_ROOT%{prefix}/bin
ln -sf ../bin/xcatclientnnr $RPM_BUILD_ROOT%{prefix}/bin/webportal
%files
/etc/apache2/conf.d/xcat-ui.conf
/etc/httpd/conf.d/xcat-ui.conf
/etc/%httpconfigdir/conf.orig/xcat-ui.conf.apach22
/etc/%httpconfigdir/conf.orig/xcat-ui.conf.apach24
%defattr(-,root,root)
%{prefix}
@ -100,19 +110,28 @@ ln -sf ../bin/xcatclientnnr $RPM_BUILD_ROOT/%{prefix}/bin/webportal
#********** Pre-install **********
# Inspect whether PHP related RPM packages are installed
%ifos linux
if [ -e "/etc/redhat-release" ]; then
if [ ! -e "/etc/httpd/conf.d/php.conf" ]; then
echo ""
echo "Error! php has not been installed. Please run 'yum install php' before installing xCAT-UI.";
exit -1;
fi
else # SUSE
if [ ! -e "/etc/apache2/conf.d/php5.conf" ]; then
echo ""
echo "Error! apache2-mod_php5 and php5 have not been installed. Please run 'zypper install apache2-mod_php5 php5' before installing xCAT-UI."
exit -1;
fi
fi
if [ -e "/etc/redhat-release" ]; then
rpm -q php >/dev/null
if [ $? != 0 ]; then
echo ""
echo "Error! php has not been installed. Please run 'yum install php' before installing xCAT-UI.";
exit -1;
fi
elif [ -e "/opt/ibm/cmo/version" ]; then # IBM Cloud Manager Appliance
rpm -q php >/dev/null
if [ $? != 0 ]; then
echo ""
echo "Error! Can not find php. Please make sure php is installed before installing xCAT-UI.";
exit -1;
fi
else # SUSE
rpm -q apache2-mod_php5 php5 >/dev/null
if [ $? != 0 ]; then
echo ""
echo "Error! apache2-mod_php5 and php5 have not been installed. Please run 'zypper install apache2-mod_php5 php5' before installing xCAT-UI."
exit -1;
fi
fi
%else # AIX
if [ -e "/usr/IBM/HTTPServer/conf/httpd.conf" ]; then
echo "Installing xCAT-UI on AIX..."
@ -127,92 +146,74 @@ ln -sf ../bin/xcatclientnnr $RPM_BUILD_ROOT/%{prefix}/bin/webportal
#********** Post-install **********
# Get apache name
%ifos linux
if [ -e "/etc/redhat-release" ]; then
apachedaemon='httpd'
apacheuser='apache'
else # SUSE
apachedaemon='apache2'
apacheuser='wwwrun'
fi
if [ "$1" = 1 ] # Install
then
# Automatically put encrypted password into the xCAT passwd database
%{prefix}/sbin/chtab key=xcat,username=root passwd.password=`grep root /etc/shadow|cut -d : -f 2`
if [ "$1" = 1 ] # Install
then
# Update apache conf
/bin/rm -f /etc/$apachedaemon/conf.d/xcat-ui.conf
/bin/ln -s %{prefix}/ui/etc/apache2/conf.d/xcat-ui.conf /etc/$apachedaemon/conf.d/xcat-ui.conf
# Automatically put encrypted password into the xCAT passwd database
%{prefix}/sbin/chtab key=xcat,username=root passwd.password=`grep root /etc/shadow|cut -d : -f 2`
echo "To use xCAT-UI, point your browser to http://"`hostname -f`"/xcat"
fi
if [ "$1" = 1 ] || [ "$1" = 2 ] # Install or upgrade
then
# Restart xCAT
/etc/init.d/xcatd restart
# Copy php.ini file into /opt/xcat/ui and turn off output_buffering
if [ -e "/etc/redhat-release" ]; then
/bin/sed /etc/php.ini -e 's/output_buffering = 4096/output_buffering = Off/g' > %{prefix}/ui/php.ini
else # SUSE
/bin/sed /etc/php5/apache2/php.ini -e 's/output_buffering = 4096/output_buffering = Off/g' > %{prefix}/ui/php.ini
fi
# Restart Apache Server
/etc/init.d/$apachedaemon restart
true
fi
%else # AIX
ihs_config_dir='/usr/IBM/HTTPServer/conf'
if [ "$1" = 1 ] #initial install
then
# Check if IBM HTTP Server is installed in the default directory
# Update the apache config
echo "Updating IBM HTTP server configuration for xCAT..."
bin/rm -f /usr/IBM/HTTPServer/conf/xcat-ui.conf
cp /usr/IBM/HTTPServer/conf/httpd.conf /usr/IBM/HTTPServer/conf/httpd.conf.xcat.ui.bak
cat ../ui/etc/apache2/conf.d/xcat-ui.conf >> /usr/IBM/HTTPServer/conf/httpd.conf
/usr/IBM/HTTPServer/bin/apachectl restart
# Put the encrypted password in /etc/security/passwd into the xcat passwd database
CONT=`cat /etc/security/passwd`
%{prefix}/sbin/chtab key=xcat,username=root passwd.password=`echo $CONT |cut -d ' ' -f 4`
fi
echo "To use xCAT-UI, point your browser to http://"`hostname -f`"/xcat"
fi
if [ "$1" = 1 ] || [ "$1" = 2 ] # Install or upgrade
then
# Uncomment this if we change xcat-ui.conf again
# /etc/init.d/$apachedaemon restart
true
fi
%endif
# If httpd is 2.4 or newer, use the file with the new configuration options
#Apply the correct httpd/apache configuration file according to the httpd/apache version
if [ -n "$(httpd -v 2>&1 |grep -e '^Server version\s*:.*\/2.4')" ]
then
/bin/rm -rf /etc/httpd/conf.d/xcat-ui.conf
/bin/rm -rf /opt/xcat/ui/etc/apache2/conf.d/xcat-ui.conf
/bin/cp -f /etc/%httpconfigdir/conf.orig/xcat-ui.conf.apach24 /etc/httpd/conf.d/xcat-ui.conf
/bin/cp -f /etc/%httpconfigdir/conf.orig/xcat-ui.conf.apach24 /etc/apache2/conf.d/xcat-ui.conf
fi
%preun
#********** Pre-uninstall **********
%ifos linux
if [ "$1" = 0 ] # RPM being removed
then
if [ -e "/etc/redhat-release" ]; then
apachedaemon='httpd'
apacheuser='apache'
else # SUSE
apachedaemon='apache2'
apacheuser='wwwrun'
fi
# Remove links made during the post install script
echo "Undoing $apachedaemon configuration for xCAT..."
/bin/rm -f /etc/$apachedaemon/conf.d/xcat-ui.conf
/bin/rm -f %{prefix}/ui/php.ini
/etc/init.d/$apachedaemon reload
fi
if [ -n "$(apachectl -v 2>&1 |grep -e '^Server version\s*:.*\/2.4')" ]
then
/bin/rm -rf /etc/httpd/conf.d/xcat-ui.conf
/bin/rm -rf /opt/xcat/ui/etc/apache2/conf.d/xcat-ui.conf
/bin/cp -f /etc/%httpconfigdir/conf.orig/xcat-ui.conf.apach24 /etc/httpd/conf.d/xcat-ui.conf
/bin/cp -f /etc/%httpconfigdir/conf.orig/xcat-ui.conf.apach24 /etc/apache2/conf.d/xcat-ui.conf
fi
if [ -n "$(apache2ctl -v 2>&1 |grep -e '^Server version\s*:.*\/2.4')" ]
then
/bin/rm -rf /etc/httpd/conf.d/xcat-ui.conf
/bin/rm -rf /opt/xcat/ui/etc/apache2/conf.d/xcat-ui.conf
/bin/cp -f /etc/%httpconfigdir/conf.orig/xcat-ui.conf.apach24 /etc/httpd/conf.d/xcat-ui.conf
/bin/cp -f /etc/%httpconfigdir/conf.orig/xcat-ui.conf.apach24 /etc/apache2/conf.d/xcat-ui.conf
fi
if [ "$1" = 1 ] || [ "$1" = 2 ] # Install or upgrade
then
# Restart xCAT
/etc/init.d/xcatd restart
# Copy php.ini file into /opt/xcat/ui and turn off output_buffering
if [ -e "/etc/redhat-release" ]; then
/bin/sed /etc/php.ini -e 's/output_buffering = 4096/output_buffering = Off/g' > %{prefix}/ui/php.ini
elif [ -e "/opt/ibm/cmo/version" ]; then # IBM Cloud Manager Appliance
/bin/sed /etc/php.ini -e 's/output_buffering = 4096/output_buffering = Off/g' > %{prefix}/ui/php.ini
else # SUSE
/bin/sed /etc/php5/apache2/php.ini -e 's/output_buffering = 4096/output_buffering = Off/g' > %{prefix}/ui/php.ini
fi
# Restart Apache Server
/etc/init.d/httpd restart
true
fi
%else # AIX
# Remove links made during the post install script
echo "Undoing IBM HTTP Server configuration for xCAT..."
if [ -e "/usr/IBM/HTTPServer/conf/httpd.conf.xcat.ui.bak" ];then
cp /usr/IBM/HTTPServer/conf/httpd.conf.xcat.ui.bak /usr/IBM/HTTPServer/conf/httpd.conf
rm -rf /usr/IBM/HTTPServer/conf/httpd.conf.xcat.ui.bak
fi
/usr/IBM/HTTPServer/bin/apachectl restart
ihs_config_dir='/usr/IBM/HTTPServer/conf'
if [ "$1" = 1 ] #initial install
then
# Check if IBM HTTP Server is installed in the default directory
# Update the apache config
echo "Updating IBM HTTP server configuration for xCAT..."
bin/rm -f /usr/IBM/HTTPServer/conf/xcat-ui.conf
cp /usr/IBM/HTTPServer/conf/httpd.conf /usr/IBM/HTTPServer/conf/httpd.conf.xcat.ui.bak
cat ../ui/etc/apache2/conf.d/xcat-ui.conf >> /usr/IBM/HTTPServer/conf/httpd.conf
/usr/IBM/HTTPServer/bin/apachectl restart
# Put the encrypted password in /etc/security/passwd into the xcat passwd database
CONT=`cat /etc/security/passwd`
%{prefix}/sbin/chtab key=xcat,username=root passwd.password=`echo $CONT |cut -d ' ' -f 4`
fi
%endif

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff