stack_master 1.5.0 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -0
- data/lib/stack_master/commands/terminal_helper.rb +14 -1
- data/lib/stack_master/parameter_resolvers/secret.rb +7 -2
- data/lib/stack_master/version.rb +1 -1
- metadata +21 -216
- data/.gitignore +0 -18
- data/.rspec +0 -2
- data/.travis.yml +0 -12
- data/CODE_OF_CONDUCT.md +0 -73
- data/Gemfile +0 -4
- data/LICENSE.txt +0 -22
- data/Rakefile +0 -27
- data/apply_demo.gif +0 -0
- data/example/simple/Gemfile +0 -3
- data/example/simple/parameters/myapp_vpc.yml +0 -1
- data/example/simple/parameters/myapp_web.yml +0 -2
- data/example/simple/stack_master.yml +0 -13
- data/example/simple/templates/myapp_vpc.rb +0 -39
- data/example/simple/templates/myapp_web.rb +0 -16
- data/features/apply.feature +0 -392
- data/features/apply_with_compile_time_parameters.feature +0 -93
- data/features/apply_with_env_parameters.feature +0 -49
- data/features/apply_with_parameter_store_parameters.feature +0 -47
- data/features/apply_with_s3.feature +0 -106
- data/features/delete.feature +0 -29
- data/features/diff.feature +0 -179
- data/features/events.feature +0 -33
- data/features/init.feature +0 -6
- data/features/outputs.feature +0 -45
- data/features/region_aliases.feature +0 -62
- data/features/resources.feature +0 -42
- data/features/stack_defaults.feature +0 -82
- data/features/status.feature +0 -118
- data/features/step_definitions/parameter_store_steps.rb +0 -14
- data/features/step_definitions/stack_steps.rb +0 -71
- data/features/support/env.rb +0 -16
- data/features/validate.feature +0 -46
- data/logo.png +0 -0
- data/script/buildkite/bundle.sh +0 -5
- data/script/buildkite/clean.sh +0 -3
- data/script/buildkite_rspec.sh +0 -27
- data/spec/fixtures/parameters/myapp_vpc.yml +0 -1
- data/spec/fixtures/parameters/myapp_vpc_with_secrets.yml +0 -3
- data/spec/fixtures/sparkle_pack_integration/my_sparkle_pack/lib/my_sparkle_pack.rb +0 -1
- data/spec/fixtures/sparkle_pack_integration/my_sparkle_pack/lib/sparkleformation/dynamics/my_dynamic.rb +0 -5
- data/spec/fixtures/sparkle_pack_integration/templates/dynamics/local_dynamic.rb +0 -5
- data/spec/fixtures/sparkle_pack_integration/templates/template_with_dynamic.rb +0 -3
- data/spec/fixtures/sparkle_pack_integration/templates/template_with_dynamic_from_pack.rb +0 -3
- data/spec/fixtures/stack_master.yml +0 -49
- data/spec/fixtures/templates/json/valid_myapp_vpc.json +0 -53
- data/spec/fixtures/templates/myapp_vpc.json +0 -1
- data/spec/fixtures/templates/rb/cfndsl/sample.json +0 -28
- data/spec/fixtures/templates/rb/cfndsl/sample.rb +0 -16
- data/spec/fixtures/templates/yml/valid_myapp_vpc.yml +0 -35
- data/spec/fixtures/test/.gitkeep +0 -0
- data/spec/spec_helper.rb +0 -102
- data/spec/stack_master/aws_driver/s3_spec.rb +0 -130
- data/spec/stack_master/change_set_spec.rb +0 -70
- data/spec/stack_master/command_spec.rb +0 -66
- data/spec/stack_master/commands/apply_spec.rb +0 -259
- data/spec/stack_master/commands/delete_spec.rb +0 -40
- data/spec/stack_master/commands/init_spec.rb +0 -17
- data/spec/stack_master/commands/status_spec.rb +0 -44
- data/spec/stack_master/commands/validate_spec.rb +0 -27
- data/spec/stack_master/config_spec.rb +0 -153
- data/spec/stack_master/paged_response_accumulator_spec.rb +0 -39
- data/spec/stack_master/parameter_loader_spec.rb +0 -110
- data/spec/stack_master/parameter_resolver_spec.rb +0 -148
- data/spec/stack_master/parameter_resolvers/ami_finder_spec.rb +0 -68
- data/spec/stack_master/parameter_resolvers/env_spec.rb +0 -35
- data/spec/stack_master/parameter_resolvers/latest_ami_by_tags_spec.rb +0 -33
- data/spec/stack_master/parameter_resolvers/latest_ami_spec.rb +0 -46
- data/spec/stack_master/parameter_resolvers/parameter_store_spec.rb +0 -50
- data/spec/stack_master/parameter_resolvers/secret_spec.rb +0 -66
- data/spec/stack_master/parameter_resolvers/security_group_spec.rb +0 -19
- data/spec/stack_master/parameter_resolvers/security_groups_spec.rb +0 -32
- data/spec/stack_master/parameter_resolvers/sns_topic_name_spec.rb +0 -43
- data/spec/stack_master/parameter_resolvers/stack_output_spec.rb +0 -127
- data/spec/stack_master/prompter_spec.rb +0 -23
- data/spec/stack_master/resolver_array_spec.rb +0 -42
- data/spec/stack_master/security_group_finder_spec.rb +0 -49
- data/spec/stack_master/sns_topic_finder_spec.rb +0 -25
- data/spec/stack_master/sparkle_formation/compile_time/allowed_pattern_validator_spec.rb +0 -47
- data/spec/stack_master/sparkle_formation/compile_time/allowed_values_validator_spec.rb +0 -47
- data/spec/stack_master/sparkle_formation/compile_time/definitions_validator_spec.rb +0 -36
- data/spec/stack_master/sparkle_formation/compile_time/empty_validator_spec.rb +0 -47
- data/spec/stack_master/sparkle_formation/compile_time/max_length_validator_spec.rb +0 -37
- data/spec/stack_master/sparkle_formation/compile_time/max_size_validator_spec.rb +0 -27
- data/spec/stack_master/sparkle_formation/compile_time/min_length_validator_spec.rb +0 -36
- data/spec/stack_master/sparkle_formation/compile_time/min_size_validator_spec.rb +0 -28
- data/spec/stack_master/sparkle_formation/compile_time/number_validator_spec.rb +0 -41
- data/spec/stack_master/sparkle_formation/compile_time/parameters_validator_spec.rb +0 -65
- data/spec/stack_master/sparkle_formation/compile_time/state_builder_spec.rb +0 -28
- data/spec/stack_master/sparkle_formation/compile_time/string_validator_spec.rb +0 -35
- data/spec/stack_master/sparkle_formation/compile_time/value_build_spec.rb +0 -52
- data/spec/stack_master/sparkle_formation/compile_time/value_validator_factory_spec.rb +0 -40
- data/spec/stack_master/sparkle_formation/template_file_spec.rb +0 -147
- data/spec/stack_master/stack_definition_spec.rb +0 -70
- data/spec/stack_master/stack_differ_spec.rb +0 -46
- data/spec/stack_master/stack_events/fetcher_spec.rb +0 -40
- data/spec/stack_master/stack_events/presenter_spec.rb +0 -18
- data/spec/stack_master/stack_events/streamer_spec.rb +0 -47
- data/spec/stack_master/stack_spec.rb +0 -184
- data/spec/stack_master/template_compiler_spec.rb +0 -39
- data/spec/stack_master/template_compilers/cfndsl_spec.rb +0 -22
- data/spec/stack_master/template_compilers/json_spec.rb +0 -32
- data/spec/stack_master/template_compilers/sparkle_formation_spec.rb +0 -116
- data/spec/stack_master/template_compilers/yaml_spec.rb +0 -20
- data/spec/stack_master/template_utils_spec.rb +0 -21
- data/spec/stack_master/test_driver/cloud_formation_spec.rb +0 -64
- data/spec/stack_master/test_driver/s3_spec.rb +0 -17
- data/spec/stack_master/utils_spec.rb +0 -30
- data/spec/stack_master/validator_spec.rb +0 -56
- data/spec/stack_master_spec.rb +0 -81
- data/spec/support/gemfiles/Gemfile.activesupport-4.0.0 +0 -5
- data/spec/support/validator_spec.rb +0 -23
- data/stack_master.gemspec +0 -46
- data/stacktemplates/parameter_region.yml +0 -3
- data/stacktemplates/parameter_stack_name.yml +0 -3
- data/stacktemplates/stack.json.erb +0 -20
- data/stacktemplates/stack_master.yml.erb +0 -6
data/features/events.feature
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
Feature: Events command
|
2
|
-
|
3
|
-
Background:
|
4
|
-
Given a file named "stack_master.yml" with:
|
5
|
-
"""
|
6
|
-
stacks:
|
7
|
-
us_east_1:
|
8
|
-
myapp_vpc:
|
9
|
-
template: myapp_vpc.rb
|
10
|
-
"""
|
11
|
-
And a directory named "templates"
|
12
|
-
And a file named "templates/myapp_vpc.rb" with:
|
13
|
-
"""
|
14
|
-
SparkleFormation.new(:myapp_vpc) do
|
15
|
-
description "Test template"
|
16
|
-
set!('AWSTemplateFormatVersion', '2010-09-09')
|
17
|
-
|
18
|
-
resources.vpc do
|
19
|
-
type 'AWS::EC2::VPC'
|
20
|
-
properties do
|
21
|
-
cidr_block '10.200.0.0/16'
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
"""
|
26
|
-
|
27
|
-
Scenario: View events
|
28
|
-
Given I stub the following stack events:
|
29
|
-
| stack_id | event_id | stack_name | logical_resource_id | resource_status | resource_type | timestamp |
|
30
|
-
| 1 | 1 | myapp-vpc | TestSg | CREATE_COMPLETE | AWS::EC2::SecurityGroup | 2020-10-29 00:00:00 |
|
31
|
-
| 1 | 1 | myapp-vpc | myapp-vpc | CREATE_COMPLETE | AWS::CloudFormation::Stack | 2020-10-29 00:00:00 |
|
32
|
-
When I run `stack_master events us-east-1 myapp-vpc --trace`
|
33
|
-
And the output should match /2020-10-29 00:00:00 (\+|\-)[0-9]{4} myapp-vpc AWS::CloudFormation::Stack CREATE_COMPLETE/
|
data/features/init.feature
DELETED
data/features/outputs.feature
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
Feature: Outputs command
|
2
|
-
|
3
|
-
Background:
|
4
|
-
Given a file named "stack_master.yml" with:
|
5
|
-
"""
|
6
|
-
stacks:
|
7
|
-
us_east_1:
|
8
|
-
myapp_vpc:
|
9
|
-
template: myapp_vpc.rb
|
10
|
-
"""
|
11
|
-
And a directory named "templates"
|
12
|
-
And a file named "templates/myapp_vpc.rb" with:
|
13
|
-
"""
|
14
|
-
SparkleFormation.new(:myapp_vpc) do
|
15
|
-
description "Test template"
|
16
|
-
set!('AWSTemplateFormatVersion', '2010-09-09')
|
17
|
-
resources.vpc do
|
18
|
-
type 'AWS::EC2::VPC'
|
19
|
-
properties do
|
20
|
-
cidr_block '10.200.0.0/16'
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
"""
|
25
|
-
|
26
|
-
Scenario: Output stack resources
|
27
|
-
Given I stub the following stacks:
|
28
|
-
| stack_id | stack_name | parameters | region | outputs |
|
29
|
-
| 1 | myapp-vpc | KeyName=my-key | us-east-1 | VpcId=vpc-123456 |
|
30
|
-
And I stub a template for the stack "myapp-vpc":
|
31
|
-
"""
|
32
|
-
{
|
33
|
-
}
|
34
|
-
"""
|
35
|
-
When I run `stack_master outputs us-east-1 myapp-vpc --trace`
|
36
|
-
And the output should contain all of these lines:
|
37
|
-
| VpcId |
|
38
|
-
| vpc-123456 |
|
39
|
-
|
40
|
-
Scenario: Fails when the stack doesn't exist
|
41
|
-
When I run `stack_master outputs us-east-1 myapp-vpc --trace`
|
42
|
-
And the output should not contain all of these lines:
|
43
|
-
| VpcId |
|
44
|
-
| vpc-123456 |
|
45
|
-
And the output should contain "Stack doesn't exist"
|
@@ -1,62 +0,0 @@
|
|
1
|
-
Feature: Region aliases
|
2
|
-
|
3
|
-
Background:
|
4
|
-
Given a file named "stack_master.yml" with:
|
5
|
-
"""
|
6
|
-
region_aliases:
|
7
|
-
staging: ap-southeast-2
|
8
|
-
production: us_east_1
|
9
|
-
stacks:
|
10
|
-
staging:
|
11
|
-
myapp_vpc:
|
12
|
-
template: myapp_vpc.rb
|
13
|
-
production:
|
14
|
-
myapp_vpc:
|
15
|
-
template: myapp_vpc.rb
|
16
|
-
"""
|
17
|
-
And a directory named "templates"
|
18
|
-
And a directory named "parameters"
|
19
|
-
And a file named "templates/myapp_vpc.rb" with:
|
20
|
-
"""
|
21
|
-
SparkleFormation.new(:myapp_vpc) do
|
22
|
-
description "Test template"
|
23
|
-
set!('AWSTemplateFormatVersion', '2010-09-09')
|
24
|
-
|
25
|
-
parameters.key_name do
|
26
|
-
description 'Key name'
|
27
|
-
type 'String'
|
28
|
-
end
|
29
|
-
|
30
|
-
resources.vpc do
|
31
|
-
type 'AWS::EC2::VPC'
|
32
|
-
properties do
|
33
|
-
cidr_block '10.200.0.0/16'
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
outputs do
|
38
|
-
vpc_id do
|
39
|
-
description 'A VPC ID'
|
40
|
-
value ref!(:vpc)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
"""
|
45
|
-
And a file named "parameters/myapp_vpc.yml" with:
|
46
|
-
"""
|
47
|
-
key_name: my-key
|
48
|
-
"""
|
49
|
-
And I stub the following stack events:
|
50
|
-
| stack_id | event_id | stack_name | logical_resource_id | resource_status | resource_type | timestamp |
|
51
|
-
| 1 | 1 | myapp-vpc | TestSg | CREATE_COMPLETE | AWS::EC2::SecurityGroup | 2020-10-29 00:00:00 |
|
52
|
-
| 1 | 1 | myapp-vpc | myapp-vpc | CREATE_COMPLETE | AWS::CloudFormation::Stack | 2020-10-29 00:00:00 |
|
53
|
-
|
54
|
-
Scenario: Create a stack using region aliases
|
55
|
-
When I run `stack_master apply staging myapp-vpc --trace`
|
56
|
-
And the output should contain all of these lines:
|
57
|
-
| Stack diff: |
|
58
|
-
| + "Vpc": { |
|
59
|
-
| Parameters diff: |
|
60
|
-
| KeyName: my-key |
|
61
|
-
And the output should match /2020-10-29 00:00:00 (\+|\-)[0-9]{4} myapp-vpc AWS::CloudFormation::Stack CREATE_COMPLETE/
|
62
|
-
Then the exit status should be 0
|
data/features/resources.feature
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
Feature: Resources command
|
2
|
-
|
3
|
-
Background:
|
4
|
-
Given a file named "stack_master.yml" with:
|
5
|
-
"""
|
6
|
-
stacks:
|
7
|
-
us_east_1:
|
8
|
-
myapp_vpc:
|
9
|
-
template: myapp_vpc.rb
|
10
|
-
"""
|
11
|
-
And a directory named "templates"
|
12
|
-
And a file named "templates/myapp_vpc.rb" with:
|
13
|
-
"""
|
14
|
-
SparkleFormation.new(:myapp_vpc) do
|
15
|
-
description "Test template"
|
16
|
-
set!('AWSTemplateFormatVersion', '2010-09-09')
|
17
|
-
resources.vpc do
|
18
|
-
type 'AWS::EC2::VPC'
|
19
|
-
properties do
|
20
|
-
cidr_block '10.200.0.0/16'
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
"""
|
25
|
-
|
26
|
-
Scenario: Show resources
|
27
|
-
Given I stub the following stacks:
|
28
|
-
| stack_id | stack_name | parameters | region |
|
29
|
-
| 1 | myapp-vpc | KeyName=my-key | us-east-1 |
|
30
|
-
And I stub the following stack resources:
|
31
|
-
| stack_name | logical_resource_id | resource_type | timestamp | resource_status |
|
32
|
-
| myapp-vpc | Vpc | AWS::EC2::Vpc | 2015-11-02 06:41:58 | CREATE_COMPLETE |
|
33
|
-
When I run `stack_master resources us-east-1 myapp-vpc --trace`
|
34
|
-
And the output should contain all of these lines:
|
35
|
-
| Vpc |
|
36
|
-
| AWS::EC2::Vpc |
|
37
|
-
| 2015-11-02 06:41:58 |
|
38
|
-
| CREATE_COMPLETE |
|
39
|
-
|
40
|
-
Scenario: Fails when the stack doesn't exist
|
41
|
-
When I run `stack_master resources us-east-1 myapp-vpc --trace`
|
42
|
-
And the output should contain "Stack doesn't exist"
|
@@ -1,82 +0,0 @@
|
|
1
|
-
Feature: Stack defaults
|
2
|
-
|
3
|
-
Background:
|
4
|
-
Given a file named "stack_master.yml" with:
|
5
|
-
"""
|
6
|
-
stack_defaults:
|
7
|
-
tags:
|
8
|
-
application: my-awesome-blog
|
9
|
-
region_defaults:
|
10
|
-
ap_southeast_2:
|
11
|
-
notification_arns:
|
12
|
-
- test_arn_1
|
13
|
-
secret_file: staging.yml.gpg
|
14
|
-
tags:
|
15
|
-
environment: staging
|
16
|
-
stack_policy_file: my_policy.json
|
17
|
-
us_east_1:
|
18
|
-
notification_arns:
|
19
|
-
- test_arn_2
|
20
|
-
secret_file: production.yml.gpg
|
21
|
-
tags:
|
22
|
-
environment: production
|
23
|
-
stacks:
|
24
|
-
ap_southeast_2:
|
25
|
-
myapp_vpc:
|
26
|
-
template: myapp_vpc.rb
|
27
|
-
tags:
|
28
|
-
role: network
|
29
|
-
notification_arns:
|
30
|
-
- test_arn_3
|
31
|
-
us_east_1:
|
32
|
-
myapp_vpc:
|
33
|
-
template: myapp_vpc.rb
|
34
|
-
tags:
|
35
|
-
role: network
|
36
|
-
"""
|
37
|
-
And a directory named "templates"
|
38
|
-
And a directory named "policies"
|
39
|
-
And a file named "templates/myapp_vpc.rb" with:
|
40
|
-
"""
|
41
|
-
SparkleFormation.new(:myapp_vpc) do
|
42
|
-
description "Test template"
|
43
|
-
set!('AWSTemplateFormatVersion', '2010-09-09')
|
44
|
-
|
45
|
-
parameters.key_name do
|
46
|
-
description 'Key name'
|
47
|
-
type 'String'
|
48
|
-
default 'blah'
|
49
|
-
end
|
50
|
-
|
51
|
-
resources.vpc do
|
52
|
-
type 'AWS::EC2::VPC'
|
53
|
-
properties do
|
54
|
-
cidr_block '10.200.0.0/16'
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
outputs do
|
59
|
-
vpc_id do
|
60
|
-
description 'A VPC ID'
|
61
|
-
value ref!(:vpc)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
"""
|
66
|
-
And a file named "policies/my_policy.json" with:
|
67
|
-
"""
|
68
|
-
{my: 'policy'}
|
69
|
-
"""
|
70
|
-
And I stub the following stack events:
|
71
|
-
| stack_id | event_id | stack_name | logical_resource_id | resource_status | resource_type | timestamp |
|
72
|
-
| 1 | 1 | myapp-vpc | TestSg | CREATE_COMPLETE | AWS::EC2::SecurityGroup | 2020-10-29 00:00:00 |
|
73
|
-
| 1 | 1 | myapp-vpc | myapp-vpc | CREATE_COMPLETE | AWS::CloudFormation::Stack | 2020-10-29 00:00:00 |
|
74
|
-
|
75
|
-
Scenario: Create a stack with inherited attributes
|
76
|
-
When I run `stack_master apply ap-southeast-2 myapp-vpc --trace`
|
77
|
-
Then the stack "myapp-vpc" should contain this notification ARN "test_arn_1"
|
78
|
-
Then the stack "myapp-vpc" should contain this notification ARN "test_arn_3"
|
79
|
-
And the stack "myapp-vpc" should have a policy with the following:
|
80
|
-
"""
|
81
|
-
{my: 'policy'}
|
82
|
-
"""
|
data/features/status.feature
DELETED
@@ -1,118 +0,0 @@
|
|
1
|
-
Feature: Status command
|
2
|
-
|
3
|
-
Background:
|
4
|
-
Given a file named "stack_master.yml" with:
|
5
|
-
"""
|
6
|
-
stacks:
|
7
|
-
us_east_1:
|
8
|
-
stack1:
|
9
|
-
template: stack1.json
|
10
|
-
stack2:
|
11
|
-
template: stack2.json
|
12
|
-
stack3:
|
13
|
-
template: stack3.json
|
14
|
-
"""
|
15
|
-
And a directory named "parameters"
|
16
|
-
And a file named "parameters/stack1.yml" with:
|
17
|
-
"""
|
18
|
-
KeyName: my-key
|
19
|
-
"""
|
20
|
-
And a directory named "templates"
|
21
|
-
And a file named "templates/stack1.json" with:
|
22
|
-
"""
|
23
|
-
{
|
24
|
-
"AWSTemplateFormatVersion": "2010-09-09",
|
25
|
-
"Description": "Test template",
|
26
|
-
"Parameters": {
|
27
|
-
"InstanceTypeParameter" : { "Type" : "String" }
|
28
|
-
},
|
29
|
-
"Mappings": {},
|
30
|
-
"Resources": {
|
31
|
-
"MyAwesomeQueue" : {
|
32
|
-
"Type" : "AWS::SQS::Queue",
|
33
|
-
"Properties" : {
|
34
|
-
"VisibilityTimeout" : "1"
|
35
|
-
}
|
36
|
-
}
|
37
|
-
},
|
38
|
-
"Outputs": {}
|
39
|
-
}
|
40
|
-
"""
|
41
|
-
And a file named "templates/stack2.json" with:
|
42
|
-
"""
|
43
|
-
{
|
44
|
-
"AWSTemplateFormatVersion": "2010-09-09",
|
45
|
-
"Description": "Test template",
|
46
|
-
"Parameters": {},
|
47
|
-
"Mappings": {},
|
48
|
-
"Resources": {
|
49
|
-
"MoarQueue" : {
|
50
|
-
"Type" : "AWS::SQS::Queue",
|
51
|
-
"Properties" : {
|
52
|
-
"VisibilityTimeout" : "1"
|
53
|
-
}
|
54
|
-
}
|
55
|
-
},
|
56
|
-
"Outputs": {}
|
57
|
-
}
|
58
|
-
"""
|
59
|
-
And a file named "templates/stack3.json" with:
|
60
|
-
"""
|
61
|
-
{
|
62
|
-
}
|
63
|
-
"""
|
64
|
-
|
65
|
-
Scenario: Run status command and get a list of stack statuii
|
66
|
-
Given I stub the following stacks:
|
67
|
-
| stack_id | stack_name | parameters | region | stack_status |
|
68
|
-
| 1 | stack1 | KeyName=my-key | us-east-1 | CREATE_COMPLETE |
|
69
|
-
| 2 | stack2 | | us-east-1 | UPDATE_COMPLETE |
|
70
|
-
And I stub a template for the stack "stack1":
|
71
|
-
"""
|
72
|
-
{
|
73
|
-
"AWSTemplateFormatVersion": "2010-09-09",
|
74
|
-
"Description": "Test template",
|
75
|
-
"Parameters": {
|
76
|
-
"InstanceTypeParameter" : { "Type" : "String" }
|
77
|
-
},
|
78
|
-
"Mappings": {},
|
79
|
-
"Resources": {
|
80
|
-
"MyAwesomeQueue" : {
|
81
|
-
"Type" : "AWS::SQS::Queue",
|
82
|
-
"Properties" : {
|
83
|
-
"VisibilityTimeout" : "7"
|
84
|
-
}
|
85
|
-
}
|
86
|
-
},
|
87
|
-
"Outputs": {}
|
88
|
-
}
|
89
|
-
"""
|
90
|
-
And I stub a template for the stack "stack2":
|
91
|
-
"""
|
92
|
-
{
|
93
|
-
"AWSTemplateFormatVersion": "2010-09-09",
|
94
|
-
"Description": "Test template",
|
95
|
-
"Parameters": {},
|
96
|
-
"Mappings": {},
|
97
|
-
"Resources": {
|
98
|
-
"MoarQueue" : {
|
99
|
-
"Type" : "AWS::SQS::Queue",
|
100
|
-
"Properties" : {
|
101
|
-
"VisibilityTimeout" : "1"
|
102
|
-
}
|
103
|
-
}
|
104
|
-
},
|
105
|
-
"Outputs": {}
|
106
|
-
}
|
107
|
-
"""
|
108
|
-
|
109
|
-
When I run `stack_master status --trace`
|
110
|
-
And the output should contain all of these lines:
|
111
|
-
| REGION \| STACK_NAME \| STACK_STATUS \| DIFFERENT |
|
112
|
-
| ----------\|------------\|-----------------\|---------- |
|
113
|
-
| us-east-1 \| stack1 \| CREATE_COMPLETE \| Yes |
|
114
|
-
| us-east-1 \| stack2 \| UPDATE_COMPLETE \| No |
|
115
|
-
| us-east-1 \| stack3 \| \| Yes |
|
116
|
-
|
117
|
-
Then the exit status should be 0
|
118
|
-
|
@@ -1,14 +0,0 @@
|
|
1
|
-
Given(/^(?:a|the) SSM parameter(?: named)? "([^"]*)" with value "([^"]*)" in region "([^"]*)"$/) do |parameter_name, parameter_value, parameter_region|
|
2
|
-
Aws.config[:ssm] = {
|
3
|
-
stub_responses: {
|
4
|
-
get_parameter: {
|
5
|
-
parameter: {
|
6
|
-
name: parameter_name,
|
7
|
-
value: parameter_value,
|
8
|
-
type: "SecureString",
|
9
|
-
version: 1
|
10
|
-
}
|
11
|
-
}
|
12
|
-
}
|
13
|
-
}
|
14
|
-
end
|
@@ -1,71 +0,0 @@
|
|
1
|
-
Before do
|
2
|
-
StackMaster.non_interactive_answer = 'y'
|
3
|
-
end
|
4
|
-
|
5
|
-
Given(/^I will answer prompts with "([^"]*)"$/) do |answer|
|
6
|
-
StackMaster.non_interactive_answer = answer
|
7
|
-
end
|
8
|
-
|
9
|
-
Given(/^I stub the following stack events:$/) do |table|
|
10
|
-
table.hashes.each do |row|
|
11
|
-
row.symbolize_keys!
|
12
|
-
StackMaster.cloud_formation_driver.add_stack_event(row)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
Given(/^I stub the following stack resources:$/) do |table|
|
17
|
-
table.hashes.each do |row|
|
18
|
-
row.symbolize_keys!
|
19
|
-
StackMaster.cloud_formation_driver.add_stack_resource(row)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def extract_hash_from_kv_string(string)
|
24
|
-
string.to_s.split(',').inject({}) do |hash, kv|
|
25
|
-
key, value = kv.split('=')
|
26
|
-
hash[key] = value
|
27
|
-
hash
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
|
32
|
-
Given(/^I stub the following stacks:$/) do |table|
|
33
|
-
table.hashes.each do |row|
|
34
|
-
row.symbolize_keys!
|
35
|
-
row[:parameters] = StackMaster::Utils.hash_to_aws_parameters(extract_hash_from_kv_string(row[:parameters]))
|
36
|
-
outputs = extract_hash_from_kv_string(row[:outputs]).inject([]) do |array, (k, v)|
|
37
|
-
array << OpenStruct.new(output_key: k, output_value: v)
|
38
|
-
array
|
39
|
-
end
|
40
|
-
row[:outputs] = outputs
|
41
|
-
StackMaster.cloud_formation_driver.add_stack(row)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
Given(/^I stub a template for the stack "([^"]*)":$/) do |stack_name, template_body|
|
46
|
-
StackMaster.cloud_formation_driver.set_template(stack_name, template_body)
|
47
|
-
end
|
48
|
-
|
49
|
-
Then(/^the stack "([^"]*)" should have a policy with the following:$/) do |stack_name, policy|
|
50
|
-
stack_policy_body = StackMaster.cloud_formation_driver.get_stack_policy(stack_name: stack_name).stack_policy_body
|
51
|
-
expect(stack_policy_body).to eq policy
|
52
|
-
end
|
53
|
-
|
54
|
-
Then(/^the stack "([^"]*)" should contain this notification ARN "([^"]*)"$/) do |stack_name, notification_arn|
|
55
|
-
stack = StackMaster.cloud_formation_driver.describe_stacks(stack_name: stack_name).stacks.first
|
56
|
-
expect(stack).to be
|
57
|
-
expect(stack.notification_arns).to include notification_arn
|
58
|
-
end
|
59
|
-
|
60
|
-
Given(/^I stub CloudFormation validate calls to pass validation$/) do
|
61
|
-
allow(StackMaster.cloud_formation_driver).to receive(:validate_template).and_return(true)
|
62
|
-
end
|
63
|
-
|
64
|
-
Given(/^I stub CloudFormation validate calls to fail validation with message "([^"]*)"$/) do |message|
|
65
|
-
allow(StackMaster.cloud_formation_driver).to receive(:validate_template).and_raise(Aws::CloudFormation::Errors::ValidationError.new('', message))
|
66
|
-
end
|
67
|
-
|
68
|
-
When(/^an S3 file in bucket "([^"]*)" with key "([^"]*)" exists with content:$/) do |bucket, key, body|
|
69
|
-
file = StackMaster.s3_driver.find_file(bucket: bucket, object_key: key)
|
70
|
-
expect(file).to eq body
|
71
|
-
end
|