def test_get_actual_value_returns_default_value(self, _, cfn_mock):
        cfn_mock.return_value.get_stack_parameters_dict.return_value = {"not-my-key": "my-actual-value"}

        pr = ParameterResolver()
        result = pr.get_actual_value("my-key", "|keepOrUse|default-value", "my-stack")

        cfn_mock.return_value.get_stack_parameters_dict.assert_called_once_with("my-stack")
        self.assertEqual("default-value", result)
Example #2
0
class StackActionHandler(object):
    def __init__(self, config):
        self.logger = get_logger()
        self.config = config
        self.region = config.region
        self.cfn = CloudFormation(region=self.region)
        self.parameter_resolver = ParameterResolver(region=self.region)

    def create_or_update_stacks(self):
        existing_stacks = self.cfn.get_stack_names()
        desired_stacks = self.config.stacks
        stack_processing_order = DependencyResolver().get_stack_order(desired_stacks)

        if len(stack_processing_order) > 1:
            self.logger.info(
                "Will process stacks in the following order: {0}".format(", ".join(stack_processing_order)))

        for stack_name in stack_processing_order:
            stack_config = self.config.stacks.get(stack_name)

            template_url = stack_config.template_url
            working_dir = stack_config.working_dir

            template = CloudFormationTemplateLoader.get_template_from_url(template_url, working_dir)
            template = CloudFormationTemplateTransformer.transform_template(template)

            parameters = self.parameter_resolver.resolve_parameter_values(stack_config.parameters, stack_name)

            stack = CloudFormationStack(template, parameters, stack_name, self.region, stack_config.timeout)

            if stack_name in existing_stacks:

                self.cfn.validate_stack_is_ready_for_updates(stack_name)
                self.cfn.update_stack(stack)
            else:
                self.cfn.create_stack(stack)

            CustomResourceHandler.process_post_resources(stack)
Example #3
0
 def __init__(self, config):
     self.logger = get_logger()
     self.config = config
     self.region = config.region
     self.cfn = CloudFormation(region=self.region)
     self.parameter_resolver = ParameterResolver(region=self.region)
 def test_get_default_from_keep_value_returns_proper_string_if_it_contains_separator(self):
     result = ParameterResolver.get_default_from_keep_value("|keepOrUse|foo|foo.de")
     self.assertEqual("foo|foo.de", result)
 def test_get_default_from_keep_value_returns_proper_string(self):
     result = ParameterResolver.get_default_from_keep_value("|keepOrUse|foo")
     self.assertEqual("foo", result)
 def test_is_keep_value_returns_false_for_empty_value(self):
     result = ParameterResolver.is_keep_value("")
     self.assertFalse(result)
 def test_is_keep_value_returns_true_for_mixed_case_keep_keyword(self):
     result = ParameterResolver.is_keep_value("|keepOrUse|")
     self.assertTrue(result)
 def test_is_keep_value_returns_true_for_uppercase_keep_keyword(self):
     result = ParameterResolver.is_keep_value("|KEEPORUSE|")
     self.assertTrue(result)
 def test_convert_list_to_string_returns_valid_string(self):
     list = ["a", "b", "c"]
     self.assertEqual("a,b,c", ParameterResolver.convert_list_to_string(list))
 def test_convert_list_to_string_returns_empty_list_on_empty_list(self):
     self.assertEqual("", ParameterResolver.convert_list_to_string([]))
 def test_convert_list_to_string_returns_valid_string_if_list_contains_int(self):
     list = ["a", 6, "c"]
     self.assertEqual("a,6,c", ParameterResolver.convert_list_to_string(list))