Add limit to number of VMs a user could create.

git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@11023 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
phamt 2011-11-17 04:23:53 +00:00
parent b547001868
commit fa19d0d38f
2 changed files with 98 additions and 6 deletions

View File

@ -108,6 +108,7 @@ function loadServicePage() {
success : function(data) {
setUserNodes(data);
setMaxVM();
getUserNodesDef();
getNodesCurrentLoad();
loadManagePage(manageTabId);
@ -190,6 +191,18 @@ function loadServiceProvisionPage(tabId) {
*/
var okBtn = createButton('Ok');
okBtn.bind('click', function(event) {
var userName = $.cookie('srv_usrname');
var tmp = $.cookie(userName + '_usrnodes');
var nodes = tmp.split(',');
var maxVM = parseInt($.cookie(userName + '_maxvm'));
// Do not allow user to clone if the maximum number of VMs is reached
if (nodes.length >= maxVM) {
var warn = createWarnBar('You have reached the maximum number of VMs allowed. Please de-allocate some existing VMs to free up space or contact your system administrator request more VMs.');
warn.prependTo($('#' + tabId));
return;
}
// Get hardware that was selected
var hw = $(this).parent().find('input[name="hw"]:checked').val();
var newTabId = hw + 'ProvisionTab';
@ -287,7 +300,7 @@ function getUserNodesDef() {
} else {
// Clear the tab before inserting the table
$('#manageTab').children().remove();
$('#manageTab').append(createWarnBar('You are not managing any node. Try to provision a node.'));
$('#manageTab').append(createWarnBar('Could not find any nodes that belong to you. Do you have any? Or did your session expire?'));
}
}
@ -446,8 +459,7 @@ function loadNodesTable(data) {
$('#' + nodesDTId).dataTable({
'iDisplayLength': 50,
'bLengthChange': false,
"sScrollX": "100%",
"sScrollXInner": "110%"
"sScrollX": "100%"
});
// Set datatable header class to add color
@ -565,12 +577,13 @@ function loadNodesTable(data) {
success : function(data) {
// Save nodes owned by user
setUserNodes(data);
getNodesCurrentLoad();
// Refresh nodes table
var userName = $.cookie('srv_usrname');
var userNodes = $.cookie(userName + '_usrnodes');
if (userNodes) {
// Get nodes definitions
if (userNodes) {
// Get nodes definitions
$.ajax( {
url : 'lib/srv_cmd.php',
dataType : 'json',
@ -1257,7 +1270,19 @@ function monitorNode(node, monitor) {
* @return Nothing
*/
function cloneNode(tgtNodes) {
var userName = $.cookie('srv_usrname');
var nodes = tgtNodes.split(',');
var tmp = $.cookie(userName + '_usrnodes');
var usrNodes = tmp.split(',');
var maxVM = parseInt($.cookie(userName + '_maxvm'));
// Do not allow user to clone if the maximum number of VMs is reached
if (usrNodes.length >= maxVM) {
var warn = createWarnBar('You have reached the maximum number of VMs allowed. Please de-allocate some existing VMs to free up space or contact your system administrator request more VMs.');
warn.prependTo($('#manageTab'));
return;
}
for (var n in nodes) {
// Get hardware that was selected
@ -2093,4 +2118,33 @@ function getNodeAttr(node, attrName) {
} else {
return '';
}
}
/**
* Set the maximum number of VMs a user could have
*/
function setMaxVM() {
var userName = $.cookie('srv_usrname');
$.ajax( {
url : 'lib/srv_cmd.php',
dataType : 'json',
data : {
cmd : 'webportal',
tgt : '',
args : 'getmaxvm;' + userName,
msg : ''
},
success : function(data) {
// Get response
var rsp = jQuery.trim(data.rsp);
rsp = rsp.replace('Max allowed:', '');
// Set cookie to expire in 60 minutes
var exDate = new Date();
exDate.setTime(exDate.getTime() + (240 * 60 * 1000));
$.cookie(userName + '_maxvm', rsp, { expires: exDate });
}
});
}

View File

@ -36,7 +36,9 @@ sub process_request {
my %authorized_cmds = (
'lszvm' => \&lszvm,
'provzlinux' => \&provzlinux,
'clonezlinux' => \&clonezlinux
'clonezlinux' => \&clonezlinux,
'genhostip' => \&genhostip,
'getmaxvm' => \&getmaxvm
);
# Check if the request is authorized
@ -470,4 +472,40 @@ sub clonezlinux {
println( $callback, "$out" );
println( $callback, " rootpw = Same as source node" );
}
sub genhostip {
my ( $request, $callback, $sub_req ) = @_;
my $group = $request->{arg}->[1];
my ($node, $base_digit) = gennodename( $callback, $group );
println( $callback, "$node" );
}
sub getmaxvm {
my ( $request, $callback, $sub_req ) = @_;
my $user = $request->{arg}->[1];
my @args;
my $max;
# Look in 'policy' table
my $tab = xCAT::Table->new( 'policy', -create => 1, -autocommit => 0 );
my @results = $tab->getAllAttribsWhere( "name='" . $user . "'", 'comments' );
foreach (@results) {
if ( $_->{'comments'} ) {
@args = split( ';', $_->{'comments'} );
# Extract max VM
foreach (@args) {
if ($_ =~ m/max-vm:/i) {
$_ =~ s/max-vm://g;
$max = $_;
last;
}
}
}
}
$callback->( { data => "Max allowed: $max" } );
}
1;