Skip to content

Commit

Permalink
fix: interactive deploy specifies parameter defaults
Browse files Browse the repository at this point in the history
  • Loading branch information
sriram-mv committed Nov 20, 2019
1 parent 93d5568 commit aefe2a6
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 19 deletions.
17 changes: 9 additions & 8 deletions samcli/commands/deploy/command.py
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,7 @@ def do_cli(
s3_bucket=s3_bucket,
region=region,
profile=profile,
confirm_changeset=confirm_changeset,
confirm_changeset=changeset_decision,
capabilities=_capabilities,
parameter_overrides=_parameter_overrides,
)
Expand All @@ -238,7 +238,6 @@ def do_cli(
stack_name=stack_name,
s3_bucket=s3_bucket,
region=region,
profile=profile,
capabilities=_capabilities,
parameter_overrides=_parameter_overrides,
confirm_changeset=changeset_decision,
Expand Down Expand Up @@ -300,10 +299,12 @@ def guided_deploy(
stack_name = click.prompt(f"\t{tick} Stack Name", default=stack_name, type=click.STRING)
region = click.prompt(f"\t{tick} AWS Region", default=default_region, type=click.STRING)
if parameter_override_keys:
for parameter_key in parameter_override_keys.keys():
for parameter_key, parameter_properties in parameter_override_keys.items():
input_parameter_overrides[parameter_key] = click.prompt(
f"\t\tParameter {parameter_key}",
default=parameter_overrides.get(parameter_key, "default"),
f"\t{tick} Parameter {parameter_key}",
default=parameter_overrides.get(
parameter_key, parameter_properties.get("Default", "No default specified")
),
type=click.STRING,
)

Expand Down Expand Up @@ -339,15 +340,14 @@ def guided_deploy(
)


def print_deploy_args(stack_name, s3_bucket, region, profile, capabilities, parameter_overrides, confirm_changeset):
def print_deploy_args(stack_name, s3_bucket, region, capabilities, parameter_overrides, confirm_changeset):

param_overrides_string = parameter_overrides
capabilities_string = json.dumps(capabilities)

click.secho("\n\tDeploying with following values\n\t===============================", fg="yellow")
click.echo(f"\tStack Name : {stack_name}")
click.echo(f"\tRegion : {region}")
click.echo(f"\tProfile : {profile}")
click.echo(f"\tDeployment S3 Bucket : {s3_bucket}")
click.echo(f"\tParameter Overrides : {param_overrides_string}")
click.echo(f"\tCapabilities : {capabilities_string}")
Expand All @@ -373,7 +373,8 @@ def save_config(template_file, parameter_overrides, **kwargs):
for key, value in kwargs.items():
if isinstance(value, (list, tuple)):
value = " ".join(val for val in value)
samconfig.put(cmd_names, section, key, value)
if value:
samconfig.put(cmd_names, section, key, value)

if parameter_overrides:
parameter_overrides_value = " ".join([f"{key}={value}" for key, value in parameter_overrides.items()])
Expand Down
87 changes: 76 additions & 11 deletions tests/unit/commands/deploy/test_command.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from unittest.mock import patch, Mock, ANY, MagicMock

from samcli.commands.deploy.command import do_cli
from samcli.lib.config.samconfig import SamConfig


class TestDeployliCommand(TestCase):
Expand Down Expand Up @@ -169,28 +170,30 @@ def test_all_args_interactive(
@patch("samcli.commands.package.package_context.PackageContext")
@patch("samcli.commands.deploy.command.click")
@patch("samcli.commands.deploy.deploy_context.DeployContext")
@patch("samcli.commands.deploy.command.save_config")
@patch("samcli.commands.deploy.command.manage_stack")
@patch("samcli.commands.deploy.command.get_template_parameters")
def test_all_args_interactive_no_params(
@patch("samcli.commands.deploy.command.SamConfig")
@patch("samcli.commands.deploy.command.get_cmd_names")
def test_all_args_interactive_no_params_save_config(
self,
mock_get_cmd_names,
mock_sam_config,
mock_get_template_parameters,
mock_managed_stack,
mock_save_config,
mock_deploy_context,
mock_deploy_click,
mock_package_context,
mock_package_click,
):

context_mock = Mock()

mock_get_template_parameters.return_value = {}
mock_deploy_context.return_value.__enter__.return_value = context_mock
mock_deploy_click.prompt = MagicMock(side_effect=["sam-app", "us-east-1", ("CAPABILITY_IAM",)])
mock_deploy_click.confirm = MagicMock(side_effect=[True, False, True])

mock_get_cmd_names.return_value = ["deploy"]
mock_managed_stack.return_value = "managed-s3-bucket"
mock_save_config.return_value = True

do_cli(
template_file=self.template_file,
Expand Down Expand Up @@ -234,15 +237,77 @@ def test_all_args_interactive_no_params(
)

context_mock.run.assert_called_with()
mock_save_config.assert_called_with(
"input-template-file",
capabilities=("CAPABILITY_IAM",),
confirm_changeset=True,
mock_managed_stack.assert_called_with(profile=self.profile, region="us-east-1")
self.assertEqual(context_mock.run.call_count, 1)

@patch("samcli.commands.package.command.click")
@patch("samcli.commands.package.package_context.PackageContext")
@patch("samcli.commands.deploy.command.click")
@patch("samcli.commands.deploy.deploy_context.DeployContext")
@patch("samcli.commands.deploy.command.save_config")
@patch("samcli.commands.deploy.command.manage_stack")
@patch("samcli.commands.deploy.command.get_template_parameters")
def test_all_args_interactive_no_params_no_save_config(
self,
mock_get_template_parameters,
mock_managed_stack,
mock_save_config,
mock_deploy_context,
mock_deploy_click,
mock_package_context,
mock_package_click,
):

context_mock = Mock()
mock_get_template_parameters.return_value = {}
mock_deploy_context.return_value.__enter__.return_value = context_mock
mock_deploy_click.prompt = MagicMock(side_effect=["sam-app", "us-east-1", ("CAPABILITY_IAM",)])
mock_deploy_click.confirm = MagicMock(side_effect=[True, False, False])

mock_managed_stack.return_value = "managed-s3-bucket"

do_cli(
template_file=self.template_file,
stack_name=self.stack_name,
s3_bucket=None,
force_upload=self.force_upload,
s3_prefix=self.s3_prefix,
kms_key_id=self.kms_key_id,
parameter_overrides=self.parameter_overrides,
capabilities=self.capabilities,
no_execute_changeset=self.no_execute_changeset,
role_arn=self.role_arn,
notification_arns=self.notification_arns,
fail_on_empty_changeset=self.fail_on_empty_changset,
tags=self.tags,
region=self.region,
profile=self.profile,
region="us-east-1",
s3_bucket="managed-s3-bucket",
use_json=self.use_json,
metadata=self.metadata,
interactive=True,
confirm_changeset=True,
)

mock_deploy_context.assert_called_with(
template_file=ANY,
stack_name="sam-app",
s3_bucket="managed-s3-bucket",
force_upload=self.force_upload,
s3_prefix=self.s3_prefix,
kms_key_id=self.kms_key_id,
parameter_overrides=self.parameter_overrides,
capabilities=self.capabilities,
no_execute_changeset=self.no_execute_changeset,
role_arn=self.role_arn,
notification_arns=self.notification_arns,
fail_on_empty_changeset=self.fail_on_empty_changset,
tags=self.tags,
region="us-east-1",
profile=self.profile,
confirm_changeset=True,
)

context_mock.run.assert_called_with()
self.assertEqual(mock_save_config.call_count, 0)
mock_managed_stack.assert_called_with(profile=self.profile, region="us-east-1")
self.assertEqual(context_mock.run.call_count, 1)

0 comments on commit aefe2a6

Please sign in to comment.