summaryrefslogtreecommitdiffstats
path: root/nova/api
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-01-09 04:09:00 +0000
committerGerrit Code Review <review@openstack.org>2013-01-09 04:09:00 +0000
commitdcd4327bd05a637bc49166920ccecf33e7ea4d5a (patch)
tree71be533ee37fa28a35d4d408444a34e6d8c9bd28 /nova/api
parentbeee8b112a92475d0e0cf575f5bcebefe3bc6188 (diff)
parent9f4534ab584faeee1e24d4c1bb38a2b194f24626 (diff)
downloadnova-dcd4327bd05a637bc49166920ccecf33e7ea4d5a.tar.gz
nova-dcd4327bd05a637bc49166920ccecf33e7ea4d5a.tar.xz
nova-dcd4327bd05a637bc49166920ccecf33e7ea4d5a.zip
Merge "Enable Aggregate based availability zones"
Diffstat (limited to 'nova/api')
-rw-r--r--nova/api/ec2/cloud.py17
1 files changed, 16 insertions, 1 deletions
diff --git a/nova/api/ec2/cloud.py b/nova/api/ec2/cloud.py
index a764a99bf..eb8139ad0 100644
--- a/nova/api/ec2/cloud.py
+++ b/nova/api/ec2/cloud.py
@@ -257,12 +257,18 @@ class CloudController(object):
if not zone in available_zones:
available_zones.append(zone)
+ # aggregate based availability_zones
+ metadata = db.aggregate_host_get_by_metadata_key(context,
+ key='availability_zone')
+ for zone_set in metadata.values():
+ for zone in zone_set:
+ if zone not in available_zones:
+ available_zones.append(zone)
not_available_zones = []
for zone in [service.availability_zone for service in disabled_services
if not service['availability_zone'] in available_zones]:
if not zone in not_available_zones:
not_available_zones.append(zone)
-
return (available_zones, not_available_zones)
def _describe_availability_zones(self, context, **kwargs):
@@ -294,6 +300,15 @@ class CloudController(object):
host_services.setdefault(service['host'], [])
host_services[service['host']].append(service)
+ # aggregate based available_zones
+ metadata = db.aggregate_host_get_by_metadata_key(context,
+ key='availability_zone')
+ # metdata: {machine: set( az1, az2 )}
+ for host, zones in metadata.items():
+ for zone in zones:
+ zone_hosts.setdefault(zone, [])
+ if host not in zone_hosts[zone]:
+ zone_hosts[zone].append(host)
result = []
for zone in available_zones: