Author: jfthomps
Date: Fri Nov 16 19:41:38 2012
New Revision: 1410550
URL: http://svn.apache.org/viewvc?rev=1410550&view=rev
Log:
VCL-643
VM Limit can be decreased to below the current number of assigned VMs
vm.php:
-modified editVMInfo - changed vm limit widget to do updates immediately after
change instead of after focus change
-modified updateVMlimit - changed to send JSON as reponse; if limit has not
changed, return success right away; check for new limit being below the number
of currently assigned VMs, and if so, return an error and new limit that is the
current number of assigned
VMs
vm.js:
-modified updateVMlimit - call xhrPost with handleAs set to JSON
-modified updateVMlimitCB - handle data as JSON; if status is LIMIT, set limit
to specified value
Modified:
vcl/trunk/web/.ht-inc/vm.php
vcl/trunk/web/js/vm.js
Modified: vcl/trunk/web/.ht-inc/vm.php
URL:
http://svn.apache.org/viewvc/vcl/trunk/web/.ht-inc/vm.php?rev=1410550&r1=1410549&r2=1410550&view=diff
==============================================================================
--- vcl/trunk/web/.ht-inc/vm.php (original)
+++ vcl/trunk/web/.ht-inc/vm.php Fri Nov 16 19:41:38 2012
@@ -78,6 +78,7 @@ function editVMInfo() {
print " constraints=\"{min:1,max:" . MAXVMLIMIT .
"}\"\n";
print " maxlength=\"3\"\n";
print " id=\"vmlimit\"\n";
+ print " intermediateChanges=\"true\"\n";
print " onChange=\"updateVMlimit('$cont')\">\n";
print " </td>\n";
print " </tr>\n";
@@ -543,25 +544,56 @@ function getVMHostData($id='') {
function updateVMlimit() {
global $mysql_link_vcl;
$vmhostid = processInputVar('vmhostid', ARG_NUMERIC);
+ $newlimit = processInputVar('newlimit', ARG_NUMERIC);
$data = getVMHostData($vmhostid);
+
+ if($data[$vmhostid]['vmlimit'] == $newlimit) {
+ sendJSON(array('status' => 'SUCCESS'));
+ return;
+ }
$resources = getUserResources(array("computerAdmin"),
array("administer"));
if(! array_key_exists($data[$vmhostid]['computerid'],
$resources['computer'])) {
- print 'You do not have access to manage this host.';
+ print "alert('You do not have access to manage this host.');";
+ $rc = array('status' => 'ERROR',
+ 'msg' => "You do not have access to manage this
host.");
+ sendJSON($rc);
return;
}
- $newlimit = processInputVar('newlimit', ARG_NUMERIC);
if($newlimit < 0 || $newlimit > MAXVMLIMIT) {
- print "ERROR: newlimit out of range";
+ $rc = array('status' => 'ERROR',
+ 'msg' => "ERROR: newlimit out of range");
+ sendJSON($rc);
+ return;
+ }
+
+ # get number of vms assigned to vmhost
+ $query = "SELECT COUNT(id) as assigned "
+ . "FROM computer "
+ . "WHERE type = 'virtualmachine' AND "
+ . "vmhostid = $vmhostid AND "
+ . "deleted = 0";
+ $qh = doQuery($query, 101);
+ $row = mysql_fetch_assoc($qh);
+ if($row['assigned'] > $newlimit) {
+ $rc = array('status' => 'LIMIT',
+ 'msg' => "Cannot reduce VM limit below the current
number of assigned VMs",
+ 'limit' => $row['assigned']);
+ sendJSON($rc);
return;
}
+
$query = "UPDATE vmhost SET vmlimit = $newlimit WHERE id = $vmhostid";
$qh = doQuery($query, 101);
- if(mysql_affected_rows($mysql_link_vcl))
- print "SUCCESS";
- else
- print "ERROR: failed to update vmlimit";
+ if(mysql_affected_rows($mysql_link_vcl) == 0) {
+ $rc = array('status' => 'ERROR',
+ 'msg' => "ERROR: failed to update vmlimit",
+ 'data' => $data);
+ sendJSON($rc);
+ return;
+ }
+ sendJSON(array('status' => 'SUCCESS'));
}
////////////////////////////////////////////////////////////////////////////////
Modified: vcl/trunk/web/js/vm.js
URL:
http://svn.apache.org/viewvc/vcl/trunk/web/js/vm.js?rev=1410550&r1=1410549&r2=1410550&view=diff
==============================================================================
--- vcl/trunk/web/js/vm.js (original)
+++ vcl/trunk/web/js/vm.js Fri Nov 16 19:41:38 2012
@@ -141,6 +141,7 @@ function updateVMlimit(cont) {
dojo.xhrPost({
url: 'index.php',
load: updateVMlimitCB,
+ handleAs: "json",
error: errorHandler,
content: {continuation: cont,
vmhostid: hostid,
@@ -150,8 +151,10 @@ function updateVMlimit(cont) {
}
function updateVMlimitCB(data, ioArgs) {
- if(data != 'SUCCESS') {
- alert(data);
+ if(data.items.status != 'SUCCESS') {
+ if(data.items.status == 'LIMIT')
+ dijit.byId('vmlimit').set('value', data.items.limit);
+ alert(data.items.msg);
}
document.body.style.cursor = 'default';
}