|
|
|
@ -1009,10 +1009,10 @@ function updateZCloneStatus(data) {
|
|
|
|
|
function getZResources(data) {
|
|
|
|
|
// Do not continue if there is no output
|
|
|
|
|
if (data.rsp) {
|
|
|
|
|
// Loop through each line
|
|
|
|
|
// Push hardware control points into an array
|
|
|
|
|
var node, hcp;
|
|
|
|
|
var hcpHash = new Object();
|
|
|
|
|
for ( var i in data.rsp) {
|
|
|
|
|
for (var i in data.rsp) {
|
|
|
|
|
node = data.rsp[i][0];
|
|
|
|
|
hcp = data.rsp[i][1];
|
|
|
|
|
hcpHash[hcp] = 1;
|
|
|
|
@ -1020,42 +1020,98 @@ function getZResources(data) {
|
|
|
|
|
|
|
|
|
|
// Create an array for hardware control points
|
|
|
|
|
var hcps = new Array();
|
|
|
|
|
for ( var key in hcpHash) {
|
|
|
|
|
hcps.push(key);
|
|
|
|
|
for (var key in hcpHash) {
|
|
|
|
|
// Get the short host name
|
|
|
|
|
hcp = key.split('.')[0];
|
|
|
|
|
|
|
|
|
|
// Get disk pools
|
|
|
|
|
$.ajax( {
|
|
|
|
|
url : 'lib/cmd.php',
|
|
|
|
|
dataType : 'json',
|
|
|
|
|
data : {
|
|
|
|
|
cmd : 'lsvm',
|
|
|
|
|
tgt : hcp,
|
|
|
|
|
args : '--diskpoolnames',
|
|
|
|
|
msg : hcp
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
success : getDiskPool
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Get network names
|
|
|
|
|
$.ajax( {
|
|
|
|
|
url : 'lib/cmd.php',
|
|
|
|
|
dataType : 'json',
|
|
|
|
|
data : {
|
|
|
|
|
cmd : 'lsvm',
|
|
|
|
|
tgt : hcp,
|
|
|
|
|
args : '--getnetworknames',
|
|
|
|
|
msg : hcp
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
success : getNetwork
|
|
|
|
|
});
|
|
|
|
|
hcps.push(hcp);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Set cookie
|
|
|
|
|
// Set hardware control point cookie
|
|
|
|
|
$.cookie('hcp', hcps);
|
|
|
|
|
|
|
|
|
|
// Delete loader
|
|
|
|
|
var tabId = 'zvmResourceTab';
|
|
|
|
|
$('#' + tabId).find('img[src="images/loader.gif"]').remove();
|
|
|
|
|
|
|
|
|
|
// Create accordion panel for disk
|
|
|
|
|
var resourcesAccordion = $('<div id="zvmResourceAccordion"></div>');
|
|
|
|
|
var diskSection = $('<div id="zvmDiskResource"></div>');
|
|
|
|
|
var diskLnk = $('<h3><a href="#">Disks</a></h3>').click(function () {
|
|
|
|
|
// Do not load panel again if it is already loaded
|
|
|
|
|
if ($('#zvmDiskResource').children().length)
|
|
|
|
|
return;
|
|
|
|
|
else
|
|
|
|
|
$('#zvmDiskResource').append(createLoader(''));
|
|
|
|
|
|
|
|
|
|
// Resize accordion
|
|
|
|
|
$('#zvmResourceAccordion').accordion('resize');
|
|
|
|
|
|
|
|
|
|
// Create a array for hardware control points
|
|
|
|
|
var hcps = new Array();
|
|
|
|
|
if ($.cookie('hcp').indexOf(',') > -1)
|
|
|
|
|
hcps = $.cookie('hcp').split(',');
|
|
|
|
|
else
|
|
|
|
|
hcps.push($.cookie('hcp'));
|
|
|
|
|
|
|
|
|
|
// Query the disk pools for each
|
|
|
|
|
for (var i in hcps) {
|
|
|
|
|
$.ajax( {
|
|
|
|
|
url : 'lib/cmd.php',
|
|
|
|
|
dataType : 'json',
|
|
|
|
|
data : {
|
|
|
|
|
cmd : 'lsvm',
|
|
|
|
|
tgt : hcps[i],
|
|
|
|
|
args : '--diskpoolnames',
|
|
|
|
|
msg : hcps[i]
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
success : getDiskPool
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Create accordion panel for network
|
|
|
|
|
var networkSection = $('<div id="zvmNetworkResource"></div>');
|
|
|
|
|
var networkLnk = $('<h3><a href="#">Networks</a></h3>').click(function () {
|
|
|
|
|
// Do not load panel again if it is already loaded
|
|
|
|
|
if ($('#zvmNetworkResource').children().length)
|
|
|
|
|
return;
|
|
|
|
|
else
|
|
|
|
|
$('#zvmNetworkResource').append(createLoader(''));
|
|
|
|
|
|
|
|
|
|
// Resize accordion
|
|
|
|
|
$('#zvmResourceAccordion').accordion('resize');
|
|
|
|
|
|
|
|
|
|
// Create a array for hardware control points
|
|
|
|
|
var hcps = new Array();
|
|
|
|
|
if ($.cookie('hcp').indexOf(',') > -1)
|
|
|
|
|
hcps = $.cookie('hcp').split(',');
|
|
|
|
|
else
|
|
|
|
|
hcps.push($.cookie('hcp'));
|
|
|
|
|
|
|
|
|
|
for ( var i in hcps) {
|
|
|
|
|
// Gather networks from hardware control points
|
|
|
|
|
$.ajax( {
|
|
|
|
|
url : 'lib/cmd.php',
|
|
|
|
|
dataType : 'json',
|
|
|
|
|
data : {
|
|
|
|
|
cmd : 'lsvm',
|
|
|
|
|
tgt : hcps[i],
|
|
|
|
|
args : '--getnetworknames',
|
|
|
|
|
msg : hcps[i]
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
success : getNetwork
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
resourcesAccordion.append(diskLnk, diskSection, networkLnk, networkSection);
|
|
|
|
|
|
|
|
|
|
// Append accordion to tab
|
|
|
|
|
$('#' + tabId).append(resourcesAccordion);
|
|
|
|
|
resourcesAccordion.accordion();
|
|
|
|
|
diskLnk.trigger('click');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1785,48 +1841,39 @@ function getNetwork(data) {
|
|
|
|
|
* @return Nothing
|
|
|
|
|
*/
|
|
|
|
|
function loadDiskPoolTable(data) {
|
|
|
|
|
// Remove loader
|
|
|
|
|
var panelId = 'zvmDiskResource';
|
|
|
|
|
$('#' + panelId).find('img[src="images/loader.gif"]').remove();
|
|
|
|
|
|
|
|
|
|
var args = data.msg.split(';');
|
|
|
|
|
var hcp = args[0].replace('hcp=', '');
|
|
|
|
|
var pool = args[1].replace('pool=', '');
|
|
|
|
|
var stat = args[2].replace('stat=', '');
|
|
|
|
|
var tmp = data.rsp[0].split(hcp + ': ');
|
|
|
|
|
|
|
|
|
|
// Remove loader
|
|
|
|
|
var loaderId = 'zvmResourceLoader';
|
|
|
|
|
if ($('#' + loaderId).length) {
|
|
|
|
|
$('#' + loaderId).remove();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Resource tab ID
|
|
|
|
|
var tabID = 'zvmResourceTab';
|
|
|
|
|
var info = $('#' + tabID).find('.ui-state-highlight');
|
|
|
|
|
// Resource tab ID
|
|
|
|
|
var info = $('#' + panelId).find('.ui-state-highlight');
|
|
|
|
|
// If there is no info bar
|
|
|
|
|
if (!info.length) {
|
|
|
|
|
// Create info bar
|
|
|
|
|
info = createInfoBar('Below are disks and networks found by the hardware control point. It shows disk pools defined in the EXTENT CONTROL file and LANs|VSWITCHes available to use.');
|
|
|
|
|
$('#' + tabID).append(info);
|
|
|
|
|
info = createInfoBar('Below are disks that are defined in the EXTENT CONTROL file.');
|
|
|
|
|
$('#' + panelId).append(info);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Get datatable
|
|
|
|
|
var tableId = 'zDiskDataTable';
|
|
|
|
|
var dTable = getDiskDataTable();
|
|
|
|
|
if (!dTable) {
|
|
|
|
|
// Create disks section
|
|
|
|
|
var fieldSet = $('<fieldset></fieldset>');
|
|
|
|
|
var legend = $('<legend>Disks</legend>');
|
|
|
|
|
fieldSet.append(legend);
|
|
|
|
|
|
|
|
|
|
// Create a datatable
|
|
|
|
|
var tableID = 'zDiskDataTable';
|
|
|
|
|
var table = new DataTable(tableID);
|
|
|
|
|
// Create a datatable
|
|
|
|
|
var table = new DataTable(tableId);
|
|
|
|
|
// Resource headers: volume ID, device type, start address, and size
|
|
|
|
|
table.init( [ 'HCP', 'Pool', 'Status', 'Volume ID', 'Device type', 'Start address', 'Size' ]);
|
|
|
|
|
table.init( [ '<input type="checkbox" onclick="selectAllDisk(event, $(this))">', 'HCP', 'Pool', 'Status', 'Region', 'Device type', 'Starting address', 'Size' ]);
|
|
|
|
|
|
|
|
|
|
// Append datatable to tab
|
|
|
|
|
fieldSet.append(table.object());
|
|
|
|
|
$('#' + tabID).append(fieldSet);
|
|
|
|
|
// Append datatable to panel
|
|
|
|
|
$('#' + panelId).append(table.object());
|
|
|
|
|
|
|
|
|
|
// Turn into datatable
|
|
|
|
|
dTable = $('#' + tableID).dataTable();
|
|
|
|
|
dTable = $('#' + tableId).dataTable();
|
|
|
|
|
setDiskDataTable(dTable);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1834,8 +1881,371 @@ function loadDiskPoolTable(data) {
|
|
|
|
|
for ( var i = 2; i < tmp.length; i++) {
|
|
|
|
|
tmp[i] = jQuery.trim(tmp[i]);
|
|
|
|
|
var diskAttrs = tmp[i].split(' ');
|
|
|
|
|
dTable.fnAddData( [ hcp, pool, stat, diskAttrs[0], diskAttrs[1], diskAttrs[2], diskAttrs[3] ]);
|
|
|
|
|
dTable.fnAddData( [ '<input type="checkbox"/>', hcp, pool, stat, diskAttrs[0], diskAttrs[1], diskAttrs[2], diskAttrs[3] ]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Create actions menu
|
|
|
|
|
if (!$('#zvmResourceActions').length) {
|
|
|
|
|
// Empty filter area
|
|
|
|
|
$('#' + tableId + '_length').empty();
|
|
|
|
|
|
|
|
|
|
// Add disk to pool
|
|
|
|
|
var addLnk = $('<a>Add</a>');
|
|
|
|
|
addLnk.bind('click', function(event){
|
|
|
|
|
openAddDisk2PoolDialog();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Delete disk from pool
|
|
|
|
|
var deleteLnk = $('<a>Delete</a>');
|
|
|
|
|
deleteLnk.bind('click', function(event){
|
|
|
|
|
openDeleteDiskFromPoolDialog();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Refresh table
|
|
|
|
|
var refreshLnk = $('<a>Refresh</a>');
|
|
|
|
|
refreshLnk.bind('click', function(event){
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Create action bar
|
|
|
|
|
var actionBar = $('<div id="zvmResourceActions" class="actionBar"></div>');
|
|
|
|
|
|
|
|
|
|
// Create an action menu
|
|
|
|
|
var actionsMenu = createMenu([addLnk, deleteLnk, refreshLnk]);
|
|
|
|
|
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 + '_length').prepend(menuDiv);
|
|
|
|
|
$('#' + tableId + '_length').css({
|
|
|
|
|
'padding': '0px',
|
|
|
|
|
'width': '500px'
|
|
|
|
|
});
|
|
|
|
|
$('#' + tableId + '_filter').css({'padding': '10px',});
|
|
|
|
|
menuDiv.append(actionBar);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Enable editable columns
|
|
|
|
|
*/
|
|
|
|
|
// Do not make 1st, 2nd, 4th, 5th, 6th, 7th, or 8th column editable
|
|
|
|
|
$('#' + tableId + ' td:not(td:nth-child(1),td:nth-child(2),td:nth-child(4),td:nth-child(5),td:nth-child(6),td:nth-child(7),td:nth-child(8))').editable(
|
|
|
|
|
function(value, settings) {
|
|
|
|
|
// If users did not make changes, return the value directly
|
|
|
|
|
// jeditable saves the old value in this.revert
|
|
|
|
|
if ($(this).attr('revert') == value){
|
|
|
|
|
return value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Get column index
|
|
|
|
|
var colPos = this.cellIndex;
|
|
|
|
|
|
|
|
|
|
// Get row index
|
|
|
|
|
var dTable = $('#' + tableId).dataTable();
|
|
|
|
|
var rowPos = dTable.fnGetPosition(this.parentNode);
|
|
|
|
|
|
|
|
|
|
// Update datatable
|
|
|
|
|
dTable.fnUpdate(value, rowPos, colPos, false);
|
|
|
|
|
|
|
|
|
|
// Get table headers
|
|
|
|
|
var headers = $('#' + nodesTableId).parents('.dataTables_scroll').find('.dataTables_scrollHead thead tr:eq(0) th');
|
|
|
|
|
|
|
|
|
|
// Get node name
|
|
|
|
|
var node = $(this).parent().find('td a.node').text();
|
|
|
|
|
// Get attribute name
|
|
|
|
|
var attrName = jQuery.trim(headers.eq(colPos).text());
|
|
|
|
|
// Get column value
|
|
|
|
|
var value = $(this).text();
|
|
|
|
|
|
|
|
|
|
// Build argument
|
|
|
|
|
var args = attrName + '=' + value;
|
|
|
|
|
|
|
|
|
|
// Send command to change node attributes
|
|
|
|
|
// $.ajax( {
|
|
|
|
|
// url : 'lib/cmd.php',
|
|
|
|
|
// dataType : 'json',
|
|
|
|
|
// data : {
|
|
|
|
|
// cmd : 'chdef',
|
|
|
|
|
// tgt : '',
|
|
|
|
|
// args : '-t;node;-o;' + node + ';' + args,
|
|
|
|
|
// msg : 'out=nodesTab;tgt=' + node
|
|
|
|
|
// },
|
|
|
|
|
//
|
|
|
|
|
// success: showChdefOutput
|
|
|
|
|
// });
|
|
|
|
|
|
|
|
|
|
return value;
|
|
|
|
|
}, {
|
|
|
|
|
onblur : 'submit', // Clicking outside editable area submits changes
|
|
|
|
|
type : 'textarea',
|
|
|
|
|
placeholder: ' ',
|
|
|
|
|
event : "dblclick", // Double click and edit
|
|
|
|
|
height : '50px' // The height of the text area
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Resize accordion
|
|
|
|
|
$('#zvmResourceAccordion').accordion('resize');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Open dialog to delete disk from pool
|
|
|
|
|
*/
|
|
|
|
|
function openDeleteDiskFromPoolDialog() {
|
|
|
|
|
// Create form to delete disk to pool
|
|
|
|
|
var dialogId = 'zvmDeleteDiskFromPool';
|
|
|
|
|
var deleteDiskForm = $('<div id="' + dialogId + '" class="form"></div>');
|
|
|
|
|
// Create info bar
|
|
|
|
|
var info = createInfoBar('Remove a disk from a disk pool defined in the EXTENT CONTROL.');
|
|
|
|
|
deleteDiskForm.append(info);
|
|
|
|
|
var action = $('<div><label>Action:</label></div>');
|
|
|
|
|
var actionSelect = $('<select name="action">'
|
|
|
|
|
+ '<option value=""></option>'
|
|
|
|
|
+ '<option value="1">Remove region</option>'
|
|
|
|
|
+ '<option value="2">Remove region from group</option>'
|
|
|
|
|
+ '<option value="3">Remove region from all groups</option>'
|
|
|
|
|
+ '<option value="7">Remove entire group</option>'
|
|
|
|
|
+ '</select>');
|
|
|
|
|
action.append(actionSelect);
|
|
|
|
|
|
|
|
|
|
var hcp = $('<div><label>Hardware control point:</label></div>');
|
|
|
|
|
var hcpSelect = $('<select name="hcp"></select>');
|
|
|
|
|
hcp.append(hcpSelect);
|
|
|
|
|
var region = $('<div><label>Region name:</label><input type="text" name="region"/></div>');
|
|
|
|
|
var group = $('<div><label>Group name:</label><input type="text" name="group"/></div>');
|
|
|
|
|
deleteDiskForm.append(action, hcp, region, group);
|
|
|
|
|
|
|
|
|
|
// Create a array for hardware control points
|
|
|
|
|
var hcps = new Array();
|
|
|
|
|
if ($.cookie('hcp').indexOf(',') > -1)
|
|
|
|
|
hcps = $.cookie('hcp').split(',');
|
|
|
|
|
else
|
|
|
|
|
hcps.push($.cookie('hcp'));
|
|
|
|
|
|
|
|
|
|
// Append options for hardware control points
|
|
|
|
|
for (var i in hcps) {
|
|
|
|
|
hcpSelect.append($('<option value="' + hcps[i] + '">' + hcps[i] + '</option>'));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
actionSelect.change(function() {
|
|
|
|
|
if ($(this).val() == '1' || $(this).val() == '3') {
|
|
|
|
|
region.show();
|
|
|
|
|
group.hide();
|
|
|
|
|
} else if ($(this).val() == '2') {
|
|
|
|
|
region.show();
|
|
|
|
|
group.show();
|
|
|
|
|
} else if ($(this).val() == '7') {
|
|
|
|
|
region.val('FOOBAR');
|
|
|
|
|
region.hide();
|
|
|
|
|
group.show();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Open dialog to delete disk
|
|
|
|
|
deleteDiskForm.dialog({
|
|
|
|
|
title:'Delete disk from pool',
|
|
|
|
|
modal: true,
|
|
|
|
|
width: 400,
|
|
|
|
|
buttons: {
|
|
|
|
|
"Ok": function(){
|
|
|
|
|
// Remove any warning messages
|
|
|
|
|
$(this).find('.ui-state-error').remove();
|
|
|
|
|
|
|
|
|
|
// Get inputs
|
|
|
|
|
var action = $(this).find('select[name=action]').val();
|
|
|
|
|
var hcp = $(this).find('select[name=hcp]').val();
|
|
|
|
|
var region = $(this).find('input[name=region]').val();
|
|
|
|
|
var group = $(this).find('input[name=group]').val();
|
|
|
|
|
|
|
|
|
|
// If inputs are not complete, show warning message
|
|
|
|
|
if (!action || !hcp) {
|
|
|
|
|
var warn = createWarnBar('Please provide a value for each missing field.');
|
|
|
|
|
warn.prependTo($(this));
|
|
|
|
|
} else {
|
|
|
|
|
// Change dialog buttons
|
|
|
|
|
$(this).dialog('option', 'buttons', {
|
|
|
|
|
'Close': function() {$(this).dialog("close");}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var args;
|
|
|
|
|
if (action == '2' || action == '7')
|
|
|
|
|
args = region + ';' + group;
|
|
|
|
|
else
|
|
|
|
|
args = group;
|
|
|
|
|
|
|
|
|
|
// Add disk to pool
|
|
|
|
|
$.ajax( {
|
|
|
|
|
url : 'lib/cmd.php',
|
|
|
|
|
dataType : 'json',
|
|
|
|
|
data : {
|
|
|
|
|
cmd : 'chvm',
|
|
|
|
|
tgt : hcp,
|
|
|
|
|
args : '--removediskfrompool;' + action + ';' + args,
|
|
|
|
|
msg : dialogId
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
success : updateResourceDialog
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"Cancel": function() {
|
|
|
|
|
$(this).dialog( "close" );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Open dialog to add disk to pool
|
|
|
|
|
*/
|
|
|
|
|
function openAddDisk2PoolDialog() {
|
|
|
|
|
// Create form to add disk to pool
|
|
|
|
|
var dialogId = 'zvmAddDisk2Pool';
|
|
|
|
|
var addDiskForm = $('<div id="' + dialogId + '" class="form"></div>');
|
|
|
|
|
// Create info bar
|
|
|
|
|
var info = createInfoBar('Add a disk to a disk pool defined in the EXTENT CONTROL. The disk has to already be attached to SYSTEM.');
|
|
|
|
|
addDiskForm.append(info);
|
|
|
|
|
var action = $('<div><label>Action:</label></div>');
|
|
|
|
|
var actionSelect = $('<select name="action">'
|
|
|
|
|
+ '<option value=""></option>'
|
|
|
|
|
+ '<option value="4">Define region and add to group</option>'
|
|
|
|
|
+ '<option value="5">Add existing region to group</option>'
|
|
|
|
|
+ '</select>');
|
|
|
|
|
action.append(actionSelect);
|
|
|
|
|
|
|
|
|
|
var hcp = $('<div><label>Hardware control point:</label></div>');
|
|
|
|
|
var hcpSelect = $('<select name="hcp"></select>');
|
|
|
|
|
hcp.append(hcpSelect);
|
|
|
|
|
var region = $('<div><label>Region name:</label><input type="text" name="region"/></div>');
|
|
|
|
|
var volume = $('<div><label>Volume name:</label><input type="text" name="volume"/></div>');
|
|
|
|
|
var group = $('<div><label>Group name:</label><input type="text" name="group"/></div>');
|
|
|
|
|
addDiskForm.append(action, hcp, region, volume, group);
|
|
|
|
|
|
|
|
|
|
// Create a array for hardware control points
|
|
|
|
|
var hcps = new Array();
|
|
|
|
|
if ($.cookie('hcp').indexOf(',') > -1)
|
|
|
|
|
hcps = $.cookie('hcp').split(',');
|
|
|
|
|
else
|
|
|
|
|
hcps.push($.cookie('hcp'));
|
|
|
|
|
|
|
|
|
|
// Append options for hardware control points
|
|
|
|
|
for (var i in hcps) {
|
|
|
|
|
hcpSelect.append($('<option value="' + hcps[i] + '">' + hcps[i] + '</option>'));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
actionSelect.change(function() {
|
|
|
|
|
if ($(this).val() == '4') {
|
|
|
|
|
volume.show();
|
|
|
|
|
} else if ($(this).val() == '5') {
|
|
|
|
|
volume.hide();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Open dialog to add disk
|
|
|
|
|
addDiskForm.dialog({
|
|
|
|
|
title:'Add disk to pool',
|
|
|
|
|
modal: true,
|
|
|
|
|
width: 400,
|
|
|
|
|
buttons: {
|
|
|
|
|
"Ok": function(){
|
|
|
|
|
// Remove any warning messages
|
|
|
|
|
$(this).find('.ui-state-error').remove();
|
|
|
|
|
|
|
|
|
|
// Get inputs
|
|
|
|
|
var action = $(this).find('select[name=action]').val();
|
|
|
|
|
var hcp = $(this).find('select[name=hcp]').val();
|
|
|
|
|
var region = $(this).find('input[name=region]').val();
|
|
|
|
|
var volume = $(this).find('input[name=volume]').val();
|
|
|
|
|
var group = $(this).find('input[name=group]').val();
|
|
|
|
|
|
|
|
|
|
// If inputs are not complete, show warning message
|
|
|
|
|
if (!action || !hcp || !region || !group) {
|
|
|
|
|
var warn = createWarnBar('Please provide a value for each missing field.');
|
|
|
|
|
warn.prependTo($(this));
|
|
|
|
|
} else {
|
|
|
|
|
// Change dialog buttons
|
|
|
|
|
$(this).dialog('option', 'buttons', {
|
|
|
|
|
'Close': function() {$(this).dialog("close");}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var args;
|
|
|
|
|
if (action == '4')
|
|
|
|
|
args = region + ';' + volume + ';' + group;
|
|
|
|
|
else
|
|
|
|
|
args = region + ';' + group;
|
|
|
|
|
|
|
|
|
|
// Add disk to pool
|
|
|
|
|
$.ajax( {
|
|
|
|
|
url : 'lib/cmd.php',
|
|
|
|
|
dataType : 'json',
|
|
|
|
|
data : {
|
|
|
|
|
cmd : 'chvm',
|
|
|
|
|
tgt : hcp,
|
|
|
|
|
args : '--adddisk2pool;' + action + ';' + args,
|
|
|
|
|
msg : dialogId
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
success : updateResourceDialog
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"Cancel": function() {
|
|
|
|
|
$(this).dialog( "close" );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Update resource dialog
|
|
|
|
|
*
|
|
|
|
|
* @param data
|
|
|
|
|
* HTTP request data
|
|
|
|
|
* @return Nothing
|
|
|
|
|
*/
|
|
|
|
|
function updateResourceDialog(data) {
|
|
|
|
|
var dialogId = data.msg;
|
|
|
|
|
var infoMsg;
|
|
|
|
|
|
|
|
|
|
// Create info message
|
|
|
|
|
if (jQuery.isArray(data.rsp)) {
|
|
|
|
|
infoMsg = '';
|
|
|
|
|
for (var i in data.rsp) {
|
|
|
|
|
infoMsg += data.rsp[i] + '</br>';
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
infoMsg = data.rsp;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Append info to dialog
|
|
|
|
|
var info = createInfoBar(infoMsg);
|
|
|
|
|
info.prependTo($('#' + dialogId));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Select all checkboxes in the datatable
|
|
|
|
|
*
|
|
|
|
|
* @param event
|
|
|
|
|
* Event on element
|
|
|
|
|
* @param obj
|
|
|
|
|
* Object triggering event
|
|
|
|
|
* @return Nothing
|
|
|
|
|
*/
|
|
|
|
|
function selectAllDisk(event, obj) {
|
|
|
|
|
// Get datatable ID
|
|
|
|
|
// This will ascend from <input> <th> <tr> <thead> <table>
|
|
|
|
|
var tableObj = obj.parents('.datatable');
|
|
|
|
|
var status = obj.attr('checked');
|
|
|
|
|
tableObj.find(' :checkbox').attr('checked', status);
|
|
|
|
|
event.stopPropagation();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -1846,44 +2256,35 @@ function loadDiskPoolTable(data) {
|
|
|
|
|
* @return Nothing
|
|
|
|
|
*/
|
|
|
|
|
function loadNetworkTable(data) {
|
|
|
|
|
// Remove loader
|
|
|
|
|
var panelId = 'zvmNetworkResource';
|
|
|
|
|
$('#' + panelId).find('img[src="images/loader.gif"]').remove();
|
|
|
|
|
|
|
|
|
|
var args = data.msg.split(';');
|
|
|
|
|
var hcp = args[0].replace('hcp=', '');
|
|
|
|
|
var type = args[1].replace('type=', '');
|
|
|
|
|
var name = args[2].replace('network=', '');
|
|
|
|
|
var tmp = data.rsp[0].split(hcp + ': ');
|
|
|
|
|
|
|
|
|
|
// Remove loader
|
|
|
|
|
var loaderId = 'zvmResourceLoader';
|
|
|
|
|
if ($('#' + loaderId).length) {
|
|
|
|
|
$('#' + loaderId).remove();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Resource tab ID
|
|
|
|
|
var tabId = 'zvmResourceTab';
|
|
|
|
|
var info = $('#' + tabId).find('.ui-state-highlight');
|
|
|
|
|
// Resource tab ID
|
|
|
|
|
var info = $('#' + panelId).find('.ui-state-highlight');
|
|
|
|
|
// If there is no info bar
|
|
|
|
|
if (!info.length) {
|
|
|
|
|
// Create info bar
|
|
|
|
|
info = createInfoBar('Below are disks and networks found by the hardware control point. It shows disk pools defined in the EXTENT CONTROL file and LANs|VSWITCHes available to use.');
|
|
|
|
|
$('#' + tabId).append(info);
|
|
|
|
|
info = createInfoBar('Below are LANs/VSWITCHes available to use.');
|
|
|
|
|
$('#' + panelId).append(info);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Get datatable
|
|
|
|
|
var dTable = getNetworkDataTable();
|
|
|
|
|
if (!dTable) {
|
|
|
|
|
// Create networks section
|
|
|
|
|
var fieldSet = $('<fieldset></fieldset>');
|
|
|
|
|
var legend = $('<legend>Networks</legend>');
|
|
|
|
|
fieldSet.append(legend);
|
|
|
|
|
|
|
|
|
|
if (!dTable) {
|
|
|
|
|
// Create table
|
|
|
|
|
var tableId = 'zNetworkDataTable';
|
|
|
|
|
var table = new DataTable(tableId);
|
|
|
|
|
table.init( [ 'HCP', 'Type', 'Name', 'Details' ]);
|
|
|
|
|
|
|
|
|
|
// Append datatable to tab
|
|
|
|
|
fieldSet.append(table.object());
|
|
|
|
|
$('#' + tabId).append(fieldSet);
|
|
|
|
|
$('#' + panelId).append(table.object());
|
|
|
|
|
|
|
|
|
|
// Turn into datatable
|
|
|
|
|
dTable = $('#' + tableId).dataTable();
|
|
|
|
@ -1904,7 +2305,10 @@ function loadNetworkTable(data) {
|
|
|
|
|
}
|
|
|
|
|
details += '</pre>';
|
|
|
|
|
|
|
|
|
|
dTable.fnAddData( [ hcp, type, name, details ]);
|
|
|
|
|
dTable.fnAddData([ '<pre>' + hcp + '</pre>', '<pre>' + type + '</pre>', '<pre>' + name + '</pre>', details ]);
|
|
|
|
|
|
|
|
|
|
// Resize accordion
|
|
|
|
|
$('#zvmResourceAccordion').accordion('resize');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|