From ed9638e79bc40ce9fd31d71f7d07fb5485ef2e02 Mon Sep 17 00:00:00 2001 From: Zhiwei Liang Date: Mon, 1 Dec 2025 16:01:41 -0500 Subject: [PATCH 1/3] Filter regions based on account availabilities in get_regions function --- test/integration/conftest.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/test/integration/conftest.py b/test/integration/conftest.py index 3692269dc..cd5ce335a 100644 --- a/test/integration/conftest.py +++ b/test/integration/conftest.py @@ -56,10 +56,27 @@ def get_regions( return Region(client, region_override) regions = client.regions() + ALL_ACCOUNT_AVAILABILITIES = { + "Linodes", + "NodeBalancers", + "Block Storage", + "Kubernetes", + } + account_availabilities = client.account.availabilities() + account_regional_availabilities = { + a.region: a.available for a in account_availabilities + } + + print(account_regional_availabilities) if capabilities is not None: regions = [ - v for v in regions if set(capabilities).issubset(v.capabilities) + v + for v in regions + if set(capabilities).issubset(v.capabilities) + and set(capabilities) + .intersection(ALL_ACCOUNT_AVAILABILITIES) + .issubset(account_regional_availabilities.get(v.id, [])) ] if site_type is not None: From d00bef59533f8443af8cd77af6592f107d019a58 Mon Sep 17 00:00:00 2001 From: Zhiwei Liang Date: Sat, 27 Dec 2025 01:09:56 -0500 Subject: [PATCH 2/3] Bypass account's region availabilities check when the token has no account access --- test/integration/conftest.py | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/test/integration/conftest.py b/test/integration/conftest.py index cd5ce335a..ee0c39093 100644 --- a/test/integration/conftest.py +++ b/test/integration/conftest.py @@ -1,4 +1,5 @@ import ipaddress +import logging import os import random import time @@ -26,6 +27,7 @@ PlacementGroupType, PostgreSQLDatabase, ) +from linode_api4.errors import ApiError from linode_api4.linode_client import LinodeClient, MonitorClient from linode_api4.objects import Region @@ -35,6 +37,8 @@ ENV_API_CA_NAME = "LINODE_API_CA" RUN_LONG_TESTS = "RUN_LONG_TESTS" +logger = logging.getLogger(__name__) + def get_token(): return os.environ.get(ENV_TOKEN_NAME, None) @@ -62,12 +66,20 @@ def get_regions( "Block Storage", "Kubernetes", } - account_availabilities = client.account.availabilities() - account_regional_availabilities = { - a.region: a.available for a in account_availabilities - } - print(account_regional_availabilities) + account_regional_availabilities = {} + try: + account_availabilities = client.account.availabilities() + for availability in account_availabilities: + account_regional_availabilities[availability.region] = ( + availability.available + ) + except ApiError: + logger.warning( + "Failed to retrieve account availabilities for regions. " + "Assuming required capabilities are available in all regions for this account. " + "Tests may fail if the account lacks access to necessary capabilities in the selected region." + ) if capabilities is not None: regions = [ @@ -76,7 +88,16 @@ def get_regions( if set(capabilities).issubset(v.capabilities) and set(capabilities) .intersection(ALL_ACCOUNT_AVAILABILITIES) - .issubset(account_regional_availabilities.get(v.id, [])) + .issubset( + account_regional_availabilities.get( + v.id, + ( + [] + if account_regional_availabilities + else ALL_ACCOUNT_AVAILABILITIES + ), + ) + ) ] if site_type is not None: From 4034689298770713c362e824d332c514ba833203 Mon Sep 17 00:00:00 2001 From: Zhiwei Liang Date: Sat, 27 Dec 2025 01:13:05 -0500 Subject: [PATCH 3/3] Make ALL_ACCOUNT_AVAILABILITIES a global constant --- test/integration/conftest.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/test/integration/conftest.py b/test/integration/conftest.py index a1df09ba1..459c3319a 100644 --- a/test/integration/conftest.py +++ b/test/integration/conftest.py @@ -38,6 +38,13 @@ RUN_LONG_TESTS = "RUN_LONG_TESTS" SKIP_E2E_FIREWALL = "SKIP_E2E_FIREWALL" +ALL_ACCOUNT_AVAILABILITIES = { + "Linodes", + "NodeBalancers", + "Block Storage", + "Kubernetes", +} + logger = logging.getLogger(__name__) @@ -61,12 +68,6 @@ def get_regions( return Region(client, region_override) regions = client.regions() - ALL_ACCOUNT_AVAILABILITIES = { - "Linodes", - "NodeBalancers", - "Block Storage", - "Kubernetes", - } account_regional_availabilities = {} try: