Пример #1
0
    def test_wait_for_execute_no_changes(self):
        stack_name = "stack_name"
        changeset_type = "CREATE"

        mock_client = Mock()
        mock_deployer = Deployer(mock_client)
        mock_waiter = Mock()
        mock_client.get_waiter.return_value = mock_waiter

        waiter_error = botocore.exceptions.WaiterError(name="name",
                                                       reason="reason",
                                                       last_response={})
        mock_waiter.wait.side_effect = waiter_error

        with self.assertRaises(exceptions.DeployFailedError):
            mock_deployer.wait_for_execute(stack_name, changeset_type)

        waiter_config = {
            'Delay': 5,
            'MaxAttempts': 720,
        }
        mock_waiter.wait.assert_called_once_with(StackName=stack_name,
                                                 WaiterConfig=waiter_config)

        mock_client.get_waiter.assert_called_once_with(
                "stack_create_complete")
Пример #2
0
    def test_wait_for_execute_no_changes(self):
        stack_name = "stack_name"
        changeset_type = "CREATE"

        mock_client = mock.Mock()
        mock_deployer = Deployer(mock_client)
        mock_waiter = mock.Mock()
        mock_client.get_waiter.return_value = mock_waiter

        waiter_error = botocore.exceptions.WaiterError(name="name",
                                                       reason="reason",
                                                       last_response={})
        mock_waiter.wait.side_effect = waiter_error

        with self.assertRaises(exceptions.DeployFailedError):
            mock_deployer.wait_for_execute(stack_name, changeset_type)

        waiter_config = {
            'Delay': 30,
            'MaxAttempts': 120,
        }
        mock_waiter.wait.assert_called_once_with(StackName=stack_name,
                                                 WaiterConfig=waiter_config)

        mock_client.get_waiter.assert_called_once_with("stack_create_complete")
Пример #3
0
 def publish(self, stack_name):
     d = Deployer(boto3.client('cloudformation'))
     result = d.create_and_wait_for_changeset(
         stack_name=stack_name,
         cfn_template=self.get_template(),
         parameter_values=[],
         capabilities=['CAPABILITY_IAM'])
     d.execute_changeset(result.changeset_id, stack_name)
     d.wait_for_execute(stack_name, result.changeset_type)
def deploy_template(session, config, packaged_yaml, approve=False):
    success = True
    print('\nDeploying...')
    client = session.create_client('cloudformation')
    stack_name = conventions.generate_stack_name(config['Parameters'])
    deployer = Deployer(client)
    tags = conventions.merge_tags(config.get('Tags', {}), config['Parameters'])

    try:
        result = deployer.create_and_wait_for_changeset(
            stack_name=stack_name,
            cfn_template=packaged_yaml,
            parameter_values=deploy_template_parameters_builder(
                config['Parameters']),
            capabilities=['CAPABILITY_NAMED_IAM'],
            role_arn=None,
            notification_arns=None,
            s3_uploader=None,
            tags=deploy_template_tags_builder(tags))
        display_changeset(session, stack_name, result.changeset_id)
        if not approve:
            utils.get_confirmation()

        execute_changeset_token = str(uuid.uuid4())
        client.execute_change_set(ChangeSetName=result.changeset_id,
                                  StackName=stack_name,
                                  ClientRequestToken=execute_changeset_token)
        deployer.wait_for_execute(stack_name, result.changeset_type)
    except exceptions.ChangeEmptyError as ex:
        logging.error(ex)
        success = False
    except exceptions.DeployFailedError as ex:
        logging.error(ex)
        # print(colored(ex.response['Error']['Message'], 'red'))
        stack_events = get_stack_events(session, stack_name,
                                        execute_changeset_token)
        aws.display_cfn_stack_events(stack_events)
        success = False
    except botocore.exceptions.ClientError as ex:
        logging.error(ex)
        success = False

    print('Done.')
    return success