stack_master 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/.rspec +2 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +208 -0
  7. data/Rakefile +11 -0
  8. data/apply_demo.gif +0 -0
  9. data/bin/stack_master +16 -0
  10. data/example/simple/Gemfile +3 -0
  11. data/example/simple/parameters/myapp_vpc.yml +1 -0
  12. data/example/simple/parameters/myapp_web.yml +2 -0
  13. data/example/simple/stack_master.yml +13 -0
  14. data/example/simple/templates/myapp_vpc.rb +39 -0
  15. data/example/simple/templates/myapp_web.rb +16 -0
  16. data/features/apply.feature +241 -0
  17. data/features/delete.feature +43 -0
  18. data/features/diff.feature +191 -0
  19. data/features/events.feature +38 -0
  20. data/features/init.feature +6 -0
  21. data/features/outputs.feature +49 -0
  22. data/features/region_aliases.feature +66 -0
  23. data/features/resources.feature +45 -0
  24. data/features/stack_defaults.feature +88 -0
  25. data/features/status.feature +124 -0
  26. data/features/step_definitions/stack_steps.rb +50 -0
  27. data/features/support/env.rb +14 -0
  28. data/lib/stack_master.rb +81 -0
  29. data/lib/stack_master/aws_driver/cloud_formation.rb +56 -0
  30. data/lib/stack_master/cli.rb +164 -0
  31. data/lib/stack_master/command.rb +13 -0
  32. data/lib/stack_master/commands/apply.rb +104 -0
  33. data/lib/stack_master/commands/delete.rb +53 -0
  34. data/lib/stack_master/commands/diff.rb +31 -0
  35. data/lib/stack_master/commands/events.rb +39 -0
  36. data/lib/stack_master/commands/init.rb +109 -0
  37. data/lib/stack_master/commands/list_stacks.rb +16 -0
  38. data/lib/stack_master/commands/outputs.rb +27 -0
  39. data/lib/stack_master/commands/resources.rb +33 -0
  40. data/lib/stack_master/commands/status.rb +47 -0
  41. data/lib/stack_master/commands/validate.rb +17 -0
  42. data/lib/stack_master/config.rb +86 -0
  43. data/lib/stack_master/ctrl_c.rb +4 -0
  44. data/lib/stack_master/parameter_loader.rb +17 -0
  45. data/lib/stack_master/parameter_resolver.rb +45 -0
  46. data/lib/stack_master/parameter_resolvers/secret.rb +42 -0
  47. data/lib/stack_master/parameter_resolvers/security_group.rb +20 -0
  48. data/lib/stack_master/parameter_resolvers/sns_topic_name.rb +29 -0
  49. data/lib/stack_master/parameter_resolvers/stack_output.rb +53 -0
  50. data/lib/stack_master/prompter.rb +14 -0
  51. data/lib/stack_master/security_group_finder.rb +29 -0
  52. data/lib/stack_master/sns_topic_finder.rb +27 -0
  53. data/lib/stack_master/stack.rb +96 -0
  54. data/lib/stack_master/stack_definition.rb +49 -0
  55. data/lib/stack_master/stack_differ.rb +80 -0
  56. data/lib/stack_master/stack_events/fetcher.rb +45 -0
  57. data/lib/stack_master/stack_events/presenter.rb +27 -0
  58. data/lib/stack_master/stack_events/streamer.rb +55 -0
  59. data/lib/stack_master/stack_states.rb +34 -0
  60. data/lib/stack_master/template_compiler.rb +21 -0
  61. data/lib/stack_master/test_driver/cloud_formation.rb +139 -0
  62. data/lib/stack_master/testing.rb +7 -0
  63. data/lib/stack_master/utils.rb +31 -0
  64. data/lib/stack_master/validator.rb +25 -0
  65. data/lib/stack_master/version.rb +3 -0
  66. data/logo.png +0 -0
  67. data/script/buildkite/bundle.sh +5 -0
  68. data/script/buildkite/clean.sh +3 -0
  69. data/script/buildkite_rspec.sh +27 -0
  70. data/spec/fixtures/parameters/myapp_vpc.yml +1 -0
  71. data/spec/fixtures/stack_master.yml +35 -0
  72. data/spec/fixtures/templates/myapp_vpc.json +1 -0
  73. data/spec/spec_helper.rb +99 -0
  74. data/spec/stack_master/commands/apply_spec.rb +92 -0
  75. data/spec/stack_master/commands/delete_spec.rb +40 -0
  76. data/spec/stack_master/commands/init_spec.rb +17 -0
  77. data/spec/stack_master/commands/status_spec.rb +38 -0
  78. data/spec/stack_master/commands/validate_spec.rb +26 -0
  79. data/spec/stack_master/config_spec.rb +81 -0
  80. data/spec/stack_master/parameter_loader_spec.rb +81 -0
  81. data/spec/stack_master/parameter_resolver_spec.rb +58 -0
  82. data/spec/stack_master/parameter_resolvers/secret_spec.rb +66 -0
  83. data/spec/stack_master/parameter_resolvers/security_group_spec.rb +17 -0
  84. data/spec/stack_master/parameter_resolvers/sns_topic_name_spec.rb +43 -0
  85. data/spec/stack_master/parameter_resolvers/stack_output_spec.rb +77 -0
  86. data/spec/stack_master/security_group_finder_spec.rb +49 -0
  87. data/spec/stack_master/sns_topic_finder_spec.rb +25 -0
  88. data/spec/stack_master/stack_definition_spec.rb +37 -0
  89. data/spec/stack_master/stack_differ_spec.rb +34 -0
  90. data/spec/stack_master/stack_events/fetcher_spec.rb +65 -0
  91. data/spec/stack_master/stack_events/presenter_spec.rb +18 -0
  92. data/spec/stack_master/stack_events/streamer_spec.rb +33 -0
  93. data/spec/stack_master/stack_spec.rb +157 -0
  94. data/spec/stack_master/template_compiler_spec.rb +48 -0
  95. data/spec/stack_master/test_driver/cloud_formation_spec.rb +24 -0
  96. data/spec/stack_master/utils_spec.rb +30 -0
  97. data/spec/stack_master/validator_spec.rb +38 -0
  98. data/stack_master.gemspec +38 -0
  99. data/stacktemplates/parameter_region.yml +3 -0
  100. data/stacktemplates/parameter_stack_name.yml +3 -0
  101. data/stacktemplates/stack.json.erb +20 -0
  102. data/stacktemplates/stack_master.yml.erb +6 -0
  103. metadata +427 -0
