Exemplo n.º 1
0
    def create_stack(self, stack):
        assert isinstance(stack, CloudFormationStack)
        try:
            self.logger.info(
                "Creating stack {0} from template {1} with parameters:\n{2}".format(stack.name, stack.template.name,
                                                                                    get_pretty_parameters_string(
                                                                                        stack.parameters)))
            self.conn.create_stack(stack.name,
                                   template_body=stack.template.get_template_json(),
                                   parameters=stack.get_parameters_list(),
                                   capabilities=['CAPABILITY_IAM'])

            self.wait_for_stack_action_to_complete(stack.name, "create", stack.timeout)
            self.logger.info("Create completed for {0}".format(stack.name))
        except BotoServerError as e:
            message = get_message_from_boto_server_error(e)
            raise CfnStackActionFailedException(
                "Could not create stack {0}. Cfn API responded with: {1}".format(stack.name, message))
Exemplo n.º 2
0
    def update_stack(self, stack):
        assert isinstance(stack, CloudFormationStack)
        try:
            self.logger.info(
                "Updating stack {0} from template {1} with parameters:\n{2}".format(stack.name, stack.template.name,
                                                                                    get_pretty_parameters_string(
                                                                                        stack.parameters)))

            self.conn.update_stack(stack.name,
                                   template_body=stack.template.get_template_json(),
                                   parameters=stack.get_parameters_list(),
                                   capabilities=['CAPABILITY_IAM'])

            self.wait_for_stack_action_to_complete(stack.name, "update", stack.timeout)
            self.logger.info("Update completed for {0}".format(stack.name))
        except BotoServerError as e:
            message = get_message_from_boto_server_error(e)

            if message == "No updates are to be performed.":
                self.logger.info("Nothing to do: {0}.".format(message))
            else:
                raise CfnStackActionFailedException("{0}.".format(message))