Beispiel #1
0
 def test_stack_missing_bucket(self, manage_cfn_stack_mock):
     manage_cfn_stack_mock.return_value = []
     with self.assertRaises(UserException):
         manage_stack("testProfile", "fakeRegion")
     manage_cfn_stack_mock.return_value = [{
         "OutputKey": "NotSourceBucket",
         "OutputValue": "AnyValue"
     }]
     with self.assertRaises(UserException):
         manage_stack("testProfile", "fakeRegion")
Beispiel #2
0
    def guided_prompts(self, parameter_override_keys):
        default_stack_name = self.stack_name or "sam-app"
        default_region = self.region or "us-east-1"
        default_capabilities = ("CAPABILITY_IAM", )
        input_capabilities = None

        click.echo(
            self.color.yellow(
                "\n\tSetting default arguments for 'sam deploy'\n\t========================================="
            ))

        stack_name = prompt(f"\t{self.start_bold}Stack Name{self.end_bold}",
                            default=default_stack_name,
                            type=click.STRING)
        region = prompt(f"\t{self.start_bold}AWS Region{self.end_bold}",
                        default=default_region,
                        type=click.STRING)
        input_parameter_overrides = self.prompt_parameters(
            parameter_override_keys, self.start_bold, self.end_bold)

        click.secho(
            "\t#Shows you resources changes to be deployed and require a 'Y' to initiate deploy"
        )
        confirm_changeset = confirm(
            f"\t{self.start_bold}Confirm changes before deploy{self.end_bold}",
            default=self.confirm_changeset)
        click.secho(
            "\t#SAM needs permission to be able to create roles to connect to the resources in your template"
        )
        capabilities_confirm = confirm(
            f"\t{self.start_bold}Allow SAM CLI IAM role creation{self.end_bold}",
            default=True)

        if not capabilities_confirm:
            input_capabilities = prompt(
                f"\t{self.start_bold}Capabilities{self.end_bold}",
                default=list(default_capabilities),
                type=FuncParamType(func=_space_separated_list_func_type),
            )

        self.prompt_authorization(input_parameter_overrides)

        save_to_config = confirm(
            f"\t{self.start_bold}Save arguments to samconfig.toml{self.end_bold}",
            default=True)

        s3_bucket = manage_stack(profile=self.profile, region=region)
        click.echo(f"\n\t\tManaged S3 bucket: {s3_bucket}")
        click.echo(
            "\t\tA different default S3 bucket can be set in samconfig.toml")

        self.guided_stack_name = stack_name
        self.guided_s3_bucket = s3_bucket
        self.guided_s3_prefix = stack_name
        self.guided_region = region
        self.guided_profile = self.profile
        self._capabilities = input_capabilities if input_capabilities else default_capabilities
        self._parameter_overrides = input_parameter_overrides if input_parameter_overrides else self.parameter_overrides
        self.save_to_config = save_to_config
        self.confirm_changeset = confirm_changeset
Beispiel #3
0
 def test_manage_stack_happy_case(self, manage_cfn_stack_mock):
     expected_bucket_name = "BucketName"
     manage_cfn_stack_mock.return_value = [{
         "OutputKey":
         "SourceBucket",
         "OutputValue":
         expected_bucket_name
     }]
     actual_bucket_name = manage_stack("testProfile", "fakeRegion")
     self.assertEqual(actual_bucket_name, expected_bucket_name)