@@ -0,0 +1,43 @@
1
+ Feature: Delete command
2
+
3
+ Background:
4
+ Given I set the environment variables to:
5
+ | variable | value |
6
+ | STUB_AWS | true |
7
+
8
+ Scenario: Run a delete command on a stack that exists
9
+ Given I set the environment variables to:
10
+ | variable | value |
11
+ | ANSWER | y |
12
+ And I stub the following stacks:
13
+ | stack_id | stack_name | parameters | region |
14
+ | 1 | myapp-vpc | KeyName=my-key | us-east-1 |
15
+ And I stub the following stack events:
16
+ | stack_id | event_id | stack_name | logical_resource_id | resource_status | resource_type | timestamp |
17
+ | 1 | 1 | myapp-vpc | myapp-vpc | DELETE_COMPLETE | AWS::CloudFormation::Stack | 2020-10-29 00:00:00 |
18
+ When I run `stack_master delete us-east-1 myapp-vpc --trace` interactively
19
+ And the output should contain all of these lines:
20
+ | 2020-10-29 00:00:00 +1100 myapp-vpc AWS::CloudFormation::Stack DELETE_COMPLETE |
21
+ Then the exit status should be 0
22
+
23
+ Scenario: Run a delete command on a stack that does not exists
24
+ Given I set the environment variables to:
25
+ | variable | value |
26
+ | ANSWER | y |
27
+ When I run `stack_master delete us-east-1 myapp-vpc --trace` interactively
28
+ And the output should contain all of these lines:
29
+ | Stack does not exist |
30
+ Then the exit status should be 0
31
+
32
+ Scenario: Answer no when asked to delete stack
33
+ Given I set the environment variables to:
34
+ | variable | value |
35
+ | ANSWER | n |
36
+ And I stub the following stacks:
37
+ | stack_id | stack_name | parameters | region |
38
+ | 1 | myapp-vpc | KeyName=my-key | us-east-1 |
39
+ When I run `stack_master delete us-east-1 myapp-vpc --trace` interactively
40
+ And the output should contain all of these lines:
41
+ | Stack update aborted |
42
+ Then the exit status should be 0
43
+
@@ -0,0 +1,191 @@
1
+ Feature: Diff 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.json
10
+ """
11
+ And a directory named "parameters"
12
+ And a file named "parameters/myapp_vpc.yml" with:
13
+ """
14
+ KeyName: my-key
15
+ """
16
+ And a directory named "templates"
17
+ And a file named "templates/myapp_vpc.json" with:
18
+ """
19
+ {
20
+ "Description": "Test template",
21
+ "AWSTemplateFormatVersion": "2010-09-09",
22
+ "Parameters": {
23
+ "KeyName": {
24
+ "Description": "Key Name",
25
+ "Type": "String"
26
+ }
27
+ },
28
+ "Resources": {
29
+ "TestSg": {
30
+ "Type": "AWS::EC2::SecurityGroup",
31
+ "Properties": {
32
+ "GroupDescription": "Test SG",
33
+ "VpcId": {
34
+ "Ref": "VpcId"
35
+ }
36
+ }
37
+ },
38
+ "TestSg2": {
39
+ "Type": "AWS::EC2::SecurityGroup",
40
+ "Properties": {
41
+ "GroupDescription": "Test SG 2",
42
+ "VpcId": {
43
+ "Ref": "VpcId"
44
+ }
45
+ }
46
+ }
47
+ }
48
+ }
49
+ """
50
+ And I set the environment variables to:
51
+ | variable | value |
52
+ | STUB_AWS | true |
53
+
54
+ Scenario: Run diff on a stack with no changes
55
+ Given I set the environment variables to:
56
+ | variable | value |
57
+ | ANSWER | y |
58
+ And I stub the following stacks:
59
+ | stack_id | stack_name | parameters | region |
60
+ | 1 | myapp-vpc | KeyName=changed-key | us-east-1 |
61
+ And I stub a template for the stack "myapp-vpc":
62
+ """
63
+ {
64
+ "Description": "Test template",
65
+ "AWSTemplateFormatVersion": "2010-09-09",
66
+ "Parameters": {
67
+ "KeyName": {
68
+ "Description": "Key Name",
69
+ "Type": "String"
70
+ }
71
+ },
72
+ "Resources": {
73
+ "TestSg": {
74
+ "Type": "AWS::EC2::SecurityGroup",
75
+ "Properties": {
76
+ "GroupDescription": "Test SG",
77
+ "VpcId": {
78
+ "Ref": "VpcId"
79
+ }
80
+ }
81
+ },
82
+ "TestSg2": {
83
+ "Type": "AWS::EC2::SecurityGroup",
84
+ "Properties": {
85
+ "GroupDescription": "Test SG 2",
86
+ "VpcId": {
87
+ "Ref": "VpcId"
88
+ }
89
+ }
90
+ }
91
+ }
92
+ }
93
+ """
94
+ When I run `stack_master diff us-east-1 myapp-vpc --trace` interactively
95
+ And the output should contain all of these lines:
96
+ | -KeyName: changed |
97
+ | +KeyName: my-key |
98
+ Then the exit status should be 0
99
+
100
+ Scenario: Run diff on a stack with parameter changes
101
+ Given I set the environment variables to:
102
+ | variable | value |
103
+ | ANSWER | y |
104
+ And I stub the following stacks:
105
+ | stack_id | stack_name | parameters | region |
106
+ | 1 | myapp-vpc | KeyName=my-key | us-east-1 |
107
+ And I stub a template for the stack "myapp-vpc":
108
+ """
109
+ {
110
+ "Description": "Test template",
111
+ "AWSTemplateFormatVersion": "2010-09-09",
112
+ "Parameters": {
113
+ "KeyName": {
114
+ "Description": "Key Name",
115
+ "Type": "String"
116
+ }
117
+ },
118
+ "Resources": {
119
+ "TestSg": {
120
+ "Type": "AWS::EC2::SecurityGroup",
121
+ "Properties": {
122
+ "GroupDescription": "Test SG",
123
+ "VpcId": {
124
+ "Ref": "VpcId"
125
+ }
126
+ }
127
+ },
128
+ "TestSg2": {
129
+ "Type": "AWS::EC2::SecurityGroup",
130
+ "Properties": {
131
+ "GroupDescription": "Test SG 2",
132
+ "VpcId": {
133
+ "Ref": "VpcId"
134
+ }
135
+ }
136
+ }
137
+ }
138
+ }
139
+ """
140
+ When I run `stack_master diff us-east-1 myapp-vpc --trace` interactively
141
+ And the output should contain all of these lines:
142
+ | Stack diff: No changes |
143
+ | Parameters diff: No changes |
144
+ Then the exit status should be 0
145
+
146
+ Scenario: Run diff on a stack with template changes
147
+ Given I set the environment variables to:
148
+ | variable | value |
149
+ | ANSWER | y |
150
+ And I stub the following stacks:
151
+ | stack_id | stack_name | parameters | region |
152
+ | 1 | myapp-vpc | KeyName=my-key | us-east-1 |
153
+ And I stub a template for the stack "myapp-vpc":
154
+ """
155
+ {
156
+ "Description": "Test template",
157
+ "AWSTemplateFormatVersion": "2010-09-09",
158
+ "Parameters": {
159
+ "KeyName": {
160
+ "Description": "Key Name",
161
+ "Type": "String"
162
+ }
163
+ },
164
+ "Resources": {
165
+ "TestSg": {
166
+ "Type": "AWS::EC2::SecurityGroup",
167
+ "Properties": {
168
+ "GroupDescription": "Test SG",
169
+ "VpcId": {
170
+ "Ref": "VpcId"
171
+ }
172
+ }
173
+ },
174
+ "TestSg2": {
175
+ "Type": "AWS::EC2::SecurityGroup",
176
+ "Properties": {
177
+ "GroupDescription": "Changed description",
178
+ "VpcId": {
179
+ "Ref": "VpcId"
180
+ }
181
+ }
182
+ }
183
+ }
184
+ }
185
+ """
186
+ When I run `stack_master diff us-east-1 myapp-vpc --trace` interactively
187
+ And the output should contain all of these lines:
188
+ | - "GroupDescription": "Changed description" |
189
+ | + "GroupDescription": "Test SG 2", |
190
+ Then the exit status should be 0
191
+
@@ -0,0 +1,38 @@
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
+ And I set the environment variables to:
27
+ | variable | value |
28
+ | STUB_AWS | true |
29
+ | ANSWER | y |
30
+
31
+ Scenario: View events
32
+ And I stub the following stack events:
33
+ | stack_id | event_id | stack_name | logical_resource_id | resource_status | resource_type | timestamp |
34
+ | 1 | 1 | myapp-vpc | TestSg | CREATE_COMPLETE | AWS::EC2::SecurityGroup | 2020-10-29 00:00:00 |
35
+ | 1 | 1 | myapp-vpc | myapp-vpc | CREATE_COMPLETE | AWS::CloudFormation::Stack | 2020-10-29 00:00:00 |
36
+ When I run `stack_master events us-east-1 myapp-vpc --trace`
37
+ And the output should contain all of these lines:
38
+ | 2020-10-29 00:00:00 +1100 myapp-vpc AWS::CloudFormation::Stack CREATE_COMPLETE |
@@ -0,0 +1,6 @@
1
+ Feature: init project
2
+
3
+ Scenario: Run init
4
+ When I run `stack_master init us-east-1 my-app`
5
+ # TODO flesh this out
6
+ Then the exit status should be 0
@@ -0,0 +1,49 @@
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
+ And I set the environment variables to:
26
+ | variable | value |
27
+ | STUB_AWS | true |
28
+ | ANSWER | y |
29
+
30
+ Scenario: Output stack resources
31
+ And I stub the following stacks:
32
+ | stack_id | stack_name | parameters | region | outputs |
33
+ | 1 | myapp-vpc | KeyName=my-key | us-east-1 | VpcId=vpc-123456 |
34
+ And I stub a template for the stack "myapp-vpc":
35
+ """
36
+ {
37
+ }
38
+ """
39
+ When I run `stack_master outputs us-east-1 myapp-vpc --trace`
40
+ And the output should contain all of these lines:
41
+ | VpcId |
42
+ | vpc-123456 |
43
+
44
+ Scenario: Fails when the stack doesn't exist
45
+ When I run `stack_master outputs us-east-1 myapp-vpc --trace`
46
+ And the output should not contain all of these lines:
47
+ | VpcId |
48
+ | vpc-123456 |
49
+ And the output should contain "Stack doesn't exist"
@@ -0,0 +1,66 @@
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
+ And I set the environment variables to:
54
+ | variable | value |
55
+ | STUB_AWS | true |
56
+ | ANSWER | y |
57
+
58
+ Scenario: Create a stack using region aliases
59
+ When I run `stack_master apply staging myapp-vpc --trace`
60
+ And the output should contain all of these lines:
61
+ | Stack diff: |
62
+ | + "Vpc": { |
63
+ | Parameters diff: |
64
+ | KeyName: my-key |
65
+ | 2020-10-29 00:00:00 +1100 myapp-vpc AWS::CloudFormation::Stack CREATE_COMPLETE |
66
+ Then the exit status should be 0
@@ -0,0 +1,45 @@
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
+ And I set the environment variables to:
26
+ | variable | value |
27
+ | STUB_AWS | true |
28
+
29
+ Scenario: Show resources
30
+ And I stub the following stacks:
31
+ | stack_id | stack_name | parameters | region |
32
+ | 1 | myapp-vpc | KeyName=my-key | us-east-1 |
33
+ And I stub the following stack resources:
34
+ | stack_name | logical_resource_id | resource_type | timestamp | resource_status |
35
+ | myapp-vpc | Vpc | AWS::EC2::Vpc | 2015-11-02 06:41:58 | CREATE_COMPLETE |
36
+ When I run `stack_master resources us-east-1 myapp-vpc --trace`
37
+ And the output should contain all of these lines:
38
+ | Vpc |
39
+ | AWS::EC2::Vpc |
40
+ | 2015-11-02 06:41:58 |
41
+ | CREATE_COMPLETE |
42
+
43
+ Scenario: Fails when the stack doesn't exist
44
+ When I run `stack_master resources us-east-1 myapp-vpc --trace`
45
+ And the output should contain "Stack doesn't exist"
@@ -0,0 +1,88 @@
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
+ And I set the environment variables to:
75
+ | variable | value |
76
+ | STUB_AWS | true |
77
+ Given I set the environment variables to:
78
+ | variable | value |
79
+ | ANSWER | y |
80
+
81
+ Scenario: Create a stack with inherited attributes
82
+ When I run `stack_master apply ap-southeast-2 myapp-vpc --trace` interactively
83
+ Then the stack "myapp-vpc" should contain this notification ARN "test_arn_1"
84
+ Then the stack "myapp-vpc" should contain this notification ARN "test_arn_3"
85
+ And the stack "myapp-vpc" should have a policy with the following:
86
+ """
87
+ {my: 'policy'}
88
+ """