From 98f53074447136b577fd0546dc77e77f5287fd5d Mon Sep 17 00:00:00 2001 From: Kai Xia Date: Fri, 11 May 2018 15:55:58 +1000 Subject: [PATCH 1/2] change default region in ssmstore lookup. Signed-off-by: Kai Xia --- stacker/lookups/handlers/ssmstore.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/stacker/lookups/handlers/ssmstore.py b/stacker/lookups/handlers/ssmstore.py index c32604309..8e0a3a455 100644 --- a/stacker/lookups/handlers/ssmstore.py +++ b/stacker/lookups/handlers/ssmstore.py @@ -13,7 +13,8 @@ def handler(value, **kwargs): [@]ssmkey - Note: The region is optional, and defaults to us-east-1 if not given. + Note: The region is optional, we'll try to get it from the current + session, if that failed, it would fall back to us-east-1 For example: @@ -36,7 +37,7 @@ def handler(value, **kwargs): """ value = read_value_from_path(value) - region = "us-east-1" + region = getattr(kwargs.get('provider'), 'region', 'us-east-1') if "@" in value: region, value = value.split("@", 1) From 3a3aaab41af75077a6829a24f4c8f099fc45ba76 Mon Sep 17 00:00:00 2001 From: Kai Xia Date: Tue, 15 May 2018 16:07:43 +1000 Subject: [PATCH 2/2] add test for region retrieval. add another set of client/stubber/response for the region change. Signed-off-by: Kai Xia --- .../tests/lookups/handlers/test_ssmstore.py | 47 +++++++++++++++---- 1 file changed, 38 insertions(+), 9 deletions(-) diff --git a/stacker/tests/lookups/handlers/test_ssmstore.py b/stacker/tests/lookups/handlers/test_ssmstore.py index ca855ffa9..8a1fe798b 100644 --- a/stacker/tests/lookups/handlers/test_ssmstore.py +++ b/stacker/tests/lookups/handlers/test_ssmstore.py @@ -8,9 +8,11 @@ class TestSSMStoreHandler(unittest.TestCase): client = boto3.client('ssm', region_name='us-east-1') + au_client = boto3.client('ssm', region_name='ap-southeast-2') def setUp(self): self.stubber = Stubber(self.client) + self.au_stubber = Stubber(self.au_client) self.get_parameters_response = { 'Parameters': [ { @@ -23,6 +25,18 @@ def setUp(self): 'invalidssmparam' ] } + self.au_get_parameters_response = { + 'Parameters': [ + { + 'Name': 'ssmkey', + 'Type': 'String', + 'Value': 'au_ssmvalue' + } + ], + 'InvalidParameters': [ + 'invalidssmparam' + ] + } self.invalid_get_parameters_response = { 'InvalidParameters': [ 'ssmkey' @@ -34,6 +48,7 @@ def setUp(self): } self.ssmkey = "ssmkey" self.ssmvalue = "ssmvalue" + self.au_ssmvalue = "au_ssmvalue" @mock.patch('stacker.lookups.handlers.ssmstore.get_session', return_value=SessionStub(client)) @@ -58,13 +73,27 @@ def test_ssmstore_invalid_value_handler(self, mock_client): assert True @mock.patch('stacker.lookups.handlers.ssmstore.get_session', - return_value=SessionStub(client)) - def test_ssmstore_handler_with_region(self, mock_client): - self.stubber.add_response('get_parameters', - self.get_parameters_response, - self.expected_params) - region = "us-east-1" - temp_value = "%s@%s" % (region, self.ssmkey) - with self.stubber: + return_value=SessionStub(au_client)) + def test_ssmstore_handler_with_implicit_region(self, mock_client): + self.au_stubber.add_response( + 'get_parameters', + self.au_get_parameters_response, + self.expected_params, + ) + with self.au_stubber: + value = handler(self.ssmkey) + self.assertEqual(value, self.au_ssmvalue) + + @mock.patch('stacker.lookups.handlers.ssmstore.get_session', + return_value=SessionStub(au_client)) + def test_ssmstore_handler_with_explicit_region(self, mock_client): + self.au_stubber.add_response( + 'get_parameters', + self.au_get_parameters_response, + self.expected_params, + ) + region = "ap-southeast-2" + temp_value = "{}@{}".format(region, self.ssmkey) + with self.au_stubber: value = handler(temp_value) - self.assertEqual(value, self.ssmvalue) + self.assertEqual(value, self.au_ssmvalue)