Beispiel #4
0
def guided_deploy(
    stack_name, s3_bucket, region, profile, confirm_changeset, parameter_override_keys, parameter_overrides
):
    default_stack_name = stack_name or "sam-app"
    default_region = region or "us-east-1"
    default_capabilities = ("CAPABILITY_IAM",)
    input_capabilities = None

    color = Colored()
    start_bold = "\033[1m"
    end_bold = "\033[0m"

    click.echo(
        color.yellow("\n\tSetting default arguments for 'sam deploy'\n\t=========================================")
    )

    stack_name = click.prompt(f"\t{start_bold}Stack Name{end_bold}", default=default_stack_name, type=click.STRING)
    s3_prefix = stack_name
    region = click.prompt(f"\t{start_bold}AWS Region{end_bold}", default=default_region, type=click.STRING)
    input_parameter_overrides = prompt_parameters(parameter_override_keys, start_bold, end_bold)

    click.secho("\t#Shows you resources changes to be deployed and require a 'Y' to initiate deploy")
    confirm_changeset = click.confirm(
        f"\t{start_bold}Confirm changes before deploy{end_bold}", default=confirm_changeset
    )
    click.secho("\t#SAM needs permission to be able to create roles to connect to the resources in your template")
    capabilities_confirm = click.confirm(f"\t{start_bold}Allow SAM CLI IAM role creation{end_bold}", default=True)

    if not capabilities_confirm:
        input_capabilities = click.prompt(
            f"\t{start_bold}Capabilities{end_bold}",
            default=default_capabilities[0],
            type=FuncParamType(func=_space_separated_list_func_type),
        )

    save_to_config = click.confirm(f"\t{start_bold}Save arguments to samconfig.toml{end_bold}", default=True)

    s3_bucket = manage_stack(profile=profile, region=region)
    click.echo(f"\n\t\tManaged S3 bucket: {s3_bucket}")
    click.echo("\t\tA different default S3 bucket can be set in samconfig.toml")

    return (
        stack_name,
        s3_bucket,
        s3_prefix,
        region,
        profile,
        confirm_changeset,
        input_capabilities if input_capabilities else default_capabilities,
        input_parameter_overrides if input_parameter_overrides else parameter_overrides,
        save_to_config,
    )
Beispiel #5
0
def do_cli(
    template_file,
    s3_bucket,
    image_repository,
    image_repositories,
    s3_prefix,
    kms_key_id,
    output_template_file,
    use_json,
    force_upload,
    no_progressbar,
    metadata,
    signing_profiles,
    region,
    profile,
    resolve_s3,
):
    """
    Implementation of the ``cli`` method
    """

    from samcli.commands.package.package_context import PackageContext

    if resolve_s3:
        s3_bucket = manage_stack(profile=profile, region=region)
        click.echo(f"\n\t\tManaged S3 bucket: {s3_bucket}")
        click.echo(
            "\t\tA different default S3 bucket can be set in samconfig.toml")
        click.echo("\t\tOr by specifying --s3-bucket explicitly.")

    with PackageContext(
            template_file=template_file,
            s3_bucket=s3_bucket,
            image_repository=image_repository,
            image_repositories=image_repositories,
            s3_prefix=s3_prefix,
            kms_key_id=kms_key_id,
            output_template_file=output_template_file,
            use_json=use_json,
            force_upload=force_upload,
            no_progressbar=no_progressbar,
            metadata=metadata,
            region=region,
            profile=profile,
            signing_profiles=signing_profiles,
    ) as package_context:
        package_context.run()
