Check for Host Availability 71/66171/2
authorParker Berberian <pberberian@iol.unh.edu>
Thu, 3 Jan 2019 20:46:32 +0000 (15:46 -0500)
committerParker Berberian <pberberian@iol.unh.edu>
Mon, 25 Feb 2019 16:34:10 +0000 (11:34 -0500)
Currently, if not enough hosts are free to fulfill a booking,
booking creation will fail with an error message to the users.
This commit adds a way to check if a given POD will be available
and communicates to the user if not.

Change-Id: Ib75d9ee4759cf991a5c985cb4a6f7baaaafbe8fa
Signed-off-by: Parker Berberian <pberberian@iol.unh.edu>
dashboard/src/resource_inventory/resource_manager.py

index 812fcd7..f43ae4d 100644 (file)
@@ -38,6 +38,31 @@ class ResourceManager:
         hostprofileset = HostProfile.objects.filter(host__in=hostset, labs=lab)
         return set(hostprofileset)
 
+    def hostsAvailable(self, grb):
+        """
+        This method will check if the given GenericResourceBundle
+        is available. No changes to the database
+        """
+
+        # count up hosts
+        profile_count = {}
+        for host in grb.getHosts():
+            if host.profile not in profile_count:
+                profile_count[host.profile] = 0
+            profile_count[host.profile] += 1
+
+        # check that all required hosts are available
+        for profile in profile_count.keys():
+            available = Host.objects.filter(
+                booked=False,
+                lab=grb.lab,
+                profile=profile
+            ).count()
+            needed = profile_count[profile]
+            if available < needed:
+                return False
+        return True
+
     # public interface
     def deleteResourceBundle(self, resourceBundle):
         for host in Host.objects.filter(bundle=resourceBundle):