From cb34fe1ef19d950b836f37ad833627b463572c49 Mon Sep 17 00:00:00 2001 From: Zhiwei Liang Date: Mon, 13 Jul 2026 23:13:53 -0400 Subject: [PATCH 1/4] Only set obj quota usage when has_usage is true --- plugins/modules/object_storage_quota_info.py | 28 +++++++++++++++---- .../object_storage_quota_info/tasks/main.yaml | 2 +- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/plugins/modules/object_storage_quota_info.py b/plugins/modules/object_storage_quota_info.py index 47880da4a..8be67fb0f 100644 --- a/plugins/modules/object_storage_quota_info.py +++ b/plugins/modules/object_storage_quota_info.py @@ -5,16 +5,36 @@ from __future__ import absolute_import, division, print_function +from typing import Any + from ansible_collections.linode.cloud.plugins.module_utils.doc_fragments import ( object_storage_quota_info as docs, ) from ansible_collections.linode.cloud.plugins.module_utils.linode_common_info import ( InfoModule, InfoModuleAttr, + InfoModuleParam, InfoModuleResult, ) from ansible_specdoc.objects import FieldType -from linode_api4 import ObjectStorageQuota +from linode_api4 import LinodeClient, ObjectStorageQuota + + +def get_quota_usage( + client: LinodeClient, + object_storage_quota: dict[str, Any], + params: list[InfoModuleParam], +) -> dict[str, Any] | None: + """Return quota usage details for a quota when usage is available.""" + if not object_storage_quota["has_usage"]: + return None + + return ( + ObjectStorageQuota(client, object_storage_quota["quota_id"]) + .usage() + .dict + ) + module = InfoModule( examples=docs.specdoc_examples, @@ -33,11 +53,7 @@ docs_url="https://techdocs.akamai.com/linode-api/reference" "/get-object-storage-quota-usage", samples=docs.result_object_storage_quota_usage_samples, - get=lambda client, object_storage_quota, params: ObjectStorageQuota( - client, object_storage_quota["quota_id"] - ) - .usage() - .dict, + get=get_quota_usage, ), ], attributes=[ diff --git a/tests/integration/targets/object_storage_quota_info/tasks/main.yaml b/tests/integration/targets/object_storage_quota_info/tasks/main.yaml index 51ab8d040..e01ca9916 100644 --- a/tests/integration/targets/object_storage_quota_info/tasks/main.yaml +++ b/tests/integration/targets/object_storage_quota_info/tasks/main.yaml @@ -18,7 +18,7 @@ assert: that: - obj_quota.object_storage_quota.quota_id == obj_quota_list.object_storage_quotas[0].quota_id - - obj_quota.quota_usage.quota_limit + - not (obj_quota.object_storage_quota.has_usage | bool) or (obj_quota.quota_usage.quota_limit is integer) environment: LINODE_UA_PREFIX: '{{ ua_prefix }}' From c3ef40850376c9d087073730d1a0c0743ce17ee8 Mon Sep 17 00:00:00 2001 From: Zhiwei Liang Date: Wed, 15 Jul 2026 11:24:55 -0400 Subject: [PATCH 2/4] Update Python version support in pyproject.toml to include 3.10 and adjust target versions --- pyproject.toml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 849f7bda1..a09f287af 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,10 +5,11 @@ line_length = 80 [tool.black] line-length = 80 target-version = [ - "py39", "py310", "py311", "py312", + "py313", + "py314", ] exclude = "plugins/module_utils/doc_fragments" @@ -56,5 +57,5 @@ disable = [ "fixme", ] max-positional-arguments = 12 -py-version = "3.9" +py-version = "3.10" extension-pkg-whitelist = "math" From ce0b6ea3ab77469abd6aa07205ca64694876812e Mon Sep 17 00:00:00 2001 From: Zhiwei Liang Date: Wed, 15 Jul 2026 15:18:34 -0400 Subject: [PATCH 3/4] refactor: remove unused InfoModuleParam import and update function parameter type --- plugins/modules/object_storage_quota_info.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/plugins/modules/object_storage_quota_info.py b/plugins/modules/object_storage_quota_info.py index 8be67fb0f..28f49fc84 100644 --- a/plugins/modules/object_storage_quota_info.py +++ b/plugins/modules/object_storage_quota_info.py @@ -13,7 +13,6 @@ from ansible_collections.linode.cloud.plugins.module_utils.linode_common_info import ( InfoModule, InfoModuleAttr, - InfoModuleParam, InfoModuleResult, ) from ansible_specdoc.objects import FieldType @@ -23,7 +22,7 @@ def get_quota_usage( client: LinodeClient, object_storage_quota: dict[str, Any], - params: list[InfoModuleParam], + _: dict | None, ) -> dict[str, Any] | None: """Return quota usage details for a quota when usage is available.""" if not object_storage_quota["has_usage"]: From 994df5ecc5a1e08d943528f2fd6940f95e0d6007 Mon Sep 17 00:00:00 2001 From: Zhiwei Liang <121905282+zliang-akamai@users.noreply.github.com> Date: Wed, 15 Jul 2026 15:21:11 -0400 Subject: [PATCH 4/4] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .../targets/object_storage_quota_info/tasks/main.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/integration/targets/object_storage_quota_info/tasks/main.yaml b/tests/integration/targets/object_storage_quota_info/tasks/main.yaml index e01ca9916..15f0a3b4d 100644 --- a/tests/integration/targets/object_storage_quota_info/tasks/main.yaml +++ b/tests/integration/targets/object_storage_quota_info/tasks/main.yaml @@ -18,7 +18,7 @@ assert: that: - obj_quota.object_storage_quota.quota_id == obj_quota_list.object_storage_quotas[0].quota_id - - not (obj_quota.object_storage_quota.has_usage | bool) or (obj_quota.quota_usage.quota_limit is integer) + - ((obj_quota.object_storage_quota.has_usage | bool) and (obj_quota.quota_usage.quota_limit is integer)) or ((not (obj_quota.object_storage_quota.has_usage | bool)) and (obj_quota.quota_usage is none)) environment: LINODE_UA_PREFIX: '{{ ua_prefix }}'