Beispiel #6
0
def do_cli(
    template_file,
    s3_bucket,
    s3_prefix,
    kms_key_id,
    output_template_file,
    use_json,
    force_upload,
    no_progressbar,
    metadata,
    signing_profiles,
    region,
    profile,
    resolve_s3,
):
    from samcli.commands.package.package_context import PackageContext
    from samcli.commands.package.exceptions import PackageResolveS3AndS3SetError, PackageResolveS3AndS3NotSetError

    if resolve_s3 and bool(s3_bucket):
        raise PackageResolveS3AndS3SetError()

    if not resolve_s3 and not bool(s3_bucket):
        raise PackageResolveS3AndS3NotSetError()

    if resolve_s3:
        s3_bucket = manage_stack(profile=profile, region=region)
        click.echo(f"\n\t\tManaged S3 bucket: {s3_bucket}")
        click.echo(
            "\t\tA different default S3 bucket can be set in samconfig.toml")
        click.echo("\t\tOr by specifying --s3-bucket explicitly.")

    with PackageContext(
            template_file=template_file,
            s3_bucket=s3_bucket,
            s3_prefix=s3_prefix,
            kms_key_id=kms_key_id,
            output_template_file=output_template_file,
            use_json=use_json,
            force_upload=force_upload,
            no_progressbar=no_progressbar,
            metadata=metadata,
            region=region,
            profile=profile,
            signing_profiles=signing_profiles,
    ) as package_context:
        package_context.run()
    def guided_prompts(self, parameter_override_keys):
        default_stack_name = self.stack_name or "sam-app"
        default_region = self.region or get_session().get_config_variable(
            "region") or "us-east-1"
        default_capabilities = self.capabilities[0] or ("CAPABILITY_IAM", )
        default_config_env = self.config_env or DEFAULT_ENV
        default_config_file = self.config_file or DEFAULT_CONFIG_FILE_NAME
        input_capabilities = None
        config_env = None
        config_file = None

        click.echo(
            self.color.yellow(
                "\n\tSetting default arguments for 'sam deploy'\n\t========================================="
            ))

        stack_name = prompt(f"\t{self.start_bold}Stack Name{self.end_bold}",
                            default=default_stack_name,
                            type=click.STRING)
        region = prompt(f"\t{self.start_bold}AWS Region{self.end_bold}",
                        default=default_region,
                        type=click.STRING)
        input_parameter_overrides = self.prompt_parameters(
            parameter_override_keys, self.parameter_overrides_from_cmdline,
            self.start_bold, self.end_bold)
        stacks = SamLocalStackProvider.get_stacks(
            self.template_file,
            parameter_overrides=sanitize_parameter_overrides(
                input_parameter_overrides))
        image_repositories = self.prompt_image_repository(stacks)

        click.secho(
            "\t#Shows you resources changes to be deployed and require a 'Y' to initiate deploy"
        )
        confirm_changeset = confirm(
            f"\t{self.start_bold}Confirm changes before deploy{self.end_bold}",
            default=self.confirm_changeset)
        click.secho(
            "\t#SAM needs permission to be able to create roles to connect to the resources in your template"
        )
        capabilities_confirm = confirm(
            f"\t{self.start_bold}Allow SAM CLI IAM role creation{self.end_bold}",
            default=True)

        if not capabilities_confirm:
            input_capabilities = prompt(
                f"\t{self.start_bold}Capabilities{self.end_bold}",
                default=list(default_capabilities),
                type=FuncParamType(func=_space_separated_list_func_type),
            )

        self.prompt_authorization(stacks)
        self.prompt_code_signing_settings(stacks)

        save_to_config = confirm(
            f"\t{self.start_bold}Save arguments to configuration file{self.end_bold}",
            default=True)
        if save_to_config:
            config_file = prompt(
                f"\t{self.start_bold}SAM configuration file{self.end_bold}",
                default=default_config_file,
                type=click.STRING,
            )
            config_env = prompt(
                f"\t{self.start_bold}SAM configuration environment{self.end_bold}",
                default=default_config_env,
                type=click.STRING,
            )

        s3_bucket = manage_stack(profile=self.profile, region=region)
        click.echo(f"\n\t\tManaged S3 bucket: {s3_bucket}")
        click.echo(
            "\t\tA different default S3 bucket can be set in samconfig.toml")

        self.guided_stack_name = stack_name
        self.guided_s3_bucket = s3_bucket
        self.guided_image_repositories = image_repositories
        self.guided_s3_prefix = stack_name
        self.guided_region = region
        self.guided_profile = self.profile
        self._capabilities = input_capabilities if input_capabilities else default_capabilities
        self._parameter_overrides = (input_parameter_overrides
                                     if input_parameter_overrides else
                                     self.parameter_overrides_from_cmdline)
        self.save_to_config = save_to_config
        self.config_env = config_env if config_env else default_config_env
        self.config_file = config_file if config_file else default_config_file
        self.confirm_changeset = confirm_changeset
