Enable self-service portal for other platforms.
git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@10685 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
parent
a312ff54c1
commit
95aed4e760
@ -14,6 +14,28 @@ var bladePlugin = function() {
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Load provision page (service page)
|
||||
*
|
||||
* @param tabId
|
||||
* Tab ID where page will reside
|
||||
* @return Nothing
|
||||
*/
|
||||
bladePlugin.prototype.loadServiceProvisionPage = function(tabId) {
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Show node inventory (service page)
|
||||
*
|
||||
* @param data
|
||||
* Data from HTTP request
|
||||
* @return Nothing
|
||||
*/
|
||||
bladePlugin.prototype.loadServiceInventory = function(data) {
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Load node inventory
|
||||
*
|
||||
|
@ -14,6 +14,28 @@ var hmcPlugin = function() {
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Load provision page (service page)
|
||||
*
|
||||
* @param tabId
|
||||
* Tab ID where page will reside
|
||||
* @return Nothing
|
||||
*/
|
||||
hmcPlugin.prototype.loadServiceProvisionPage = function(tabId) {
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Show node inventory (service page)
|
||||
*
|
||||
* @param data
|
||||
* Data from HTTP request
|
||||
* @return Nothing
|
||||
*/
|
||||
hmcPlugin.prototype.loadServiceInventory = function(data) {
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Load node inventory
|
||||
*
|
||||
|
@ -14,6 +14,28 @@ var ipmiPlugin = function() {
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Load provision page (service page)
|
||||
*
|
||||
* @param tabId
|
||||
* Tab ID where page will reside
|
||||
* @return Nothing
|
||||
*/
|
||||
ipmiPlugin.prototype.loadServiceProvisionPage = function(tabId) {
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Show node inventory (service page)
|
||||
*
|
||||
* @param data
|
||||
* Data from HTTP request
|
||||
* @return Nothing
|
||||
*/
|
||||
ipmiPlugin.prototype.loadServiceInventory = function(data) {
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Load node inventory
|
||||
*
|
||||
|
@ -15,6 +15,399 @@ var zvmPlugin = function() {
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Load provision page (service page)
|
||||
*
|
||||
* @param tabId
|
||||
* Tab ID where page will reside
|
||||
* @return Nothing
|
||||
*/
|
||||
zvmPlugin.prototype.loadServiceProvisionPage = function(tabId) {
|
||||
// Create provision form
|
||||
var provForm = $('<div></div>');
|
||||
|
||||
// Create info bar
|
||||
var infoBar = createInfoBar('Provision a Linux virtual machine on System z by selecting the appropriate choices below. Once you are ready, click on Provision to provision the virtual machine.');
|
||||
provForm.append(infoBar);
|
||||
|
||||
// Append to provision tab
|
||||
$('#' + tabId).append(provForm);
|
||||
|
||||
// Create provision table
|
||||
var provTable = $('<table id="select-table" style="margin: 10px;"></table');
|
||||
var provHeader = $('<thead class="ui-widget-header"> <th>zVM</th> <th>Group</th> <th>Image</th></thead>');
|
||||
var provBody = $('<tbody></tbody>');
|
||||
var provFooter = $('<tfoot></tfoot>');
|
||||
provTable.append(provHeader, provBody, provFooter);
|
||||
provForm.append(provTable);
|
||||
|
||||
provHeader.children('th').css({
|
||||
'font': 'bold 12px verdana, arial, helvetica, sans-serif'
|
||||
});
|
||||
|
||||
// Create row to contain selections
|
||||
var provRow = $('<tr></tr>');
|
||||
provBody.append(provRow);
|
||||
// Create columns for zVM, group, and image
|
||||
var zvmCol = $('<td style="vertical-align: top;"></td>');
|
||||
provRow.append(zvmCol);
|
||||
var groupCol = $('<td style="vertical-align: top;"></td>');
|
||||
provRow.append(groupCol);
|
||||
var imageCol = $('<td style="vertical-align: top;"></td>');
|
||||
provRow.append(imageCol);
|
||||
|
||||
// Load zVMs, groups, and images into their respective columns
|
||||
loadzVMs(zvmCol);
|
||||
loadGroups(groupCol);
|
||||
loadOSImages(imageCol);
|
||||
|
||||
provRow.children('td').css({
|
||||
'min-width': '250px'
|
||||
});
|
||||
|
||||
/**
|
||||
* Provision VM
|
||||
*/
|
||||
var provisionBtn = createButton('Provision');
|
||||
provisionBtn.bind('click', function(event) {
|
||||
var hcp = $('#select-table tbody tr:eq(0) td:eq(0) input[name="hcp"]:checked').val();
|
||||
var group = $('#select-table tbody tr:eq(0) td:eq(1) input[name="group"]:checked').val();
|
||||
var img = $('#select-table tbody tr:eq(0) td:eq(2) input[name="image"]:checked').val();
|
||||
var owner = $.cookie('srv_usrname');;
|
||||
|
||||
// Begin by creating VM
|
||||
createzVM(tabId, group, hcp, img, owner);
|
||||
});
|
||||
provForm.append(provisionBtn);
|
||||
};
|
||||
|
||||
/**
|
||||
* Show node inventory (service page)
|
||||
*
|
||||
* @param data
|
||||
* Data from HTTP request
|
||||
* @return Nothing
|
||||
*/
|
||||
zvmPlugin.prototype.loadServiceInventory = function(data) {
|
||||
var args = data.msg.split(',');
|
||||
|
||||
// Get tab ID
|
||||
var tabId = args[0].replace('out=', '');
|
||||
// Get node
|
||||
var node = args[1].replace('node=', '');
|
||||
// Get node inventory
|
||||
var inv = data.rsp[0].split(node + ':');
|
||||
|
||||
// Remove loader
|
||||
$('#' + tabId).find('img').remove();
|
||||
|
||||
// Create array of property keys
|
||||
var keys = new Array('userId', 'host', 'os', 'arch', 'hcp', 'priv', 'memory', 'proc', 'disk', 'nic');
|
||||
|
||||
// Create hash table for property names
|
||||
var attrNames = new Object();
|
||||
attrNames['userId'] = 'z/VM UserID:';
|
||||
attrNames['host'] = 'z/VM Host:';
|
||||
attrNames['os'] = 'Operating System:';
|
||||
attrNames['arch'] = 'Architecture:';
|
||||
attrNames['hcp'] = 'HCP:';
|
||||
attrNames['priv'] = 'Privileges:';
|
||||
attrNames['memory'] = 'Total Memory:';
|
||||
attrNames['proc'] = 'Processors:';
|
||||
attrNames['disk'] = 'Disks:';
|
||||
attrNames['nic'] = 'NICs:';
|
||||
|
||||
// Create hash table for node attributes
|
||||
var attrs = getAttrs(keys, attrNames, inv);
|
||||
|
||||
// Create division to hold inventory
|
||||
var invDivId = node + 'Inventory';
|
||||
var invDiv = $('<div class="inventory" id="' + invDivId + '"></div>');
|
||||
|
||||
var infoBar = createInfoBar('Below is the inventory for the virtual machine you selected.');
|
||||
invDiv.append(infoBar);
|
||||
|
||||
/**
|
||||
* General info section
|
||||
*/
|
||||
var fieldSet = $('<fieldset></fieldset>');
|
||||
var legend = $('<legend>General</legend>');
|
||||
fieldSet.append(legend);
|
||||
var oList = $('<ol></ol>');
|
||||
var item, label, args;
|
||||
|
||||
// Loop through each property
|
||||
for ( var k = 0; k < 5; k++) {
|
||||
// Create a list item for each property
|
||||
item = $('<li></li>');
|
||||
|
||||
// Create a label - Property name
|
||||
label = $('<label>' + attrNames[keys[k]] + '</label>');
|
||||
item.append(label);
|
||||
|
||||
for ( var l = 0; l < attrs[keys[k]].length; l++) {
|
||||
// Create a input - Property value(s)
|
||||
// Handle each property uniquely
|
||||
item.append(attrs[keys[k]][l]);
|
||||
}
|
||||
|
||||
oList.append(item);
|
||||
}
|
||||
// Append to inventory form
|
||||
fieldSet.append(oList);
|
||||
invDiv.append(fieldSet);
|
||||
|
||||
/**
|
||||
* Monitoring section
|
||||
*/
|
||||
fieldSet = $('<fieldset id="' + node + '_monitor"></fieldset>');
|
||||
legend = $('<legend>Monitoring</legend>');
|
||||
fieldSet.append(legend);
|
||||
getMonitorMetrics(node);
|
||||
|
||||
// Append to inventory form
|
||||
invDiv.append(fieldSet);
|
||||
|
||||
/**
|
||||
* Hardware info section
|
||||
*/
|
||||
var hwList, hwItem;
|
||||
fieldSet = $('<fieldset></fieldset>');
|
||||
legend = $('<legend>Hardware</legent>');
|
||||
fieldSet.append(legend);
|
||||
oList = $('<ol></ol>');
|
||||
|
||||
// Loop through each property
|
||||
var label;
|
||||
for (k = 5; k < keys.length; k++) {
|
||||
// Create a list item
|
||||
item = $('<li></li>');
|
||||
|
||||
// Create a list to hold the property value(s)
|
||||
hwList = $('<ul></ul>');
|
||||
hwItem = $('<li></li>');
|
||||
|
||||
/**
|
||||
* Privilege section
|
||||
*/
|
||||
if (keys[k] == 'priv') {
|
||||
// Create a label - Property name
|
||||
label = $('<label>' + attrNames[keys[k]].replace(':', '') + '</label>');
|
||||
item.append(label);
|
||||
|
||||
// Loop through each line
|
||||
for (l = 0; l < attrs[keys[k]].length; l++) {
|
||||
// Create a new list item for each line
|
||||
hwItem = $('<li></li>');
|
||||
|
||||
// Determine privilege
|
||||
args = attrs[keys[k]][l].split(' ');
|
||||
if (args[0] == 'Directory:') {
|
||||
label = $('<label>' + args[0] + '</label>');
|
||||
hwItem.append(label);
|
||||
hwItem.append(args[1]);
|
||||
} else if (args[0] == 'Currently:') {
|
||||
label = $('<label>' + args[0] + '</label>');
|
||||
hwItem.append(label);
|
||||
hwItem.append(args[1]);
|
||||
}
|
||||
|
||||
hwList.append(hwItem);
|
||||
}
|
||||
|
||||
item.append(hwList);
|
||||
}
|
||||
|
||||
/**
|
||||
* Memory section
|
||||
*/
|
||||
else if (keys[k] == 'memory') {
|
||||
// Create a label - Property name
|
||||
label = $('<label>' + attrNames[keys[k]].replace(':', '') + '</label>');
|
||||
item.append(label);
|
||||
|
||||
// Loop through each value line
|
||||
for (l = 0; l < attrs[keys[k]].length; l++) {
|
||||
// Create a new list item for each line
|
||||
hwItem = $('<li></li>');
|
||||
hwItem.append(attrs[keys[k]][l]);
|
||||
hwList.append(hwItem);
|
||||
}
|
||||
|
||||
item.append(hwList);
|
||||
}
|
||||
|
||||
/**
|
||||
* Processor section
|
||||
*/
|
||||
else if (keys[k] == 'proc') {
|
||||
// Create a label - Property name
|
||||
label = $('<label><b>' + attrNames[keys[k]].replace(':', '') + '</b></label>');
|
||||
item.append(label);
|
||||
|
||||
// Create a table to hold processor data
|
||||
var procTable = $('<table></table>');
|
||||
var procBody = $('<tbody></tbody>');
|
||||
|
||||
// Table columns - Type, Address, ID, Base, Dedicated, and Affinity
|
||||
var procTabRow = $('<thead class="ui-widget-header"> <th>Type</th> <th>Address</th> <th>ID</th> <th>Base</th> <th>Dedicated</th> <th>Affinity</th> </thead>');
|
||||
procTable.append(procTabRow);
|
||||
var procType, procAddr, procId, procAff;
|
||||
|
||||
// Loop through each processor
|
||||
var n, temp;
|
||||
for (l = 0; l < attrs[keys[k]].length; l++) {
|
||||
if (attrs[keys[k]][l]) {
|
||||
args = attrs[keys[k]][l].split(' ');
|
||||
|
||||
// Get processor type, address, ID, and affinity
|
||||
n = 3;
|
||||
temp = args[args.length - n];
|
||||
while (!jQuery.trim(temp)) {
|
||||
n = n + 1;
|
||||
temp = args[args.length - n];
|
||||
}
|
||||
procType = $('<td>' + temp + '</td>');
|
||||
procAddr = $('<td>' + args[1] + '</td>');
|
||||
procId = $('<td>' + args[5] + '</td>');
|
||||
procAff = $('<td>' + args[args.length - 1] + '</td>');
|
||||
|
||||
// Base processor
|
||||
if (args[6] == '(BASE)') {
|
||||
baseProc = $('<td>' + true + '</td>');
|
||||
} else {
|
||||
baseProc = $('<td>' + false + '</td>');
|
||||
}
|
||||
|
||||
// Dedicated processor
|
||||
if (args[args.length - 3] == 'DEDICATED') {
|
||||
dedicatedProc = $('<td>' + true + '</td>');
|
||||
} else {
|
||||
dedicatedProc = $('<td>' + false + '</td>');
|
||||
}
|
||||
|
||||
// Create a new row for each processor
|
||||
procTabRow = $('<tr></tr>');
|
||||
procTabRow.append(procType);
|
||||
procTabRow.append(procAddr);
|
||||
procTabRow.append(procId);
|
||||
procTabRow.append(baseProc);
|
||||
procTabRow.append(dedicatedProc);
|
||||
procTabRow.append(procAff);
|
||||
procBody.append(procTabRow);
|
||||
}
|
||||
}
|
||||
|
||||
procTable.append(procBody);
|
||||
item.append(procTable);
|
||||
}
|
||||
|
||||
/**
|
||||
* Disk section
|
||||
*/
|
||||
else if (keys[k] == 'disk') {
|
||||
// Create a label - Property name
|
||||
label = $('<label><b>' + attrNames[keys[k]].replace(':', '') + '</b></label>');
|
||||
item.append(label);
|
||||
|
||||
// Create a table to hold disk (DASD) data
|
||||
var dasdTable = $('<table></table>');
|
||||
var dasdBody = $('<tbody></tbody>');
|
||||
|
||||
// Table columns - Virtual Device, Type, VolID, Type of Access, and Size
|
||||
var dasdTabRow = $('<thead class="ui-widget-header"> <th>Virtual Device #</th> <th>Type</th> <th>VolID</th> <th>Type of Access</th> <th>Size</th> </thead>');
|
||||
dasdTable.append(dasdTabRow);
|
||||
var dasdVDev, dasdType, dasdVolId, dasdAccess, dasdSize;
|
||||
|
||||
// Loop through each DASD
|
||||
for (l = 0; l < attrs[keys[k]].length; l++) {
|
||||
if (attrs[keys[k]][l]) {
|
||||
args = attrs[keys[k]][l].split(' ');
|
||||
|
||||
// Get DASD virtual device, type, volume ID, access, and size
|
||||
dasdVDev = $('<td>' + args[1] + '</td>');
|
||||
dasdType = $('<td>' + args[2] + '</td>');
|
||||
dasdVolId = $('<td>' + args[3] + '</td>');
|
||||
dasdAccess = $('<td>' + args[4] + '</td>');
|
||||
dasdSize = $('<td>' + args[args.length - 9] + ' ' + args[args.length - 8] + '</td>');
|
||||
|
||||
// Create a new row for each DASD
|
||||
dasdTabRow = $('<tr></tr>');
|
||||
dasdTabRow.append(dasdVDev);
|
||||
dasdTabRow.append(dasdType);
|
||||
dasdTabRow.append(dasdVolId);
|
||||
dasdTabRow.append(dasdAccess);
|
||||
dasdTabRow.append(dasdSize);
|
||||
dasdBody.append(dasdTabRow);
|
||||
}
|
||||
}
|
||||
|
||||
dasdTable.append(dasdBody);
|
||||
item.append(dasdTable);
|
||||
}
|
||||
|
||||
/**
|
||||
* NIC section
|
||||
*/
|
||||
else if (keys[k] == 'nic') {
|
||||
// Create a label - Property name
|
||||
label = $('<label><b>' + attrNames[keys[k]].replace(':', '') + '</b></label>');
|
||||
item.append(label);
|
||||
|
||||
// Create a table to hold NIC data
|
||||
var nicTable = $('<table></table>');
|
||||
var nicBody = $('<tbody></tbody>');
|
||||
|
||||
// Table columns - Virtual device, Adapter Type, Port Name, # of Devices, MAC Address, and LAN Name
|
||||
var nicTabRow = $('<thead class="ui-widget-header"><th>Virtual Device #</th> <th>Adapter Type</th> <th>Port Name</th> <th># of Devices</th> <th>LAN Name</th></thead>');
|
||||
nicTable.append(nicTabRow);
|
||||
var nicVDev, nicType, nicPortName, nicNumOfDevs, nicLanName;
|
||||
|
||||
// Loop through each NIC (Data contained in 2 lines)
|
||||
for (l = 0; l < attrs[keys[k]].length; l = l + 2) {
|
||||
if (attrs[keys[k]][l]) {
|
||||
args = attrs[keys[k]][l].split(' ');
|
||||
|
||||
// Get NIC virtual device, type, port name, and number of devices
|
||||
nicVDev = $('<td>' + args[1] + '</td>');
|
||||
nicType = $('<td>' + args[3] + '</td>');
|
||||
nicPortName = $('<td>' + args[10] + '</td>');
|
||||
nicNumOfDevs = $('<td>' + args[args.length - 1] + '</td>');
|
||||
|
||||
args = attrs[keys[k]][l + 1].split(' ');
|
||||
nicLanName = $('<td>' + args[args.length - 2] + ' ' + args[args.length - 1] + '</td>');
|
||||
|
||||
// Create a new row for each DASD
|
||||
nicTabRow = $('<tr></tr>');
|
||||
nicTabRow.append(nicVDev);
|
||||
nicTabRow.append(nicType);
|
||||
nicTabRow.append(nicPortName);
|
||||
nicTabRow.append(nicNumOfDevs);
|
||||
nicTabRow.append(nicLanName);
|
||||
|
||||
nicBody.append(nicTabRow);
|
||||
}
|
||||
}
|
||||
|
||||
nicTable.append(nicBody);
|
||||
item.append(nicTable);
|
||||
}
|
||||
|
||||
oList.append(item);
|
||||
}
|
||||
|
||||
// Append inventory to division
|
||||
fieldSet.append(oList);
|
||||
invDiv.append(fieldSet);
|
||||
invDiv.find('th').css({
|
||||
'padding': '5px 10px',
|
||||
'font-weight': 'bold'
|
||||
});
|
||||
|
||||
// Append to tab
|
||||
$('#' + tabId).append(invDiv);
|
||||
};
|
||||
|
||||
/**
|
||||
* Load clone page
|
||||
*
|
||||
|
@ -1676,25 +1676,6 @@ function removeNic(node, nic) {
|
||||
$('#' + node + 'StatusBar').show();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a cookie for disk pool names of a given node
|
||||
*
|
||||
* @param data
|
||||
* Data from HTTP request
|
||||
* @return Nothing
|
||||
*/
|
||||
function setDiskPoolCookies(data) {
|
||||
if (data.rsp) {
|
||||
var node = data.msg;
|
||||
var pools = data.rsp[0].split(node + ': ');
|
||||
|
||||
// Set cookie to expire in 60 minutes
|
||||
var exDate = new Date();
|
||||
exDate.setTime(exDate.getTime() + (60 * 60 * 1000));
|
||||
$.cookie(node + 'diskpools', pools, { expires: exDate });
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a cookie for the network names of a given node
|
||||
*
|
||||
@ -2635,4 +2616,230 @@ function createZProvisionNew(inst) {
|
||||
provNew.append(provisionBtn);
|
||||
|
||||
return provNew;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load zVMs into column (service page)
|
||||
*
|
||||
* @param col
|
||||
* Table column where OS images will be placed
|
||||
* @return Nothing
|
||||
*/
|
||||
function loadzVMs(col) {
|
||||
// Get group names and description and append to group column
|
||||
var groupNames = $.cookie('srv_zvms').split(',');
|
||||
var radio, zvmBlock, args, zvm, hcp;
|
||||
for (var i in groupNames) {
|
||||
args = groupNames[i].split(':');
|
||||
zvm = args[0];
|
||||
hcp = args[1];
|
||||
|
||||
// Create block for each group
|
||||
zvmBlock = $('<div class="ui-state-default"></div>').css({
|
||||
'border': '1px solid',
|
||||
'max-width': '200px',
|
||||
'margin': '5px auto',
|
||||
'padding': '5px',
|
||||
'display': 'block',
|
||||
'vertical-align': 'middle',
|
||||
'cursor': 'pointer',
|
||||
'white-space': 'normal'
|
||||
}).click(function(){
|
||||
$(this).children('input:radio').attr('checked', 'checked');
|
||||
$(this).parents('td').find('div').attr('class', 'ui-state-default');
|
||||
$(this).attr('class', 'ui-state-active');
|
||||
});
|
||||
radio = $('<input type="radio" name="hcp" value="' + hcp + '"/>').css('display', 'none');
|
||||
zvmBlock.append(radio, $('<span><b>Name: </b>' + zvm + '</span>'), $('<span><b>zHCP: </b>' + hcp + '</span>'));
|
||||
zvmBlock.children('span').css({
|
||||
'display': 'block',
|
||||
'margin': '5px',
|
||||
'text-align': 'left'
|
||||
});
|
||||
col.append(zvmBlock);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load groups into column
|
||||
*
|
||||
* @param col
|
||||
* Table column where OS images will be placed
|
||||
* @return Nothing
|
||||
*/
|
||||
function loadGroups(col) {
|
||||
// Get group names and description and append to group column
|
||||
var groupNames = $.cookie('srv_groups').split(',');
|
||||
var groupBlock, radio, args, name, ip, hostname, desc;
|
||||
for (var i in groupNames) {
|
||||
args = groupNames[i].split(':');
|
||||
name = args[0];
|
||||
ip = args[1];
|
||||
hostname = args[2];
|
||||
desc = args[3];
|
||||
|
||||
// Create block for each group
|
||||
groupBlock = $('<div class="ui-state-default"></div>').css({
|
||||
'border': '1px solid',
|
||||
'max-width': '200px',
|
||||
'margin': '5px auto',
|
||||
'padding': '5px',
|
||||
'display': 'block',
|
||||
'vertical-align': 'middle',
|
||||
'cursor': 'pointer',
|
||||
'white-space': 'normal'
|
||||
}).click(function(){
|
||||
$(this).children('input:radio').attr('checked', 'checked');
|
||||
$(this).parents('td').find('div').attr('class', 'ui-state-default');
|
||||
$(this).attr('class', 'ui-state-active');
|
||||
});
|
||||
radio = $('<input type="radio" name="group" value="' + name + '"/>').css('display', 'none');
|
||||
groupBlock.append(radio, $('<span><b>Name: </b>' + name + '</span>'), $('<span><b>Description: </b>' + desc + '</span>'));
|
||||
groupBlock.children('span').css({
|
||||
'display': 'block',
|
||||
'margin': '5px',
|
||||
'text-align': 'left'
|
||||
});
|
||||
col.append(groupBlock);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load OS images into column
|
||||
*
|
||||
* @param col
|
||||
* Table column where OS images will be placed
|
||||
* @return Nothing
|
||||
*/
|
||||
function loadOSImages(col) {
|
||||
// Get group names and description and append to group column
|
||||
var imgNames = $.cookie('srv_imagenames').split(',');
|
||||
var imgBlock, radio, args, name, desc;
|
||||
for (var i in imgNames) {
|
||||
args = imgNames[i].split(':');
|
||||
name = args[0];
|
||||
desc = args[1];
|
||||
|
||||
// Create block for each image
|
||||
imgBlock = $('<div class="ui-state-default"></div>').css({
|
||||
'border': '1px solid',
|
||||
'max-width': '200px',
|
||||
'margin': '5px auto',
|
||||
'padding': '5px',
|
||||
'display': 'block',
|
||||
'vertical-align': 'middle',
|
||||
'cursor': 'pointer',
|
||||
'white-space': 'normal'
|
||||
}).click(function(){
|
||||
$(this).children('input:radio').attr('checked', 'checked');
|
||||
$(this).parents('td').find('div').attr('class', 'ui-state-default');
|
||||
$(this).attr('class', 'ui-state-active');
|
||||
});
|
||||
radio = $('<input type="radio" name="image" value="' + name + '"/>').css('display', 'none');
|
||||
imgBlock.append(radio, $('<span><b>Name: </b>' + name + '</span>'), $('<span><b>Description: </b>' + desc + '</span>'));
|
||||
imgBlock.children('span').css({
|
||||
'display': 'block',
|
||||
'margin': '5px',
|
||||
'text-align': 'left'
|
||||
});
|
||||
col.append(imgBlock);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a cookie for zVM host names (service page)
|
||||
*
|
||||
* @param data
|
||||
* Data from HTTP request
|
||||
* @return Nothing
|
||||
*/
|
||||
function setzVMCookies(data) {
|
||||
if (data.rsp) {
|
||||
var zvms = new Array();
|
||||
for ( var i = 0; i < data.rsp.length; i++) {
|
||||
zvms.push(data.rsp[i]);
|
||||
}
|
||||
|
||||
// Set cookie to expire in 60 minutes
|
||||
var exDate = new Date();
|
||||
exDate.setTime(exDate.getTime() + (240 * 60 * 1000));
|
||||
$.cookie('srv_zvms', zvms, { expires: exDate });
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a cookie for disk pool names of a given node (service page)
|
||||
*
|
||||
* @param data
|
||||
* Data from HTTP request
|
||||
* @return Nothing
|
||||
*/
|
||||
function setDiskPoolCookies(data) {
|
||||
if (data.rsp) {
|
||||
var node = data.msg;
|
||||
var pools = data.rsp[0].split(node + ': ');
|
||||
for (var i in pools) {
|
||||
pools[i] = jQuery.trim(pools[i]);
|
||||
}
|
||||
|
||||
// Set cookie to expire in 60 minutes
|
||||
var exDate = new Date();
|
||||
exDate.setTime(exDate.getTime() + (240 * 60 * 1000));
|
||||
$.cookie(node + 'diskpools', pools, { expires: exDate });
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create virtual machine (service page)
|
||||
*
|
||||
* @param tabId
|
||||
* Tab ID
|
||||
* @param group
|
||||
* Group
|
||||
* @param hcp
|
||||
* Hardware control point
|
||||
* @param img
|
||||
* OS image
|
||||
* @return Nothing
|
||||
*/
|
||||
function createzVM(tabId, group, hcp, img, owner) {
|
||||
var statBar = createStatusBar('zvmProvsionStatBar');
|
||||
var loader = createLoader('zvmProvisionLoader');
|
||||
statBar.find('div').append(loader);
|
||||
statBar.prependTo($('#' + tabId));
|
||||
|
||||
// Submit request to create VM
|
||||
// webportal provzlinux [group] [hcp] [image] [owner]
|
||||
$.ajax({
|
||||
url : 'lib/srv_cmd.php',
|
||||
dataType : 'json',
|
||||
data : {
|
||||
cmd : 'webportal',
|
||||
tgt : '',
|
||||
args : 'provzlinux;' + group + ';' + hcp + ';' + img + ';' + owner,
|
||||
msg : ''
|
||||
},
|
||||
success:function(data){
|
||||
$('#zvmProvisionLoader').remove();
|
||||
for(var i in data.rsp){
|
||||
$('#zvmProvsionStatBar').find('div').append('<pre>' + data.rsp[i] + '</pre>');
|
||||
}
|
||||
|
||||
// Refresh nodes table
|
||||
$.ajax( {
|
||||
url : 'lib/srv_cmd.php',
|
||||
dataType : 'json',
|
||||
data : {
|
||||
cmd : 'tabdump',
|
||||
tgt : '',
|
||||
args : 'nodetype',
|
||||
msg : ''
|
||||
},
|
||||
|
||||
success : function(data) {
|
||||
setUserNodes(data);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
@ -105,33 +105,32 @@ function loadProvisionPage() {
|
||||
|
||||
if ($('#' + newTabId).size() > 0){
|
||||
tab.select(newTabId);
|
||||
}
|
||||
else{
|
||||
var tabtitle = '';
|
||||
} else {
|
||||
var title = '';
|
||||
|
||||
// Create an instance of the plugin
|
||||
var plugin;
|
||||
switch (hw) {
|
||||
case "blade":
|
||||
plugin = new bladePlugin();
|
||||
tabtitle = 'BladeCenter';
|
||||
title = 'BladeCenter';
|
||||
break;
|
||||
case "hmc":
|
||||
plugin = new hmcPlugin();
|
||||
tabtitle = 'System p';
|
||||
title = 'System p';
|
||||
break;
|
||||
case "ipmi":
|
||||
plugin = new ipmiPlugin();
|
||||
tabtitle = 'iDataPlex';
|
||||
title = 'iDataPlex';
|
||||
break;
|
||||
case "zvm":
|
||||
plugin = new zvmPlugin();
|
||||
tabtitle = 'System z';
|
||||
title = 'System z';
|
||||
break;
|
||||
}
|
||||
|
||||
// Select tab
|
||||
tab.add(newTabId, tabtitle, '', true);
|
||||
tab.add(newTabId, title, '', true);
|
||||
tab.select(newTabId);
|
||||
plugin.loadProvisionPage(newTabId);
|
||||
}
|
||||
|
@ -56,6 +56,12 @@ function initServicePage() {
|
||||
includeJs("js/jquery/superfish.min.js");
|
||||
includeJs("js/jquery/jquery.jqplot.min.js");
|
||||
includeJs("js/jquery/jqplot.dateAxisRenderer.min.js");
|
||||
|
||||
// Custom plugins
|
||||
includeJs("js/custom/blade.js");
|
||||
includeJs("js/custom/ipmi.js");
|
||||
includeJs("js/custom/zvm.js");
|
||||
includeJs("js/custom/hmc.js");
|
||||
|
||||
// Enable settings link
|
||||
$('#xcat_settings').click(function() {
|
||||
@ -89,31 +95,10 @@ function loadServicePage() {
|
||||
|
||||
var provTabId = 'provisionTab';
|
||||
serviceTabs.add(provTabId, 'Provision', '', false);
|
||||
loadzProvisionPage(provTabId);
|
||||
loadServiceProvisionPage(provTabId);
|
||||
|
||||
serviceTabs.select(manageTabId);
|
||||
|
||||
// Get zVM host names
|
||||
if (!$.cookie('srv_zvm')){
|
||||
$.ajax( {
|
||||
url : 'lib/srv_cmd.php',
|
||||
dataType : 'json',
|
||||
data : {
|
||||
cmd : 'webportal',
|
||||
tgt : '',
|
||||
args : 'lszvm',
|
||||
msg : ''
|
||||
},
|
||||
|
||||
success : function(data) {
|
||||
setzVMCookies(data);
|
||||
loadzVMs();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
loadzVMs();
|
||||
}
|
||||
|
||||
// Get OS image names
|
||||
if (!$.cookie('srv_imagenames')){
|
||||
$.ajax( {
|
||||
@ -128,11 +113,8 @@ function loadServicePage() {
|
||||
|
||||
success : function(data) {
|
||||
setOSImageCookies(data);
|
||||
loadOSImages();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
loadOSImages();
|
||||
}
|
||||
|
||||
// Get contents of hosts table
|
||||
@ -148,12 +130,9 @@ function loadServicePage() {
|
||||
},
|
||||
|
||||
success : function(data) {
|
||||
setGroupCookies(data);
|
||||
loadGroups();
|
||||
setGroupCookies(data);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
loadGroups();
|
||||
}
|
||||
|
||||
// Get nodes owned by user
|
||||
@ -172,9 +151,99 @@ function loadServicePage() {
|
||||
getUserNodesDef();
|
||||
getNodesCurrentLoad();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Load the service portal's provision page
|
||||
*
|
||||
* @param tabId
|
||||
* Tab ID where page will reside
|
||||
* @return Nothing
|
||||
*/
|
||||
function loadServiceProvisionPage(tabId) {
|
||||
// Create info bar
|
||||
var infoBar = createInfoBar('Select a platform to provision a node on, then click Ok.');
|
||||
|
||||
// Create provision page
|
||||
var provPg = $('<div class="form"></div>');
|
||||
$('#' + tabId).append(infoBar, provPg);
|
||||
|
||||
// Create radio buttons for platforms
|
||||
var hwList = $('<ol>Platforms available:</ol>');
|
||||
var ipmi = $('<li><input type="radio" name="hw" value="ipmi" checked/>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 zvm = $('<li><input type="radio" name="hw" value="zvm"/>System z</li>');
|
||||
|
||||
hwList.append(ipmi);
|
||||
hwList.append(blade);
|
||||
hwList.append(hmc);
|
||||
hwList.append(zvm);
|
||||
provPg.append(hwList);
|
||||
|
||||
/**
|
||||
* Ok
|
||||
*/
|
||||
var okBtn = createButton('Ok');
|
||||
okBtn.bind('click', function(event) {
|
||||
// Get hardware that was selected
|
||||
var hw = $(this).parent().find('input[name="hw"]:checked').val();
|
||||
var newTabId = hw + 'ProvisionTab';
|
||||
|
||||
if ($('#' + newTabId).size() > 0){
|
||||
serviceTabs.select(newTabId);
|
||||
} else {
|
||||
var title = '';
|
||||
|
||||
// Create an instance of the plugin
|
||||
var plugin;
|
||||
switch (hw) {
|
||||
case "blade":
|
||||
plugin = new bladePlugin();
|
||||
title = 'BladeCenter';
|
||||
break;
|
||||
case "hmc":
|
||||
plugin = new hmcPlugin();
|
||||
title = 'System p';
|
||||
break;
|
||||
case "ipmi":
|
||||
plugin = new ipmiPlugin();
|
||||
title = 'iDataPlex';
|
||||
break;
|
||||
case "zvm":
|
||||
plugin = new zvmPlugin();
|
||||
title = 'System z';
|
||||
|
||||
// Get zVM host names
|
||||
if (!$.cookie('srv_zvm')){
|
||||
$.ajax( {
|
||||
url : 'lib/srv_cmd.php',
|
||||
dataType : 'json',
|
||||
data : {
|
||||
cmd : 'webportal',
|
||||
tgt : '',
|
||||
args : 'lszvm',
|
||||
msg : ''
|
||||
},
|
||||
|
||||
success : function(data) {
|
||||
setzVMCookies(data);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
loadzVMs();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// Select tab
|
||||
serviceTabs.add(newTabId, title, '', true);
|
||||
serviceTabs.select(newTabId);
|
||||
plugin.loadServiceProvisionPage(newTabId);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
provPg.append(okBtn);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -214,7 +283,9 @@ function getUserNodesDef() {
|
||||
success : loadNodesTable
|
||||
});
|
||||
} else {
|
||||
prompt('Warning', $('<p>Your session has expired! Please log out and back in.</p>'));
|
||||
// Clear the tab before inserting the table
|
||||
$('#manageTab').children().remove();
|
||||
$('#manageTab').append(createWarnBar('You are not managing any node. Try to provision a node.'));
|
||||
}
|
||||
}
|
||||
|
||||
@ -262,7 +333,7 @@ function loadNodesTable(data) {
|
||||
// Sort headers
|
||||
var sorted = new Array();
|
||||
var attrs2hide = new Array('status', 'statustime', 'appstatus', 'appstatustime', 'usercomment');
|
||||
var attrs2show = new Array('arch', 'groups', 'hcp', 'hostnames', 'ip', 'os', 'userid');
|
||||
var attrs2show = new Array('arch', 'groups', 'hcp', 'hostnames', 'ip', 'os', 'userid', 'mgt');
|
||||
for (var key in headers) {
|
||||
// Show node attributes
|
||||
if (jQuery.inArray(key, attrs2show) > -1) {
|
||||
@ -711,7 +782,35 @@ function loadNode(e) {
|
||||
msg : msg
|
||||
},
|
||||
|
||||
success : showInventory
|
||||
success : function(data) {
|
||||
var args = data.msg.split(',');
|
||||
|
||||
// Get node
|
||||
var node = args[1].replace('node=', '');
|
||||
|
||||
// Get the management plugin
|
||||
var mgt = getNodeAttr(node, 'mgt');
|
||||
|
||||
// Create an instance of the plugin
|
||||
var plugin;
|
||||
switch (mgt) {
|
||||
case "blade":
|
||||
plugin = new bladePlugin();
|
||||
break;
|
||||
case "hmc":
|
||||
plugin = new hmcPlugin();
|
||||
break;
|
||||
case "ipmi":
|
||||
plugin = new ipmiPlugin();
|
||||
break;
|
||||
case "zvm":
|
||||
plugin = new zvmPlugin();
|
||||
break;
|
||||
}
|
||||
|
||||
// Select tab
|
||||
plugin.loadServiceInventory(data);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ -719,592 +818,6 @@ function loadNode(e) {
|
||||
serviceTabs.select(tabId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show node inventory
|
||||
*
|
||||
* @param data
|
||||
* Data from HTTP request
|
||||
* @return Nothing
|
||||
*/
|
||||
function showInventory(data) {
|
||||
var args = data.msg.split(',');
|
||||
|
||||
// Get tab ID
|
||||
var tabId = args[0].replace('out=', '');
|
||||
// Get node
|
||||
var node = args[1].replace('node=', '');
|
||||
// Get node inventory
|
||||
var inv = data.rsp[0].split(node + ':');
|
||||
|
||||
// Remove loader
|
||||
$('#' + tabId).find('img').remove();
|
||||
|
||||
// Create array of property keys
|
||||
var keys = new Array('userId', 'host', 'os', 'arch', 'hcp', 'priv', 'memory', 'proc', 'disk', 'nic');
|
||||
|
||||
// Create hash table for property names
|
||||
var attrNames = new Object();
|
||||
attrNames['userId'] = 'z/VM UserID:';
|
||||
attrNames['host'] = 'z/VM Host:';
|
||||
attrNames['os'] = 'Operating System:';
|
||||
attrNames['arch'] = 'Architecture:';
|
||||
attrNames['hcp'] = 'HCP:';
|
||||
attrNames['priv'] = 'Privileges:';
|
||||
attrNames['memory'] = 'Total Memory:';
|
||||
attrNames['proc'] = 'Processors:';
|
||||
attrNames['disk'] = 'Disks:';
|
||||
attrNames['nic'] = 'NICs:';
|
||||
|
||||
// Create hash table for node attributes
|
||||
var attrs = getAttrs(keys, attrNames, inv);
|
||||
|
||||
// Create division to hold inventory
|
||||
var invDivId = node + 'Inventory';
|
||||
var invDiv = $('<div class="inventory" id="' + invDivId + '"></div>');
|
||||
|
||||
var infoBar = createInfoBar('Below is the inventory for the virtual machine you selected.');
|
||||
invDiv.append(infoBar);
|
||||
|
||||
/**
|
||||
* General info section
|
||||
*/
|
||||
var fieldSet = $('<fieldset></fieldset>');
|
||||
var legend = $('<legend>General</legend>');
|
||||
fieldSet.append(legend);
|
||||
var oList = $('<ol></ol>');
|
||||
var item, label, args;
|
||||
|
||||
// Loop through each property
|
||||
for ( var k = 0; k < 5; k++) {
|
||||
// Create a list item for each property
|
||||
item = $('<li></li>');
|
||||
|
||||
// Create a label - Property name
|
||||
label = $('<label>' + attrNames[keys[k]] + '</label>');
|
||||
item.append(label);
|
||||
|
||||
for ( var l = 0; l < attrs[keys[k]].length; l++) {
|
||||
// Create a input - Property value(s)
|
||||
// Handle each property uniquely
|
||||
item.append(attrs[keys[k]][l]);
|
||||
}
|
||||
|
||||
oList.append(item);
|
||||
}
|
||||
// Append to inventory form
|
||||
fieldSet.append(oList);
|
||||
invDiv.append(fieldSet);
|
||||
|
||||
/**
|
||||
* Monitoring section
|
||||
*/
|
||||
fieldSet = $('<fieldset id="' + node + '_monitor"></fieldset>');
|
||||
legend = $('<legend>Monitoring</legend>');
|
||||
fieldSet.append(legend);
|
||||
getMonitorMetrics(node);
|
||||
|
||||
// Append to inventory form
|
||||
invDiv.append(fieldSet);
|
||||
|
||||
/**
|
||||
* Hardware info section
|
||||
*/
|
||||
var hwList, hwItem;
|
||||
fieldSet = $('<fieldset></fieldset>');
|
||||
legend = $('<legend>Hardware</legent>');
|
||||
fieldSet.append(legend);
|
||||
oList = $('<ol></ol>');
|
||||
|
||||
// Loop through each property
|
||||
var label;
|
||||
for (k = 5; k < keys.length; k++) {
|
||||
// Create a list item
|
||||
item = $('<li></li>');
|
||||
|
||||
// Create a list to hold the property value(s)
|
||||
hwList = $('<ul></ul>');
|
||||
hwItem = $('<li></li>');
|
||||
|
||||
/**
|
||||
* Privilege section
|
||||
*/
|
||||
if (keys[k] == 'priv') {
|
||||
// Create a label - Property name
|
||||
label = $('<label>' + attrNames[keys[k]].replace(':', '') + '</label>');
|
||||
item.append(label);
|
||||
|
||||
// Loop through each line
|
||||
for (l = 0; l < attrs[keys[k]].length; l++) {
|
||||
// Create a new list item for each line
|
||||
hwItem = $('<li></li>');
|
||||
|
||||
// Determine privilege
|
||||
args = attrs[keys[k]][l].split(' ');
|
||||
if (args[0] == 'Directory:') {
|
||||
label = $('<label>' + args[0] + '</label>');
|
||||
hwItem.append(label);
|
||||
hwItem.append(args[1]);
|
||||
} else if (args[0] == 'Currently:') {
|
||||
label = $('<label>' + args[0] + '</label>');
|
||||
hwItem.append(label);
|
||||
hwItem.append(args[1]);
|
||||
}
|
||||
|
||||
hwList.append(hwItem);
|
||||
}
|
||||
|
||||
item.append(hwList);
|
||||
}
|
||||
|
||||
/**
|
||||
* Memory section
|
||||
*/
|
||||
else if (keys[k] == 'memory') {
|
||||
// Create a label - Property name
|
||||
label = $('<label>' + attrNames[keys[k]].replace(':', '') + '</label>');
|
||||
item.append(label);
|
||||
|
||||
// Loop through each value line
|
||||
for (l = 0; l < attrs[keys[k]].length; l++) {
|
||||
// Create a new list item for each line
|
||||
hwItem = $('<li></li>');
|
||||
hwItem.append(attrs[keys[k]][l]);
|
||||
hwList.append(hwItem);
|
||||
}
|
||||
|
||||
item.append(hwList);
|
||||
}
|
||||
|
||||
/**
|
||||
* Processor section
|
||||
*/
|
||||
else if (keys[k] == 'proc') {
|
||||
// Create a label - Property name
|
||||
label = $('<label><b>' + attrNames[keys[k]].replace(':', '') + '</b></label>');
|
||||
item.append(label);
|
||||
|
||||
// Create a table to hold processor data
|
||||
var procTable = $('<table></table>');
|
||||
var procBody = $('<tbody></tbody>');
|
||||
|
||||
// Table columns - Type, Address, ID, Base, Dedicated, and Affinity
|
||||
var procTabRow = $('<thead class="ui-widget-header"> <th>Type</th> <th>Address</th> <th>ID</th> <th>Base</th> <th>Dedicated</th> <th>Affinity</th> </thead>');
|
||||
procTable.append(procTabRow);
|
||||
var procType, procAddr, procId, procAff;
|
||||
|
||||
// Loop through each processor
|
||||
var n, temp;
|
||||
for (l = 0; l < attrs[keys[k]].length; l++) {
|
||||
if (attrs[keys[k]][l]) {
|
||||
args = attrs[keys[k]][l].split(' ');
|
||||
|
||||
// Get processor type, address, ID, and affinity
|
||||
n = 3;
|
||||
temp = args[args.length - n];
|
||||
while (!jQuery.trim(temp)) {
|
||||
n = n + 1;
|
||||
temp = args[args.length - n];
|
||||
}
|
||||
procType = $('<td>' + temp + '</td>');
|
||||
procAddr = $('<td>' + args[1] + '</td>');
|
||||
procId = $('<td>' + args[5] + '</td>');
|
||||
procAff = $('<td>' + args[args.length - 1] + '</td>');
|
||||
|
||||
// Base processor
|
||||
if (args[6] == '(BASE)') {
|
||||
baseProc = $('<td>' + true + '</td>');
|
||||
} else {
|
||||
baseProc = $('<td>' + false + '</td>');
|
||||
}
|
||||
|
||||
// Dedicated processor
|
||||
if (args[args.length - 3] == 'DEDICATED') {
|
||||
dedicatedProc = $('<td>' + true + '</td>');
|
||||
} else {
|
||||
dedicatedProc = $('<td>' + false + '</td>');
|
||||
}
|
||||
|
||||
// Create a new row for each processor
|
||||
procTabRow = $('<tr></tr>');
|
||||
procTabRow.append(procType);
|
||||
procTabRow.append(procAddr);
|
||||
procTabRow.append(procId);
|
||||
procTabRow.append(baseProc);
|
||||
procTabRow.append(dedicatedProc);
|
||||
procTabRow.append(procAff);
|
||||
procBody.append(procTabRow);
|
||||
}
|
||||
}
|
||||
|
||||
procTable.append(procBody);
|
||||
item.append(procTable);
|
||||
}
|
||||
|
||||
/**
|
||||
* Disk section
|
||||
*/
|
||||
else if (keys[k] == 'disk') {
|
||||
// Create a label - Property name
|
||||
label = $('<label><b>' + attrNames[keys[k]].replace(':', '') + '</b></label>');
|
||||
item.append(label);
|
||||
|
||||
// Create a table to hold disk (DASD) data
|
||||
var dasdTable = $('<table></table>');
|
||||
var dasdBody = $('<tbody></tbody>');
|
||||
|
||||
// Table columns - Virtual Device, Type, VolID, Type of Access, and Size
|
||||
var dasdTabRow = $('<thead class="ui-widget-header"> <th>Virtual Device #</th> <th>Type</th> <th>VolID</th> <th>Type of Access</th> <th>Size</th> </thead>');
|
||||
dasdTable.append(dasdTabRow);
|
||||
var dasdVDev, dasdType, dasdVolId, dasdAccess, dasdSize;
|
||||
|
||||
// Loop through each DASD
|
||||
for (l = 0; l < attrs[keys[k]].length; l++) {
|
||||
if (attrs[keys[k]][l]) {
|
||||
args = attrs[keys[k]][l].split(' ');
|
||||
|
||||
// Get DASD virtual device, type, volume ID, access, and size
|
||||
dasdVDev = $('<td>' + args[1] + '</td>');
|
||||
dasdType = $('<td>' + args[2] + '</td>');
|
||||
dasdVolId = $('<td>' + args[3] + '</td>');
|
||||
dasdAccess = $('<td>' + args[4] + '</td>');
|
||||
dasdSize = $('<td>' + args[args.length - 9] + ' ' + args[args.length - 8] + '</td>');
|
||||
|
||||
// Create a new row for each DASD
|
||||
dasdTabRow = $('<tr></tr>');
|
||||
dasdTabRow.append(dasdVDev);
|
||||
dasdTabRow.append(dasdType);
|
||||
dasdTabRow.append(dasdVolId);
|
||||
dasdTabRow.append(dasdAccess);
|
||||
dasdTabRow.append(dasdSize);
|
||||
dasdBody.append(dasdTabRow);
|
||||
}
|
||||
}
|
||||
|
||||
dasdTable.append(dasdBody);
|
||||
item.append(dasdTable);
|
||||
}
|
||||
|
||||
/**
|
||||
* NIC section
|
||||
*/
|
||||
else if (keys[k] == 'nic') {
|
||||
// Create a label - Property name
|
||||
label = $('<label><b>' + attrNames[keys[k]].replace(':', '') + '</b></label>');
|
||||
item.append(label);
|
||||
|
||||
// Create a table to hold NIC data
|
||||
var nicTable = $('<table></table>');
|
||||
var nicBody = $('<tbody></tbody>');
|
||||
|
||||
// Table columns - Virtual device, Adapter Type, Port Name, # of Devices, MAC Address, and LAN Name
|
||||
var nicTabRow = $('<thead class="ui-widget-header"><th>Virtual Device #</th> <th>Adapter Type</th> <th>Port Name</th> <th># of Devices</th> <th>LAN Name</th></thead>');
|
||||
nicTable.append(nicTabRow);
|
||||
var nicVDev, nicType, nicPortName, nicNumOfDevs, nicLanName;
|
||||
|
||||
// Loop through each NIC (Data contained in 2 lines)
|
||||
for (l = 0; l < attrs[keys[k]].length; l = l + 2) {
|
||||
if (attrs[keys[k]][l]) {
|
||||
args = attrs[keys[k]][l].split(' ');
|
||||
|
||||
// Get NIC virtual device, type, port name, and number of devices
|
||||
nicVDev = $('<td>' + args[1] + '</td>');
|
||||
nicType = $('<td>' + args[3] + '</td>');
|
||||
nicPortName = $('<td>' + args[10] + '</td>');
|
||||
nicNumOfDevs = $('<td>' + args[args.length - 1] + '</td>');
|
||||
|
||||
args = attrs[keys[k]][l + 1].split(' ');
|
||||
nicLanName = $('<td>' + args[args.length - 2] + ' ' + args[args.length - 1] + '</td>');
|
||||
|
||||
// Create a new row for each DASD
|
||||
nicTabRow = $('<tr></tr>');
|
||||
nicTabRow.append(nicVDev);
|
||||
nicTabRow.append(nicType);
|
||||
nicTabRow.append(nicPortName);
|
||||
nicTabRow.append(nicNumOfDevs);
|
||||
nicTabRow.append(nicLanName);
|
||||
|
||||
nicBody.append(nicTabRow);
|
||||
}
|
||||
}
|
||||
|
||||
nicTable.append(nicBody);
|
||||
item.append(nicTable);
|
||||
}
|
||||
|
||||
oList.append(item);
|
||||
}
|
||||
|
||||
// Append inventory to division
|
||||
fieldSet.append(oList);
|
||||
invDiv.append(fieldSet);
|
||||
invDiv.find('th').css({
|
||||
'padding': '5px 10px',
|
||||
'font-weight': 'bold'
|
||||
});
|
||||
|
||||
// Append to tab
|
||||
$('#' + tabId).append(invDiv);
|
||||
}
|
||||
|
||||
/**
|
||||
* Load provision page (z)
|
||||
*
|
||||
* @param tabId
|
||||
* Tab ID where page will reside
|
||||
* @return Nothing
|
||||
*/
|
||||
function loadzProvisionPage(tabId) {
|
||||
// Create provision form
|
||||
var provForm = $('<div></div>');
|
||||
|
||||
// Create info bar
|
||||
var infoBar = createInfoBar('Provision a Linux virtual machine on System z by selecting the appropriate choices below. Once you are ready, click on Provision to provision the virtual machine.');
|
||||
provForm.append(infoBar);
|
||||
|
||||
// Append to provision tab
|
||||
$('#' + tabId).append(provForm);
|
||||
|
||||
// Create provision table
|
||||
var provTable = $('<table id="select-table" style="margin: 10px;"></table');
|
||||
var provHeader = $('<thead class="ui-widget-header"> <th>zVM</th> <th>Group</th> <th>Image</th></thead>');
|
||||
var provBody = $('<tbody></tbody>');
|
||||
var provFooter = $('<tfoot></tfoot>');
|
||||
provTable.append(provHeader, provBody, provFooter);
|
||||
provForm.append(provTable);
|
||||
|
||||
provHeader.children('th').css({
|
||||
'font': 'bold 12px verdana, arial, helvetica, sans-serif'
|
||||
});
|
||||
|
||||
// Create row to contain selections
|
||||
var provRow = $('<tr></tr>');
|
||||
provBody.append(provRow);
|
||||
// Create columns for zVM, group, and image
|
||||
var zvmCol = $('<td style="vertical-align: top;"></td>');
|
||||
provRow.append(zvmCol);
|
||||
var groupCol = $('<td style="vertical-align: top;"></td>');
|
||||
provRow.append(groupCol);
|
||||
var imageCol = $('<td style="vertical-align: top;"></td>');
|
||||
provRow.append(imageCol);
|
||||
|
||||
provRow.children('td').css({
|
||||
'min-width': '250px'
|
||||
});
|
||||
|
||||
/**
|
||||
* Provision VM
|
||||
*/
|
||||
var provisionBtn = createButton('Provision');
|
||||
provisionBtn.bind('click', function(event) {
|
||||
var hcp = $('#select-table tbody tr:eq(0) td:eq(0) input[name="hcp"]:checked').val();
|
||||
var group = $('#select-table tbody tr:eq(0) td:eq(1) input[name="group"]:checked').val();
|
||||
var img = $('#select-table tbody tr:eq(0) td:eq(2) input[name="image"]:checked').val();
|
||||
var owner = $.cookie('srv_usrname');;
|
||||
|
||||
// Begin by creating VM
|
||||
createVM(tabId, group, hcp, img, owner);
|
||||
});
|
||||
provForm.append(provisionBtn);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create virtual machine
|
||||
*
|
||||
* @param tabId
|
||||
* Tab ID
|
||||
* @param group
|
||||
* Group
|
||||
* @param hcp
|
||||
* Hardware control point
|
||||
* @param img
|
||||
* OS image
|
||||
* @return Nothing
|
||||
*/
|
||||
function createVM(tabId, group, hcp, img, owner) {
|
||||
var statBar = createStatusBar('provsionStatBar');
|
||||
var loader = createLoader('provisionLoader');
|
||||
statBar.find('div').append(loader);
|
||||
statBar.prependTo($('#provisionTab'));
|
||||
|
||||
// Submit request to create VM
|
||||
// webportal provzlinux [group] [hcp] [image] [owner]
|
||||
$.ajax({
|
||||
url : 'lib/srv_cmd.php',
|
||||
dataType : 'json',
|
||||
data : {
|
||||
cmd : 'webportal',
|
||||
tgt : '',
|
||||
args : 'provzlinux;' + group + ';' + hcp + ';' + img + ';' + owner,
|
||||
msg : ''
|
||||
},
|
||||
success:function(data){
|
||||
$('#provisionLoader').remove();
|
||||
for(var i in data.rsp){
|
||||
$('#provsionStatBar').find('div').append('<pre>' + data.rsp[i] + '</pre>');
|
||||
}
|
||||
|
||||
// Refresh nodes table
|
||||
$.ajax( {
|
||||
url : 'lib/srv_cmd.php',
|
||||
dataType : 'json',
|
||||
data : {
|
||||
cmd : 'tabdump',
|
||||
tgt : '',
|
||||
args : 'nodetype',
|
||||
msg : ''
|
||||
},
|
||||
|
||||
success : function(data) {
|
||||
setUserNodes(data);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Load zVMs into column
|
||||
*/
|
||||
function loadzVMs() {
|
||||
var zvmCol = $('#select-table tbody tr:eq(0) td:eq(0)');
|
||||
|
||||
// Get group names and description and append to group column
|
||||
var groupNames = $.cookie('srv_zvms').split(',');
|
||||
var radio, zvmBlock, args, zvm, hcp;
|
||||
for (var i in groupNames) {
|
||||
args = groupNames[i].split(':');
|
||||
zvm = args[0];
|
||||
hcp = args[1];
|
||||
|
||||
// Create block for each group
|
||||
zvmBlock = $('<div class="ui-state-default"></div>').css({
|
||||
'border': '1px solid',
|
||||
'max-width': '200px',
|
||||
'margin': '5px auto',
|
||||
'padding': '5px',
|
||||
'display': 'block',
|
||||
'vertical-align': 'middle',
|
||||
'cursor': 'pointer',
|
||||
'white-space': 'normal'
|
||||
}).click(function(){
|
||||
$(this).children('input:radio').attr('checked', 'checked');
|
||||
$(this).parents('td').find('div').attr('class', 'ui-state-default');
|
||||
$(this).attr('class', 'ui-state-active');
|
||||
});
|
||||
radio = $('<input type="radio" name="hcp" value="' + hcp + '"/>').css('display', 'none');
|
||||
zvmBlock.append(radio, $('<span><b>Name: </b>' + zvm + '</span>'), $('<span><b>zHCP: </b>' + hcp + '</span>'));
|
||||
zvmBlock.children('span').css({
|
||||
'display': 'block',
|
||||
'margin': '5px',
|
||||
'text-align': 'left'
|
||||
});
|
||||
zvmCol.append(zvmBlock);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load groups into column
|
||||
*/
|
||||
function loadGroups() {
|
||||
var groupCol = $('#select-table tbody tr:eq(0) td:eq(1)');
|
||||
|
||||
// Get group names and description and append to group column
|
||||
var groupNames = $.cookie('srv_groups').split(',');
|
||||
var groupBlock, radio, args, name, ip, hostname, desc;
|
||||
for (var i in groupNames) {
|
||||
args = groupNames[i].split(':');
|
||||
name = args[0];
|
||||
ip = args[1];
|
||||
hostname = args[2];
|
||||
desc = args[3];
|
||||
|
||||
// Create block for each group
|
||||
groupBlock = $('<div class="ui-state-default"></div>').css({
|
||||
'border': '1px solid',
|
||||
'max-width': '200px',
|
||||
'margin': '5px auto',
|
||||
'padding': '5px',
|
||||
'display': 'block',
|
||||
'vertical-align': 'middle',
|
||||
'cursor': 'pointer',
|
||||
'white-space': 'normal'
|
||||
}).click(function(){
|
||||
$(this).children('input:radio').attr('checked', 'checked');
|
||||
$(this).parents('td').find('div').attr('class', 'ui-state-default');
|
||||
$(this).attr('class', 'ui-state-active');
|
||||
});
|
||||
radio = $('<input type="radio" name="group" value="' + name + '"/>').css('display', 'none');
|
||||
groupBlock.append(radio, $('<span><b>Name: </b>' + name + '</span>'), $('<span><b>Description: </b>' + desc + '</span>'));
|
||||
groupBlock.children('span').css({
|
||||
'display': 'block',
|
||||
'margin': '5px',
|
||||
'text-align': 'left'
|
||||
});
|
||||
groupCol.append(groupBlock);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load OS images into column
|
||||
*/
|
||||
function loadOSImages() {
|
||||
var imgCol = $('#select-table tbody tr:eq(0) td:eq(2)');
|
||||
|
||||
// Get group names and description and append to group column
|
||||
var imgNames = $.cookie('srv_imagenames').split(',');
|
||||
var imgBlock, radio, args, name, desc;
|
||||
for (var i in imgNames) {
|
||||
args = imgNames[i].split(':');
|
||||
name = args[0];
|
||||
desc = args[1];
|
||||
|
||||
// Create block for each image
|
||||
imgBlock = $('<div class="ui-state-default"></div>').css({
|
||||
'border': '1px solid',
|
||||
'max-width': '200px',
|
||||
'margin': '5px auto',
|
||||
'padding': '5px',
|
||||
'display': 'block',
|
||||
'vertical-align': 'middle',
|
||||
'cursor': 'pointer',
|
||||
'white-space': 'normal'
|
||||
}).click(function(){
|
||||
$(this).children('input:radio').attr('checked', 'checked');
|
||||
$(this).parents('td').find('div').attr('class', 'ui-state-default');
|
||||
$(this).attr('class', 'ui-state-active');
|
||||
});
|
||||
radio = $('<input type="radio" name="image" value="' + name + '"/>').css('display', 'none');
|
||||
imgBlock.append(radio, $('<span><b>Name: </b>' + name + '</span>'), $('<span><b>Description: </b>' + desc + '</span>'));
|
||||
imgBlock.children('span').css({
|
||||
'display': 'block',
|
||||
'margin': '5px',
|
||||
'text-align': 'left'
|
||||
});
|
||||
imgCol.append(imgBlock);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a cookie for zVM host names
|
||||
*
|
||||
* @param data
|
||||
* Data from HTTP request
|
||||
* @return Nothing
|
||||
*/
|
||||
function setzVMCookies(data) {
|
||||
if (data.rsp) {
|
||||
var zvms = new Array();
|
||||
for ( var i = 0; i < data.rsp.length; i++) {
|
||||
zvms.push(data.rsp[i]);
|
||||
}
|
||||
|
||||
// Set cookie to expire in 60 minutes
|
||||
var exDate = new Date();
|
||||
exDate.setTime(exDate.getTime() + (240 * 60 * 1000));
|
||||
$.cookie('srv_zvms', zvms, { expires: exDate });
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a cookie for disk pool names
|
||||
*
|
||||
@ -1445,27 +958,7 @@ function setOSImageCookies(data) {
|
||||
$.cookie('srv_osarchs', tmp);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a cookie for disk pool names of a given node
|
||||
*
|
||||
* @param data
|
||||
* Data from HTTP request
|
||||
* @return Nothing
|
||||
*/
|
||||
function setDiskPoolCookies(data) {
|
||||
if (data.rsp) {
|
||||
var node = data.msg;
|
||||
var pools = data.rsp[0].split(node + ': ');
|
||||
for (var i in pools) {
|
||||
pools[i] = jQuery.trim(pools[i]);
|
||||
}
|
||||
|
||||
// Set cookie to expire in 60 minutes
|
||||
var exDate = new Date();
|
||||
exDate.setTime(exDate.getTime() + (240 * 60 * 1000));
|
||||
$.cookie(node + 'diskpools', pools, { expires: exDate });
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set a cookie for user nodes
|
||||
@ -2410,4 +1903,43 @@ function drawNetworkFlot(node, inPair, outPair) {
|
||||
showMarker : false
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an attribute of a given node
|
||||
*
|
||||
* @param node
|
||||
* The node
|
||||
* @param attrName
|
||||
* The attribute
|
||||
* @return The attribute of the node
|
||||
*/
|
||||
function getNodeAttr(node, attrName) {
|
||||
// Get the row
|
||||
var row = $('[id=' + node + ']').parents('tr');
|
||||
|
||||
// Search for the column containing the attribute
|
||||
var attrCol;
|
||||
|
||||
var cols = row.parents('.dataTables_scroll').find('.dataTables_scrollHead thead tr:eq(0) th');
|
||||
// Loop through each column
|
||||
for (var i in cols) {
|
||||
// Find column that matches the attribute
|
||||
if (cols.eq(i).html() == attrName) {
|
||||
attrCol = cols.eq(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// If the column containing the attribute is found
|
||||
if (attrCol) {
|
||||
// Get the attribute column index
|
||||
var attrIndex = attrCol.index();
|
||||
|
||||
// Get the attribute for the given node
|
||||
var attr = row.find('td:eq(' + attrIndex + ')');
|
||||
return attr.text();
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
}
|
@ -348,7 +348,7 @@ function createStatusBar(barId) {
|
||||
* @return Info bar
|
||||
*/
|
||||
function createInfoBar(msg) {
|
||||
var infoBar = $('<div class="ui-state-highlight ui-corner-all"></div>');
|
||||
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'
|
||||
|
@ -193,38 +193,42 @@ sub provzlinux {
|
||||
# pool = POOL3
|
||||
# eckd_size = 10016
|
||||
|
||||
# Create XML object
|
||||
my $xml = new XML::Simple;
|
||||
|
||||
# Read XML file
|
||||
my $data = $xml->XMLin($tmpl);
|
||||
|
||||
my $type;
|
||||
my $virt_addr;
|
||||
my $devices = $data->{'dasd'}->{'devices'}->{'listentry'};
|
||||
foreach (@$devices) {
|
||||
|
||||
# Get disk virtual address and disk type
|
||||
$type = $_->{'drivers'}->{'listentry'}->{'modules'}->{'module_entry'}->{'listentry'};
|
||||
$virt_addr = $_->{'sysfs_bus_id'};
|
||||
$virt_addr =~ s/0\.0\.//g;
|
||||
foreach (@$type) {
|
||||
# Add ECKD disk
|
||||
if ( $_ =~ m/dasd_eckd_mod/i ) {
|
||||
$out = `chvm $node --add3390 $disk_pool $virt_addr $eckd_size MR`;
|
||||
println( $callback, "$out" );
|
||||
if ( $out =~ m/Error/i ) {
|
||||
return;
|
||||
if ( $os =~ m/sles/i ) {
|
||||
# Create XML object
|
||||
my $xml = new XML::Simple;
|
||||
|
||||
# Read XML file
|
||||
my $data = $xml->XMLin($tmpl);
|
||||
|
||||
my $type;
|
||||
my $virt_addr;
|
||||
my $devices = $data->{'dasd'}->{'devices'}->{'listentry'};
|
||||
foreach (@$devices) {
|
||||
|
||||
# Get disk virtual address and disk type
|
||||
$type = $_->{'drivers'}->{'listentry'}->{'modules'}->{'module_entry'}->{'listentry'};
|
||||
$virt_addr = $_->{'sysfs_bus_id'};
|
||||
$virt_addr =~ s/0\.0\.//g;
|
||||
foreach (@$type) {
|
||||
# Add ECKD disk
|
||||
if ( $_ =~ m/dasd_eckd_mod/i ) {
|
||||
$out = `chvm $node --add3390 $disk_pool $virt_addr $eckd_size MR`;
|
||||
println( $callback, "$out" );
|
||||
if ( $out =~ m/Error/i ) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
# Add FBA disk
|
||||
elsif ( $_ =~ m/dasd_fba_mod/i ) {
|
||||
# To be continued
|
||||
# $out = `chvm $node --add9336 $disk_pool $virt_addr $fba_size MR`;
|
||||
}
|
||||
}
|
||||
|
||||
# Add FBA disk
|
||||
elsif ( $_ =~ m/dasd_fba_mod/i ) {
|
||||
# To be continued
|
||||
# $out = `chvm $node --add9336 $disk_pool $virt_addr $fba_size MR`;
|
||||
}
|
||||
}
|
||||
} # End of foreach
|
||||
} # End of foreach
|
||||
} elsif ( $os =~ m/rhel/i ) {
|
||||
# TBD
|
||||
}
|
||||
|
||||
# Update DHCP
|
||||
`makedhcp -a`;
|
||||
|
Loading…
Reference in New Issue
Block a user