Fix parsing of live data from OS::Nova::Server

depending on compute API version, flavor in the instance representation
may not have "id" field, but "original_name" instead.

Story: 2009753
Task: 44211
Change-Id: Ieeae2f36f5e59e01f57a2f8e66a983ec3d99ec63
This commit is contained in:
Pavlo Shchelokovskyy 2021-12-20 15:26:01 +00:00 committed by Takashi Kajinami
parent add8d16284
commit c6094856a3
1 changed files with 11 additions and 1 deletions

View File

@ -944,9 +944,19 @@ class Server(server_base.BaseServer, sh.SchedulerHintsMixin,
def parse_live_resource_data(self, resource_properties, resource_data):
server, server_data = resource_data
flavor = server_data.get(self.FLAVOR)
# NOTE(pas-ha) since compute API 2.47 flavor in instance
# does not have "id" but "original_name" instead,
# check for both here, and fail if none of them are in flavor.
if "id" in flavor:
flavor_value = flavor["id"]
elif "original_name" in flavor:
flavor_value = flavor["original_name"]
else:
raise KeyError("Flavor does not contain id or original_name")
result = {
# there's a risk that flavor id will be int type, so cast to str
self.FLAVOR: str(server_data.get(self.FLAVOR)['id']),
self.FLAVOR: str(flavor_value),
self.IMAGE: str(server_data.get(self.IMAGE)['id']),
self.NAME: server_data.get(self.NAME),
self.METADATA: server_data.get(self.METADATA),