Beispiel #8
0
def do_cli(
    template_file,
    stack_name,
    s3_bucket,
    force_upload,
    no_progressbar,
    s3_prefix,
    kms_key_id,
    parameter_overrides,
    capabilities,
    no_execute_changeset,
    role_arn,
    notification_arns,
    fail_on_empty_changeset,
    use_json,
    tags,
    metadata,
    guided,
    confirm_changeset,
    region,
    profile,
    signing_profiles,
    resolve_s3,
    config_file,
    config_env,
):
    from samcli.commands.package.package_context import PackageContext
    from samcli.commands.deploy.deploy_context import DeployContext
    from samcli.commands.deploy.guided_context import GuidedContext
    from samcli.commands.deploy.exceptions import DeployResolveS3AndS3SetError

    if guided:
        # Allow for a guided deploy to prompt and save those details.
        guided_context = GuidedContext(
            template_file=template_file,
            stack_name=stack_name,
            s3_bucket=s3_bucket,
            s3_prefix=s3_prefix,
            region=region,
            profile=profile,
            confirm_changeset=confirm_changeset,
            capabilities=capabilities,
            signing_profiles=signing_profiles,
            parameter_overrides=parameter_overrides,
            config_section=CONFIG_SECTION,
            config_env=config_env,
            config_file=config_file,
        )
        guided_context.run()
    elif resolve_s3 and bool(s3_bucket):
        raise DeployResolveS3AndS3SetError()
    elif resolve_s3:
        s3_bucket = manage_stack(profile=profile, region=region)
        click.echo(f"\n\t\tManaged S3 bucket: {s3_bucket}")
        click.echo(
            "\t\tA different default S3 bucket can be set in samconfig.toml")
        click.echo("\t\tOr by specifying --s3-bucket explicitly.")

    with osutils.tempfile_platform_independent() as output_template_file:

        with PackageContext(
                template_file=template_file,
                s3_bucket=guided_context.guided_s3_bucket
                if guided else s3_bucket,
                s3_prefix=guided_context.guided_s3_prefix
                if guided else s3_prefix,
                output_template_file=output_template_file.name,
                kms_key_id=kms_key_id,
                use_json=use_json,
                force_upload=force_upload,
                no_progressbar=no_progressbar,
                metadata=metadata,
                on_deploy=True,
                region=guided_context.guided_region if guided else region,
                profile=profile,
                signing_profiles=guided_context.signing_profiles
                if guided else signing_profiles,
        ) as package_context:
            package_context.run()

        with DeployContext(
                template_file=output_template_file.name,
                stack_name=guided_context.guided_stack_name
                if guided else stack_name,
                s3_bucket=guided_context.guided_s3_bucket
                if guided else s3_bucket,
                force_upload=force_upload,
                no_progressbar=no_progressbar,
                s3_prefix=guided_context.guided_s3_prefix
                if guided else s3_prefix,
                kms_key_id=kms_key_id,
                parameter_overrides=sanitize_parameter_overrides(
                    guided_context.guided_parameter_overrides)
                if guided else parameter_overrides,
                capabilities=guided_context.guided_capabilities
                if guided else capabilities,
                no_execute_changeset=no_execute_changeset,
                role_arn=role_arn,
                notification_arns=notification_arns,
                fail_on_empty_changeset=fail_on_empty_changeset,
                tags=tags,
                region=guided_context.guided_region if guided else region,
                profile=profile,
                confirm_changeset=guided_context.confirm_changeset
                if guided else confirm_changeset,
                signing_profiles=guided_context.signing_profiles
                if guided else signing_profiles,
        ) as deploy_context:
            deploy_context.run()
Beispiel #9
0
def do_cli(region, profile):
    bucket_name = bootstrap.manage_stack(profile=profile, region=region)
    click.echo("Source Bucket: " + bucket_name)
from samcli.lib.bootstrap.bootstrap import manage_stack
import sys

bucket_name = manage_stack(sys.argv[1], sys.argv[2])

print(bucket_name)
Beispiel #11
0
 def test_client_missing_region(self, boto_mock):
     boto_mock.side_effect = NoRegionError()
     with self.assertRaises(RegionError):
         manage_stack("testprofile", "fake-region")
Beispiel #12
0
 def test_client_missing_credentials(self, boto_mock):
     boto_mock.side_effect = NoCredentialsError()
     with self.assertRaises(CredentialsError):
         manage_stack("testprofile", "fake-region")
 def test_client_missing_region(self, boto_mock):
     session_mock = Mock()
     session_mock.client.side_effect = NoRegionError()
     boto_mock.return_value = session_mock
     with self.assertRaises(RegionError):
         manage_stack("testprofile", "fake-region")
Beispiel #14
0
def setup_deployment_bucket(sam_config, deployment_target) -> str:
    region = get_sam_param(sam_config, 'default', 'region')
    # Gets AWS profile from ambient configuration.
    s3_bucket = bootstrap.manage_stack(profile=None, region=region)
    return s3_bucket