Fix availability_zone issues in nova driver

When getting availability_zones from Nova, SDK will return an
object of AvailabilityZone class which is processed further by
SDK instead of a respond body from Nova.

Change-Id: Idf1eaf092b2bb860e1784604fd44d3974cd0572c
Closes-bug: #1680359
(cherry picked from commit 18c66f9db5)
This commit is contained in:
HaiweiXu 2017-04-06 07:52:16 +00:00 committed by Qiming Teng
parent 6de9fceaeb
commit ce509a040a
2 changed files with 11 additions and 8 deletions

View File

@ -211,8 +211,7 @@ class NovaClient(base.DriverBase):
:returns: A list of zones that are found available on Nova.
"""
known = self.availability_zone_list()
names = [az['zoneName'] for az in known
if az['zoneState']['available']]
names = [az.name for az in known if az.state['available']]
found = []
for az in azs:

View File

@ -425,12 +425,16 @@ class TestNovaV2(base.SenlinTestCase):
def test_validate_azs(self):
nc = nova_v2.NovaClient(self.conn_params)
fake_azs = [
{'zoneState': {'available': 1}, 'zoneName': 'AZ1'},
{'zoneState': {'available': 1}, 'zoneName': 'AZ2'},
{'zoneState': {'available': 1}, 'zoneName': 'AZ3'},
{'zoneState': {'available': 1}, 'zoneName': 'AZ4'}
]
az1 = mock.Mock()
az1.name = 'AZ1'
az1.state = {'available': True}
az2 = mock.Mock()
az2.name = 'AZ2'
az2.state = {'available': True}
az3 = mock.Mock()
az3.name = 'AZ3'
az3.state = {'available': True}
fake_azs = [az1, az2, az3]
self.patchobject(nc, 'availability_zone_list', return_value=fake_azs)