Merge "Translate VM name to UUID to avoid redirect issue"

This commit is contained in:
Zuul 2024-07-31 00:05:45 +00:00 committed by Gerrit Code Review
commit 5fea636ecb
2 changed files with 22 additions and 6 deletions

View File

@ -0,0 +1,6 @@
---
fixes:
- |
Resolves the issue where UpdateService.SimpleUpdate action cannot
complete successfully due to connections from UpdateService to System
being redirected by libvirt system driver alias handling code.

View File

@ -47,14 +47,24 @@ def update_service_simple_update():
if "Manager" in target:
message = "Manager is not currently a supported Target."
return flask.render_template('error.json', message=message), 400
try:
name = target.rstrip("/").rsplit('/', 1)[-1]
uuid = flask.current_app.systems.uuid(name)
except error.AliasAccessError as exc:
api_utils.debug('Received a redirect in respose to GET System '
'"%s". New System ID: "%s"', name, exc)
uuid = str(exc)
except Exception as exc:
api_utils.debug('Encountered exception "%s" while attempting to '
'GET System "%s"', exc, name)
raise
identity = target.rsplit('/', 1)[-1]
# NOTE(janders) iterate over the array? narrow down which one is needed
# first? I suppose the former since we may want to update multiple
api_utils.debug('Fetching BIOS information for System "%s"',
target)
uuid)
try:
versions = flask.current_app.systems.get_versions(identity)
versions = flask.current_app.systems.get_versions(uuid)
except error.NotSupportedError as ex:
api_utils.warning(
@ -67,7 +77,7 @@ def update_service_simple_update():
api_utils.debug('Current BIOS version for System "%s" is "%s" ,'
'attempting upgrade.',
target, bios_version)
uuid, bios_version)
bios_version = bios_version.split('.')
bios_version[1] = str(int(bios_version[1]) + 1)
@ -75,7 +85,7 @@ def update_service_simple_update():
firmware_versions = {"BiosVersion": bios_version}
try:
flask.current_app.systems.set_versions(identity, firmware_versions)
flask.current_app.systems.set_versions(uuid, firmware_versions)
except error.NotSupportedError as ex:
api_utils.warning('System failed to update bios with exception %s',
ex)
@ -84,5 +94,5 @@ def update_service_simple_update():
api_utils.info(
'Emulated BIOS upgrade has been successful for '
'System %s, new version is "%s".', target, bios_version)
'System %s, new version is "%s".', uuid, bios_version)
return '', 204, {'Location': '/redfish/v1/TaskService/Tasks/42'}