From b07846fd31b36d5d22b080ec6bb23d48dbe58cd6 Mon Sep 17 00:00:00 2001 From: Varun Govinda Date: Mon, 27 Oct 2025 15:32:38 -0700 Subject: [PATCH 1/2] updating customizations/utility --- awscli/customizations/utils.py | 19 ++++++++++++------- tests/unit/customizations/test_utils.py | 1 + 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/awscli/customizations/utils.py b/awscli/customizations/utils.py index c5055418c4c3..c16273a0792f 100644 --- a/awscli/customizations/utils.py +++ b/awscli/customizations/utils.py @@ -17,7 +17,9 @@ import copy import sys -from botocore.exceptions import ClientError +from botocore.exceptions import ClientError, UnknownRegionError +from botocore.loaders import Loader +from botocore.regions import EndpointResolver from awscli.utils import create_nested_client @@ -222,9 +224,12 @@ def uni_print(statement, out_file=None): def get_policy_arn_suffix(region): """Method to return region value as expected by policy arn""" region_string = region.lower() - if region_string.startswith("cn-"): - return "aws-cn" - elif region_string.startswith("us-gov"): - return "aws-us-gov" - else: - return "aws" + loader = Loader() + endpoints_data = loader.load_data('endpoints') + resolver = EndpointResolver(endpoints_data) + + try: + return resolver.get_partition_for_region(region_string) + except UnknownRegionError: + # Fallback to 'aws' if region is not found + return 'aws' diff --git a/tests/unit/customizations/test_utils.py b/tests/unit/customizations/test_utils.py index 8b003361e090..19925af564aa 100644 --- a/tests/unit/customizations/test_utils.py +++ b/tests/unit/customizations/test_utils.py @@ -267,3 +267,4 @@ def test_get_policy_arn_suffix(self): self.assertEqual("aws", utils.get_policy_arn_suffix("us-east-1")) self.assertEqual("aws", utils.get_policy_arn_suffix("sa-east-1")) self.assertEqual("aws", utils.get_policy_arn_suffix("ap-south-1")) + self.assertEqual("aws-eusc", utils.get_policy_arn_suffix("eusc-de-east-1")) From 4efb8481c26667ca2079c3053707285a197e49b5 Mon Sep 17 00:00:00 2001 From: Andrew Asseily Date: Thu, 6 Nov 2025 01:02:49 -0500 Subject: [PATCH 2/2] Use dynamic partition lookup instead of hardcoded region mappings for policy ARNs --- .changes/next-release/bugfix-DLMEMR-23837.json | 5 +++++ awscli/customizations/utils.py | 17 ++++++----------- 2 files changed, 11 insertions(+), 11 deletions(-) create mode 100644 .changes/next-release/bugfix-DLMEMR-23837.json diff --git a/.changes/next-release/bugfix-DLMEMR-23837.json b/.changes/next-release/bugfix-DLMEMR-23837.json new file mode 100644 index 000000000000..6fb8ad975663 --- /dev/null +++ b/.changes/next-release/bugfix-DLMEMR-23837.json @@ -0,0 +1,5 @@ +{ + "type": "bugfix", + "category": "DLM, EMR", + "description": "Dynamically load AWS partition information using partitions.json instead of hardcoded region mappings. Affects ``dlm create-default-role``, ``emr create-default-roles``, and ``emr-containers update-role-trust-policy`` commands." +} diff --git a/awscli/customizations/utils.py b/awscli/customizations/utils.py index c16273a0792f..982bd9581064 100644 --- a/awscli/customizations/utils.py +++ b/awscli/customizations/utils.py @@ -17,9 +17,9 @@ import copy import sys -from botocore.exceptions import ClientError, UnknownRegionError +from botocore.exceptions import ClientError from botocore.loaders import Loader -from botocore.regions import EndpointResolver +from botocore.endpoint_provider import RuleSetStandardLibary from awscli.utils import create_nested_client @@ -223,13 +223,8 @@ def uni_print(statement, out_file=None): def get_policy_arn_suffix(region): """Method to return region value as expected by policy arn""" - region_string = region.lower() loader = Loader() - endpoints_data = loader.load_data('endpoints') - resolver = EndpointResolver(endpoints_data) - - try: - return resolver.get_partition_for_region(region_string) - except UnknownRegionError: - # Fallback to 'aws' if region is not found - return 'aws' + partitions_data = loader.load_data('partitions') + rule_lib = RuleSetStandardLibary(partitions_data) + partition_result = rule_lib.aws_partition(region.lower()) + return partition_result['name']