class TestOutputs(unittest.TestCase): def setUp(self): def mock_stack(): 0 mock_stack.outputs = [ {'OutputKey': 'StartsWithOne', 'OutputValue': 'StartsWithOneValue'}, {'OutputKey': 'StartsWithTwo', 'OutputValue': 'StartsWithTwoValue'}, {'OutputKey': 'OneWithEnds', 'OutputValue': 'OneWithEndsValue'}, {'OutputKey': 'TwoWithEnds', 'OutputValue': 'TwoWithEndsValue'} ] self.outputs = Outputs(mock_stack) def test_len(self): self.assertEqual(4, len(self.outputs)) def test_getitem(self): self.assertEquals('StartsWithOneValue', self.outputs['StartsWithOne']) def test_getitem_nokey(self): with self.assertRaises(KeyError): self.outputs['Blah'] def test_key_filter(self): results = self.outputs.keys(lambda k: k.startswith('Starts')) self.assertEqual(['StartsWithOne', 'StartsWithTwo'], results) def test_all_keys(self): results = self.outputs.keys() self.assertEqual(4, len(results)) def test_value_filter(self): results = self.outputs.values(lambda v: v.endswith('Ends')) self.assertEqual(['OneWithEndsValue', 'TwoWithEndsValue'], results) def test_all_values(self): results = self.outputs.values() self.assertEqual(4, len(results)) def test_first(self): result = self.outputs.first(lambda k: k.endswith('Ends')) self.assertEqual('OneWithEndsValue', result) def test_iter(self): count = 0 for k in self.outputs: self.assertTrue('With' in k) self.assertFalse('Value' in k) count += 1 self.assertEqual(4, count)
def load_policy_map(boto3_session, iam_stack_name=None): policy_map = {} iam = boto3_session.resource("iam") for policy in iam.policies.all(): policy_map[policy.policy_name] = policy.arn # also map IAM stack policy outputs to arns so we can use simple names # for policies created in the iam stack. if iam_stack_name is not None: cf = boto3_session.resource("cloudformation") iam_stack = cf.Stack(iam_stack_name) outputs = Outputs(iam_stack) for k in outputs.keys(key_filter=lambda x: x.endswith("Policy")): policy_map[k] = outputs[k] return policy_map