Fix migration and models
[pharos-tools.git] / dashboard / src / workflow / resource_bundle_workflow.py
index 9fb4ae1..4858ebe 100644 (file)
@@ -35,7 +35,8 @@ from dashboard.exceptions import (
     InvalidVlanConfigurationException,
     NetworkExistsException,
     InvalidHostnameException,
-    NonUniqueHostnameException
+    NonUniqueHostnameException,
+    ResourceAvailabilityException
 )
 
 import logging
@@ -130,9 +131,12 @@ class Define_Hardware(WorkflowStep):
         try:
             self.form = HardwareDefinitionForm(request.POST)
             if self.form.is_valid():
-                self.update_models(self.form.cleaned_data)
-                self.update_confirmation()
-                self.metastep.set_valid("Step Completed")
+                if len(json.loads(self.form.cleaned_data['filter_field'])['labs']) != 1:
+                    self.metastep.set_invalid("Please select one lab")
+                else:
+                    self.update_models(self.form.cleaned_data)
+                    self.update_confirmation()
+                    self.metastep.set_valid("Step Completed")
             else:
                 self.metastep.set_invalid("Please complete the fields highlighted in red to continue")
                 pass
@@ -233,6 +237,8 @@ class Define_Nets(WorkflowStep):
             self.updateModels(xmlData)
             # update model with xml
             self.metastep.set_valid("Networks applied successfully")
+        except ResourceAvailabilityException:
+            self.metastep.set_invalid("Public network not availble")
         except Exception:
             self.metastep.set_invalid("An error occurred when applying networks")
         return self.render(request)
@@ -261,6 +267,9 @@ class Define_Nets(WorkflowStep):
                     vlan_id = network['network']['vlan']
                     is_public = network['network']['public']
                     if is_public:
+                        public_net = vlan_manager.get_public_vlan()
+                        if public_net is None:
+                            raise ResourceAvailabilityException("No public networks available")
                         vlan_id = vlan_manager.get_public_vlan().vlan
                     vlan = Vlan(vlan_id=vlan_id, tagged=network['tagged'], public=is_public)
                     models['vlans'][existing_host.resource.name][iface['profile_name']].append(vlan)