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)
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)
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))