Skip to content

Commit

Permalink
Pull logic into util function, add tests for resource tagging api reg…
Browse files Browse the repository at this point in the history
…ions
  • Loading branch information
bdljohnson committed May 6, 2024
1 parent f67801e commit d8551c8
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 13 deletions.
16 changes: 3 additions & 13 deletions c7n/tags.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,20 +71,10 @@ def universal_augment(self, resources):
if not resources:
return resources

# For global resources, tags don't populate in the get_resources call
# unless the call is being made to us-east-1. For govcloud this is us-gov-west-1.
partition = utils.get_partition(self.region)
r = ""
if partition == "aws-us-gov":
r = getattr(self.resource_type, 'global_resource', None) and 'us-gov-west-1' or self.region
elif partition == "aws":
r = getattr(self.resource_type, 'global_resource', None) and 'us-east-1' or self.region
else:
r = self.region

self.log.debug("Using region %s for resource tagging" % r)
region = utils.get_resource_tagging_region(self.resource_type, self.region)
self.log.debug("Using region %s for resource tagging" % region)
client = utils.local_session(
self.session_factory).client('resourcegroupstaggingapi', region_name=r)
self.session_factory).client('resourcegroupstaggingapi', region_name=region)

# Lazy for non circular :-(
from c7n.query import RetryPageIterator
Expand Down
11 changes: 11 additions & 0 deletions c7n/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -803,3 +803,14 @@ def get_support_region(manager):
elif partition == "aws-cn":
support_region = "cn-north-1"
return support_region

def get_resource_tagging_region(resource_type, region):
# For global resources, tags don't populate in the get_resources call
# unless the call is being made to us-east-1. For govcloud this is us-gov-west-1.

partition = get_partition(region)
if partition == "aws":
return getattr(resource_type, 'global_resource', None) and 'us-east-1' or region
elif partition == "aws-us-gov":
return getattr(resource_type, 'global_resource', None) and 'us-gov-west-1' or region
return region
21 changes: 21 additions & 0 deletions tests/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from dateutil.parser import parse as parse_date
import mock

from c7n import query
from c7n import utils
from c7n.config import Config
from .common import BaseTest
Expand Down Expand Up @@ -542,6 +543,26 @@ def test_get_support_region(self):
mock_manager.config.region = "cn-north-1"
res = utils.get_support_region(mock_manager)
self.assertEqual("cn-north-1", res)

def test_get_resource_tagging_region(self):

resource_type = query.TypeInfo()

# Regional endpoint checks
self.assertEqual(utils.get_resource_tagging_region(resource_type, 'us-east-2'), 'us-east-2')
self.assertEqual(utils.get_resource_tagging_region(resource_type, 'ap-southeast-1'), 'ap-southeast-1')
self.assertEqual(utils.get_resource_tagging_region(resource_type, 'eu-west-1'), 'eu-west-1')
self.assertEqual(utils.get_resource_tagging_region(resource_type, 'us-gov-east-1'), 'us-gov-east-1')
self.assertEqual(utils.get_resource_tagging_region(resource_type, 'cn-north-1'), 'cn-north-1')
self.assertEqual(utils.get_resource_tagging_region(resource_type, 'us-iso-east-1'), 'us-iso-east-1')

# Global resource checks
resource_type.global_resource = True

self.assertEqual(utils.get_resource_tagging_region(resource_type, 'us-east-2'), 'us-east-1')
self.assertEqual(utils.get_resource_tagging_region(resource_type, 'us-gov-east-1'), 'us-gov-west-1')
self.assertEqual(utils.get_resource_tagging_region(resource_type, 'cn-north-1'), 'cn-north-1')
self.assertEqual(utils.get_resource_tagging_region(resource_type, 'us-iso-east-1'), 'us-iso-east-1')


def test_parse_date_floor():
Expand Down

0 comments on commit d8551c8

Please sign in to comment.