Adds support for conditionally disabling VM creation.
[invirt/packages/invirt-web.git] / code / main.py
index 0b8af46..f754ca0 100755 (executable)
@@ -459,7 +459,8 @@ def getListDict(username, state):
              defaults=defaults,
              machines=machines,
              has_vnc=has_vnc,
-             installing=installing)
+             installing=installing,
+             disable_creation=True)
     return d
 
 def getHostname(nic):
@@ -537,6 +538,26 @@ def modifyDict(username, state, machine_id, fields):
         if hasattr(validate, 'vmtype'):
             machine.type = validate.vmtype
 
+        update_acl = False
+        if hasattr(validate, 'owner') and validate.owner != machine.owner:
+            machine.owner = validate.owner
+            update_acl = True
+        if hasattr(validate, 'description'):
+            machine.description = validate.description
+        if hasattr(validate, 'admin') and validate.admin != machine.administrator:
+            machine.administrator = validate.admin
+            update_acl = True
+        if hasattr(validate, 'contact'):
+            machine.contact = validate.contact
+
+        session.save_or_update(machine)
+        session.commit()
+    except:
+        session.rollback()
+        raise
+
+    session.begin()
+    try:
         if hasattr(validate, 'disksize'):
             disksize = validate.disksize
             disk = machine.disks[0]
@@ -544,35 +565,32 @@ def modifyDict(username, state, machine_id, fields):
                 olddisk[disk.guest_device_name] = disksize
                 disk.size = disksize
                 session.save_or_update(disk)
+        for diskname in olddisk:
+            controls.resizeDisk(oldname, diskname, str(olddisk[diskname]))
+        session.save_or_update(machine)
+        session.commit()
+    except:
+        session.rollback()
+        raise
 
-        update_acl = False
-        if hasattr(validate, 'owner') and validate.owner != machine.owner:
-            machine.owner = validate.owner
-            update_acl = True
+    session.begin()
+    try:
         if hasattr(validate, 'name'):
             machine.name = validate.name
             for n in machine.nics:
                 if n.hostname == oldname:
                     n.hostname = validate.name
-        if hasattr(validate, 'description'):
-            machine.description = validate.description
-        if hasattr(validate, 'admin') and validate.admin != machine.administrator:
-            machine.administrator = validate.admin
-            update_acl = True
-        if hasattr(validate, 'contact'):
-            machine.contact = validate.contact
-
+        if hasattr(validate, 'name'):
+            controls.renameMachine(machine, oldname, validate.name)
         session.save_or_update(machine)
-        if update_acl:
-            cache_acls.refreshMachine(machine)
         session.commit()
     except:
         session.rollback()
         raise
-    for diskname in olddisk:
-        controls.resizeDisk(oldname, diskname, str(olddisk[diskname]))
-    if hasattr(validate, 'name'):
-        controls.renameMachine(machine, oldname, validate.name)
+
+    if update_acl:
+        cache_acls.refreshMachine(machine)
+
     return dict(machine=machine)
 
 def infoDict(username, state, machine):