From 9071e494ff0e1daeb38cbc021b2da360d69a307e Mon Sep 17 00:00:00 2001 From: Varun Govinda Date: Mon, 27 Oct 2025 16:01:35 -0700 Subject: [PATCH 1/4] updating customizations/utils --- 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 fd135a8714a2..5027165d4e3a 100644 --- a/awscli/customizations/utils.py +++ b/awscli/customizations/utils.py @@ -20,7 +20,9 @@ import sys import xml -from botocore.exceptions import ClientError +from botocore.exceptions import ClientError, UnknownRegionError +from botocore.loaders import Loader +from botocore.regions import EndpointResolver from awscli.customizations.exceptions import ParamValidationError @@ -208,12 +210,15 @@ 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' def get_shape_doc_overview(shape): diff --git a/tests/unit/customizations/test_utils.py b/tests/unit/customizations/test_utils.py index f6c5a2bed071..19cdbc6d2f10 100644 --- a/tests/unit/customizations/test_utils.py +++ b/tests/unit/customizations/test_utils.py @@ -263,6 +263,7 @@ 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")) class TestGetShapeDocOverview(unittest.TestCase): From 4971af5efb6a0356cd37d18d9d0737efbd9170e4 Mon Sep 17 00:00:00 2001 From: Varun Govinda Date: Fri, 31 Oct 2025 12:53:43 -0700 Subject: [PATCH 2/4] refactor --- awscli/customizations/utils.py | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/awscli/customizations/utils.py b/awscli/customizations/utils.py index 5027165d4e3a..c9e4e82ac435 100644 --- a/awscli/customizations/utils.py +++ b/awscli/customizations/utils.py @@ -20,9 +20,10 @@ import sys import xml -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.customizations.exceptions import ParamValidationError @@ -209,16 +210,11 @@ 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'] def get_shape_doc_overview(shape): From 6d05f5bcf7007030327b192e5d0a204e2bb879be Mon Sep 17 00:00:00 2001 From: Andrew Asseily Date: Tue, 4 Nov 2025 16:17:13 -0500 Subject: [PATCH 3/4] Add changelog entry --- .changes/next-release/bugfix-DLMEMR-99146.json | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changes/next-release/bugfix-DLMEMR-99146.json diff --git a/.changes/next-release/bugfix-DLMEMR-99146.json b/.changes/next-release/bugfix-DLMEMR-99146.json new file mode 100644 index 000000000000..812d7fcc21e0 --- /dev/null +++ b/.changes/next-release/bugfix-DLMEMR-99146.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``, ``emr-containers create-role-associations``, and ``emr-containers update-role-trust-policy`` commands." +} From 637de17cb4e1906a96115df86e724dd81ad77818 Mon Sep 17 00:00:00 2001 From: Andrew Asseily <77591070+AndrewAsseily@users.noreply.github.com> Date: Thu, 6 Nov 2025 09:12:05 -0500 Subject: [PATCH 4/4] Remove unnecessary blank line in utils.py --- awscli/customizations/utils.py | 1 - 1 file changed, 1 deletion(-) diff --git a/awscli/customizations/utils.py b/awscli/customizations/utils.py index c9e4e82ac435..8761b32bd1fa 100644 --- a/awscli/customizations/utils.py +++ b/awscli/customizations/utils.py @@ -24,7 +24,6 @@ from botocore.loaders import Loader from botocore.endpoint_provider import RuleSetStandardLibary - from awscli.customizations.exceptions import ParamValidationError _SENTENCE_DELIMETERS_REGEX = re.compile(r'[.:]+')