quota: Catch correct exception type for Compute quotas

There is a flaw (IMO) in the design of Nova's os-quota-sets API: despite
project IDs forming the identifier for an individual resource, we get a
HTTP 400 (Bad Request) error if you pass an ID that does not exist,
rather than the HTTP 404 (Not Found) we would expect.

Correct this, noting why we're doing what we're doing for readers from
the future (hi!). Note that HTTP 400 is unfortunately quite broad and
means we'll also catch things like invalid requests but the exception
may have been translated so we can't rely on a string match.

Change-Id: I720502930d50be8ead5f2033d9dbcab5d99a37a9
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
Closes-bug: #2091086
This commit is contained in:
Stephen Finucane 2024-12-05 10:56:52 +00:00
parent ecc744a4fd
commit 99cef9354b

@ -249,9 +249,14 @@ class ListQuota(command.Lister):
for project_id in project_ids:
try:
project_data = compute_client.get_quota_set(project_id)
# NOTE(stephenfin): Unfortunately, Nova raises a HTTP 400 (Bad
# Request) if the project ID is invalid, even though the project
# ID is actually the resource's identifier which would normally
# lead us to expect a HTTP 404 (Not Found).
except (
sdk_exceptions.NotFoundException,
sdk_exceptions.BadRequestException,
sdk_exceptions.ForbiddenException,
sdk_exceptions.NotFoundException,
) as exc:
# Project not found, move on to next one
LOG.warning(f"Project {project_id} not found: {exc}")
@ -312,8 +317,8 @@ class ListQuota(command.Lister):
try:
project_data = volume_client.get_quota_set(project_id)
except (
sdk_exceptions.NotFoundException,
sdk_exceptions.ForbiddenException,
sdk_exceptions.NotFoundException,
) as exc:
# Project not found, move on to next one
LOG.warning(f"Project {project_id} not found: {exc}")