コード例 #1
0
    def resolve_parameter_values(self, parameters_dict, stack_name):
        parameters = {}
        for key, value in parameters_dict.items():

            if isinstance(value, list):

                self.logger.debug("List parameter found for {0}".format(key))
                value_string = self.convert_list_to_string(value)
                parameters[key] = value_string

            elif isinstance(value, str):

                if DependencyResolver.is_parameter_reference(value):
                    referenced_stack, output_name = DependencyResolver.parse_stack_reference_value(value)
                    parameters[key] = str(self.get_output_value(referenced_stack + '.' + output_name))

                elif self.is_keep_value(value):
                    parameters[key] = str(self.get_actual_value(key, value, stack_name))

                elif self.is_taupage_ami_reference(value):
                    parameters[key] = str(self.ec2.get_latest_taupage_image_id())

                else:
                    parameters[key] = value

            elif isinstance(value, bool):
                parameters[key] = str(value).lower()
            elif isinstance(value, int):
                parameters[key] = str(value)
            elif isinstance(value, float):
                parameters[key] = str(value)
            else:
                raise NotImplementedError("Cannot handle {0} value for key: {1}".format(type(value), key))

        return parameters
コード例 #2
0
    def test_get_stack_order_accepts_stacks_without_parameters_key(self):
        stacks = {'default-sg': {},
                  'app1': None,
                  'app2': {},
                  'vpc': {},
                  }

        result = 4

        self.assertEqual(result, len(DependencyResolver.get_stack_order(stacks)))
コード例 #3
0
    def test_get_stack_order_includes_independent_stacks(self):
        stacks = {'default-sg': StackConfig({'template-url': 'horst.yml'}),
                  'app1': StackConfig(
                      {'template-url': 'horst.yml', 'parameters': {'a': '|Ref|vpc.id', 'b': '|Ref|default-sg.id'}}),
                  'app2': StackConfig({'template-url': 'horst.yml',
                                       'parameters': {'a': '|Ref|vpc.id', 'b': '|Ref|default-sg.id',
                                                      'c': 'Ref::app1.id'}}),
                  'vpc': StackConfig({'template-url': 'horst.yml',
                                      'parameters': {'logBucketName': 'is24-cloudtrail-logs',
                                                     'includeGlobalServices': False}})
                  }

        result = 4

        self.assertEqual(result, len(DependencyResolver.get_stack_order(stacks)))
コード例 #4
0
    def test_get_stack_order_returns_a_valid_order(self):
        stacks = {'default-sg': StackConfig({'template-url': 'horst.yml', 'parameters': {'a': 'Ref::vpc.id'}}),
                  'app1': StackConfig(
                      {'template-url': 'horst.yml', 'parameters': {'a': '|Ref|vpc.id', 'b': '|Ref|default-sg.id'}}),
                  'app2': StackConfig({'template-url': 'horst.yml',
                                       'parameters': {'a': '|Ref|vpc.id', 'b': '|Ref|default-sg.id',
                                                      'c': '|Ref|app1.id'}}),
                  'vpc': StackConfig({'template-url': 'horst.yml',
                                      'parameters': {'logBucketName': 'is24-cloudtrail-logs',
                                                     'includeGlobalServices': False}})
                  }

        expected = ['vpc', 'default-sg', 'app1', 'app2']

        self.assertEqual(expected, DependencyResolver.get_stack_order(stacks))
コード例 #5
0
 def test_parse_stack_reference_value_returns_stack_and_output_name_tuple(self):
     self.assertEqual(('stack', 'output'), DependencyResolver.parse_stack_reference_value('|ref|stack.output'))
コード例 #6
0
 def test_parse_stack_reference_value_returns_none_for_non_reference(self):
     self.assertIsNone(DependencyResolver.parse_stack_reference_value('foo'))
コード例 #7
0
 def test_filter_unmanaged_stacks_filters_all_occurences(self):
     stacks = ['a', 'b', 'c', 'c']
     managed_stacks = ['a']
     self.assertListEqual(managed_stacks, DependencyResolver.filter_unmanaged_stacks(managed_stacks, stacks))
コード例 #8
0
 def test_is_parameter_reference_returns_true_for_uppercase_ref(self):
     self.assertTrue(DependencyResolver.is_parameter_reference("|Ref|vpc.id"))
コード例 #9
0
 def test_get_stack_order_raises_exception_on_cyclic_dependency(self):
     stacks = {'app1': {'parameters': {'a': 'Ref::app2.id'}},
               'app2': {'parameters': {'a': 'Ref::app1.id'}}
               }
     with self.assertRaises(Exception):
         DependencyResolver.get_stack_order(stacks)
コード例 #10
0
 def test_is_parameter_reference_returns_true_on_empty_reference(self):
     self.assertTrue(DependencyResolver.is_parameter_reference('|ref|'))
コード例 #11
0
 def test_is_parameter_reference_returns_false_for_boolean_values(self):
     self.assertFalse(DependencyResolver.is_parameter_reference(True))
コード例 #12
0
 def test_is_parameter_reference_returns_false_for_simple_string(self):
     self.assertFalse(DependencyResolver.is_parameter_reference("vpc.id"))
コード例 #13
0
 def test_is_parameter_reference_returns_false_for_single_separator(self):
     self.assertFalse(DependencyResolver.is_parameter_reference("Ref|vpc.id"))
コード例 #14
0
 def test_parse_stack_reference_raises_exception_on_empty_reference(self):
     with self.assertRaises(CfnSphereException):
         DependencyResolver.parse_stack_reference_value('|ref|')
コード例 #15
0
 def test_parse_stack_reference_raises_exception_on_missing_dot(self):
     with self.assertRaises(CfnSphereException):
         DependencyResolver.parse_stack_reference_value('|ref|foo')