From: Parker Berberian Date: Thu, 3 Jan 2019 20:46:32 +0000 (-0500) Subject: Check for Host Availability X-Git-Tag: 2.0.99~147 X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=commitdiff_plain;h=b06649b237636f8fd29947094e9fc44472b88d18;p=laas.git 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 --- 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):