aboutsummaryrefslogtreecommitdiffstats
path: root/src/resource_inventory
diff options
context:
space:
mode:
authorParker Berberian <pberberian@iol.unh.edu>2019-01-03 15:46:32 -0500
committerParker Berberian <pberberian@iol.unh.edu>2019-02-25 11:34:10 -0500
commitb06649b237636f8fd29947094e9fc44472b88d18 (patch)
tree9061b3ff35a356f11bed235393fbd1bc590c70ac /src/resource_inventory
parentf54fc52fb6d137aabd00d16cb35a608456ac4bbc (diff)
Check for Host Availability
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>
Diffstat (limited to 'src/resource_inventory')
-rw-r--r--src/resource_inventory/resource_manager.py25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/resource_inventory/resource_manager.py b/src/resource_inventory/resource_manager.py
index 812fcd7..f43ae4d 100644
--- a/src/resource_inventory/resource_manager.py
+++ b/src/resource_inventory/resource_manager.py
@@ -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):