diff options
author | Parker Berberian <pberberian@iol.unh.edu> | 2019-01-03 15:46:32 -0500 |
---|---|---|
committer | Parker Berberian <pberberian@iol.unh.edu> | 2019-02-25 11:34:10 -0500 |
commit | b06649b237636f8fd29947094e9fc44472b88d18 (patch) | |
tree | 9061b3ff35a356f11bed235393fbd1bc590c70ac | |
parent | f54fc52fb6d137aabd00d16cb35a608456ac4bbc (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>
-rw-r--r-- | src/resource_inventory/resource_manager.py | 25 |
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): |