stack_master 0.6.0 → 0.7.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 +22 -0
- data/features/apply.feature +1 -1
- data/features/apply_with_s3.feature +106 -0
- data/features/step_definitions/stack_steps.rb +5 -0
- data/features/support/env.rb +1 -0
- data/lib/stack_master.rb +78 -58
- data/lib/stack_master/aws_driver/s3.rb +66 -0
- data/lib/stack_master/cli.rb +1 -0
- data/lib/stack_master/commands/apply.rb +52 -5
- data/lib/stack_master/commands/init.rb +2 -0
- data/lib/stack_master/commands/list_stacks.rb +2 -0
- data/lib/stack_master/commands/outputs.rb +2 -0
- data/lib/stack_master/commands/status.rb +3 -0
- data/lib/stack_master/parameter_resolver.rb +1 -1
- data/lib/stack_master/parameter_resolvers/secret.rb +2 -0
- data/lib/stack_master/stack.rb +20 -13
- data/lib/stack_master/stack_definition.rb +63 -13
- data/lib/stack_master/stack_differ.rb +2 -0
- data/lib/stack_master/stack_events/fetcher.rb +1 -1
- data/lib/stack_master/stack_events/presenter.rb +1 -1
- data/lib/stack_master/stack_events/streamer.rb +1 -1
- data/lib/stack_master/template_compiler.rb +3 -1
- data/lib/stack_master/template_compilers/cfndsl.rb +4 -2
- data/lib/stack_master/template_compilers/json.rb +4 -0
- data/lib/stack_master/template_compilers/sparkle_formation.rb +5 -0
- data/lib/stack_master/template_compilers/yaml.rb +4 -0
- data/lib/stack_master/test_driver/cloud_formation.rb +50 -36
- data/lib/stack_master/test_driver/s3.rb +34 -0
- data/lib/stack_master/testing.rb +1 -0
- data/lib/stack_master/utils.rb +19 -0
- data/lib/stack_master/version.rb +1 -1
- data/spec/fixtures/stack_master.yml +4 -1
- data/spec/stack_master/aws_driver/s3_spec.rb +130 -0
- data/spec/stack_master/commands/apply_spec.rb +26 -0
- data/spec/stack_master/config_spec.rb +8 -1
- data/spec/stack_master/parameter_resolver_spec.rb +5 -0
- data/spec/stack_master/sparkle_formation/user_data_file_spec.rb +2 -0
- data/spec/stack_master/stack_events/presenter_spec.rb +1 -1
- data/spec/stack_master/stack_spec.rb +23 -5
- data/spec/stack_master/template_compiler_spec.rb +1 -0
- data/spec/stack_master/template_compilers/cfndsl_spec.rb +2 -0
- data/spec/stack_master/test_driver/s3_spec.rb +17 -0
- data/stack_master.gemspec +0 -1
- metadata +10 -16
data/lib/stack_master/version.rb
CHANGED
@@ -4,6 +4,9 @@ region_aliases:
|
|
4
4
|
stack_defaults:
|
5
5
|
tags:
|
6
6
|
application: my-awesome-blog
|
7
|
+
s3:
|
8
|
+
bucket: my-bucket
|
9
|
+
region: us-east-1
|
7
10
|
template_compilers:
|
8
11
|
rb: ruby_dsl
|
9
12
|
region_defaults:
|
@@ -37,4 +40,4 @@ stacks:
|
|
37
40
|
myapp_web:
|
38
41
|
template: myapp_web
|
39
42
|
tags:
|
40
|
-
test_override: 2
|
43
|
+
test_override: 2
|
@@ -0,0 +1,130 @@
|
|
1
|
+
RSpec.describe StackMaster::AwsDriver::S3 do
|
2
|
+
let(:region) { 'us-east-1' }
|
3
|
+
let(:bucket) { 'bucket' }
|
4
|
+
let(:s3) { Aws::S3::Client.new(stub_responses: true) }
|
5
|
+
subject(:s3_driver) { StackMaster::AwsDriver::S3.new }
|
6
|
+
|
7
|
+
before do
|
8
|
+
allow(Aws::S3::Client).to receive(:new).and_return(s3)
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '#upload_files' do
|
12
|
+
before do
|
13
|
+
allow(File).to receive(:read).and_return('file content')
|
14
|
+
end
|
15
|
+
|
16
|
+
context 'when set_region is called' do
|
17
|
+
it 'defaults to that region' do
|
18
|
+
s3_driver.set_region('default')
|
19
|
+
expect(Aws::S3::Client).to receive(:new).with(region: 'default').and_return(s3)
|
20
|
+
files = {
|
21
|
+
'template' => {
|
22
|
+
path: 'spec/fixtures/templates/myapp_vpc.json',
|
23
|
+
body: 'file content'
|
24
|
+
}
|
25
|
+
}
|
26
|
+
s3_driver.upload_files(bucket: 'b',
|
27
|
+
files: files)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'when called with a prefix' do
|
32
|
+
let(:options) do
|
33
|
+
{
|
34
|
+
bucket: 'bucket',
|
35
|
+
region: 'region',
|
36
|
+
prefix: 'prefix',
|
37
|
+
files: {'template' => {
|
38
|
+
path: 'spec/fixtures/templates/myapp_vpc.json',
|
39
|
+
body: 'file content'
|
40
|
+
}
|
41
|
+
}
|
42
|
+
}
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'uploads files under a prefix' do
|
46
|
+
expect(s3).to receive(:put_object).with(bucket: 'bucket',
|
47
|
+
key: 'prefix/template',
|
48
|
+
body: 'file content',
|
49
|
+
metadata: {md5: "d10b4c3ff123b26dc068d43a8bef2d23"})
|
50
|
+
s3_driver.upload_files(options)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
context 'when called without a prefix' do
|
55
|
+
let(:options) do
|
56
|
+
{
|
57
|
+
bucket: 'bucket',
|
58
|
+
region: 'region',
|
59
|
+
files: {'template' => {
|
60
|
+
:path => 'spec/fixtures/templates/myapp_vpc.json',
|
61
|
+
:body => 'file content'
|
62
|
+
}
|
63
|
+
}
|
64
|
+
}
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'uploads files under the bucket root' do
|
68
|
+
expect(s3).to receive(:put_object).with(bucket: 'bucket',
|
69
|
+
key: 'template',
|
70
|
+
body: 'file content',
|
71
|
+
metadata: {md5: "d10b4c3ff123b26dc068d43a8bef2d23"})
|
72
|
+
s3_driver.upload_files(options)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
context 'when called with files in a subfolder' do
|
77
|
+
let(:options) do
|
78
|
+
{
|
79
|
+
bucket: 'bucket',
|
80
|
+
region: 'region',
|
81
|
+
prefix: 'prefix',
|
82
|
+
files: {'template' => {
|
83
|
+
:path => 'spec/fixtures/templates/myapp_vpc.json',
|
84
|
+
:body => 'file content'
|
85
|
+
}
|
86
|
+
}
|
87
|
+
}
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'uploads files under the prefix' do
|
91
|
+
expect(s3).to receive(:put_object).with(bucket: 'bucket',
|
92
|
+
key: 'prefix/template',
|
93
|
+
body: 'file content',
|
94
|
+
metadata: {md5: "d10b4c3ff123b26dc068d43a8bef2d23"})
|
95
|
+
s3_driver.upload_files(options)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
context 'when called with several files' do
|
100
|
+
let(:options) do
|
101
|
+
{
|
102
|
+
bucket: 'bucket',
|
103
|
+
region: 'region',
|
104
|
+
files: {
|
105
|
+
'template1' => {
|
106
|
+
:path => 'spec/fixtures/templates/myapp_vpc.json',
|
107
|
+
:body => 'file content'
|
108
|
+
},
|
109
|
+
'template2' => {
|
110
|
+
:path => 'spec/fixtures/templates/myapp_vpc.json',
|
111
|
+
:body => 'file content'
|
112
|
+
}
|
113
|
+
}
|
114
|
+
}
|
115
|
+
end
|
116
|
+
|
117
|
+
it 'uploads all the files' do
|
118
|
+
expect(s3).to receive(:put_object).with(bucket: 'bucket',
|
119
|
+
key: 'template1',
|
120
|
+
body: 'file content',
|
121
|
+
metadata: {md5: "d10b4c3ff123b26dc068d43a8bef2d23"})
|
122
|
+
expect(s3).to receive(:put_object).with(bucket: 'bucket',
|
123
|
+
key: 'template2',
|
124
|
+
body: 'file content',
|
125
|
+
metadata: {md5: "d10b4c3ff123b26dc068d43a8bef2d23"})
|
126
|
+
s3_driver.upload_files(options)
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
RSpec.describe StackMaster::Commands::Apply do
|
2
2
|
let(:cf) { instance_double(Aws::CloudFormation::Client) }
|
3
|
+
let(:s3) { instance_double(Aws::S3::Client) }
|
3
4
|
let(:region) { 'us-east-1' }
|
4
5
|
let(:stack_name) { 'myapp-vpc' }
|
5
6
|
let(:config) { double(find_stack: stack_definition) }
|
@@ -13,7 +14,9 @@ RSpec.describe StackMaster::Commands::Apply do
|
|
13
14
|
before do
|
14
15
|
allow(StackMaster::Stack).to receive(:find).with(region, stack_name).and_return(stack)
|
15
16
|
allow(StackMaster::Stack).to receive(:generate).with(stack_definition, config).and_return(proposed_stack)
|
17
|
+
allow(config).to receive(:stack_defaults).and_return({})
|
16
18
|
allow(Aws::CloudFormation::Client).to receive(:new).and_return(cf)
|
19
|
+
allow(Aws::S3::Client).to receive(:new).and_return(s3)
|
17
20
|
allow(cf).to receive(:create_stack)
|
18
21
|
allow(StackMaster::StackDiffer).to receive(:new).with(proposed_stack, stack).and_return double.as_null_object
|
19
22
|
allow(StackMaster::StackEvents::Streamer).to receive(:stream)
|
@@ -55,6 +58,29 @@ RSpec.describe StackMaster::Commands::Apply do
|
|
55
58
|
end
|
56
59
|
end
|
57
60
|
|
61
|
+
context 'when using s3' do
|
62
|
+
before do
|
63
|
+
stack_definition.s3 = {
|
64
|
+
'bucket' => 'my-bucket',
|
65
|
+
'prefix' => 'my-prefix',
|
66
|
+
'region' => 'us-east-1',
|
67
|
+
}
|
68
|
+
stack_definition.template = 'my-template.rb'
|
69
|
+
allow(s3).to receive(:list_objects).and_return([])
|
70
|
+
allow(s3).to receive(:put_object)
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'uploads to the correct URL' do
|
74
|
+
apply
|
75
|
+
expect(s3).to have_received(:put_object).with(
|
76
|
+
bucket: 'my-bucket',
|
77
|
+
key: 'my-prefix/my-template.json',
|
78
|
+
body: template_body,
|
79
|
+
metadata: { md5: Digest::MD5.hexdigest(template_body).to_s }
|
80
|
+
)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
58
84
|
context 'the changeset failed to create' do
|
59
85
|
before do
|
60
86
|
allow(change_set).to receive(:failed?).and_return(true)
|
@@ -4,9 +4,11 @@ RSpec.describe StackMaster::Config do
|
|
4
4
|
let(:myapp_vpc_definition) {
|
5
5
|
StackMaster::StackDefinition.new(
|
6
6
|
region: 'us-east-1',
|
7
|
+
region_alias: 'production',
|
7
8
|
stack_name: 'myapp-vpc',
|
8
9
|
template: 'myapp_vpc.json',
|
9
10
|
tags: { 'application' => 'my-awesome-blog', 'environment' => 'production' },
|
11
|
+
s3: { 'bucket' => 'my-bucket', 'region' => 'us-east-1' },
|
10
12
|
notification_arns: ['test_arn', 'test_arn_2'],
|
11
13
|
base_dir: base_dir,
|
12
14
|
secret_file: 'production.yml.gpg',
|
@@ -66,7 +68,8 @@ RSpec.describe StackMaster::Config do
|
|
66
68
|
|
67
69
|
it 'loads stack defaults' do
|
68
70
|
expect(loaded_config.stack_defaults).to eq({
|
69
|
-
'tags' => { 'application' => 'my-awesome-blog' }
|
71
|
+
'tags' => { 'application' => 'my-awesome-blog' },
|
72
|
+
's3' => { 'bucket' => 'my-bucket', 'region' => 'us-east-1' }
|
70
73
|
})
|
71
74
|
end
|
72
75
|
|
@@ -107,11 +110,13 @@ RSpec.describe StackMaster::Config do
|
|
107
110
|
expect(loaded_config.find_stack('ap-southeast-2', 'myapp-vpc')).to eq(StackMaster::StackDefinition.new(
|
108
111
|
stack_name: 'myapp-vpc',
|
109
112
|
region: 'ap-southeast-2',
|
113
|
+
region_alias: 'staging',
|
110
114
|
tags: {
|
111
115
|
'application' => 'my-awesome-blog',
|
112
116
|
'environment' => 'staging',
|
113
117
|
'test_override' => 1
|
114
118
|
},
|
119
|
+
s3: { 'bucket' => 'my-bucket', 'region' => 'us-east-1' },
|
115
120
|
notification_arns: ['test_arn_3', 'test_arn_4'],
|
116
121
|
template: 'myapp_vpc.rb',
|
117
122
|
base_dir: base_dir,
|
@@ -121,11 +126,13 @@ RSpec.describe StackMaster::Config do
|
|
121
126
|
expect(loaded_config.find_stack('ap-southeast-2', 'myapp-web')).to eq(StackMaster::StackDefinition.new(
|
122
127
|
stack_name: 'myapp-web',
|
123
128
|
region: 'ap-southeast-2',
|
129
|
+
region_alias: 'staging',
|
124
130
|
tags: {
|
125
131
|
'application' => 'my-awesome-blog',
|
126
132
|
'environment' => 'staging',
|
127
133
|
'test_override' => 2
|
128
134
|
},
|
135
|
+
s3: { 'bucket' => 'my-bucket', 'region' => 'us-east-1' },
|
129
136
|
notification_arns: ['test_arn_3'],
|
130
137
|
template: 'myapp_web',
|
131
138
|
base_dir: base_dir,
|
@@ -38,6 +38,11 @@ RSpec.describe StackMaster::ParameterResolver do
|
|
38
38
|
expect(resolve(param1: [1, 2])).to eq(param1: '1,2')
|
39
39
|
end
|
40
40
|
|
41
|
+
it 'converts boolean values to strings' do
|
42
|
+
expect(resolve(param1: true)).to eq(param1: 'true')
|
43
|
+
expect(resolve(param1: false)).to eq(param1: 'false')
|
44
|
+
end
|
45
|
+
|
41
46
|
it 'it throws an error when the hash contains more than one key' do
|
42
47
|
expect {
|
43
48
|
resolve(param: { nested1: 'value1', nested2: 'value2' })
|
@@ -12,7 +12,7 @@ RSpec.describe StackMaster::StackEvents::Presenter do
|
|
12
12
|
subject(:print_event) { described_class.print_event($stdout, event) }
|
13
13
|
|
14
14
|
it "nicely presents event data" do
|
15
|
-
expect { print_event }.to output("\e[0;33;49m2001-01-01 02:02:02 #{
|
15
|
+
expect { print_event }.to output("\e[0;33;49m2001-01-01 02:02:02 #{time.strftime('%z')} MyAwesomeQueue AWS::SQS::Queue CREATE_IN_PROGRESS Resource creation Initiated\e[0m\n").to_stdout
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
@@ -144,14 +144,32 @@ RSpec.describe StackMaster::Stack do
|
|
144
144
|
end
|
145
145
|
|
146
146
|
describe '#too_big?' do
|
147
|
-
let(:big_stack) { described_class.new(template_body: "{\"a\":\"#{'x' *
|
147
|
+
let(:big_stack) { described_class.new(template_body: "{\"a\":\"#{'x' * 500000}\"}") }
|
148
|
+
let(:medium_stack) { described_class.new(template_body: "{\"a\":\"#{'x' * 60000}\"}") }
|
148
149
|
let(:little_stack) { described_class.new(template_body: "{\"a\":\"#{'x' * 1000}\"}") }
|
149
150
|
|
150
|
-
|
151
|
-
|
151
|
+
context 'when not using S3' do
|
152
|
+
it 'returns true for big stacks' do
|
153
|
+
expect(big_stack.too_big?).to be_truthy
|
154
|
+
end
|
155
|
+
it 'returns true for medium stacks' do
|
156
|
+
expect(medium_stack.too_big?).to be_truthy
|
157
|
+
end
|
158
|
+
it 'returns false for small stacks' do
|
159
|
+
expect(little_stack.too_big?).to be_falsey
|
160
|
+
end
|
152
161
|
end
|
153
|
-
|
154
|
-
|
162
|
+
|
163
|
+
context 'when using S3' do
|
164
|
+
it 'returns true for big stacks' do
|
165
|
+
expect(big_stack.too_big?(true)).to be_truthy
|
166
|
+
end
|
167
|
+
it 'returns false for medium stacks' do
|
168
|
+
expect(medium_stack.too_big?(true)).to be_falsey
|
169
|
+
end
|
170
|
+
it 'returns false for small stacks' do
|
171
|
+
expect(little_stack.too_big?(true)).to be_falsey
|
172
|
+
end
|
155
173
|
end
|
156
174
|
end
|
157
175
|
|
@@ -0,0 +1,17 @@
|
|
1
|
+
RSpec.describe StackMaster::TestDriver::S3 do
|
2
|
+
subject(:s3_driver) { described_class.new }
|
3
|
+
let(:bucket) { 'test-bucket' }
|
4
|
+
let(:prefix) { 'test-prefix' }
|
5
|
+
let(:files) { { 'test-file' => { path: 'path', body: 'body' } } }
|
6
|
+
let(:region) { 'us-east-1' }
|
7
|
+
|
8
|
+
it 'uploads and finds files' do
|
9
|
+
s3_driver.upload_files(bucket: bucket,
|
10
|
+
prefix: prefix,
|
11
|
+
region: region,
|
12
|
+
files: files)
|
13
|
+
file = s3_driver.find_file(bucket: bucket,
|
14
|
+
object_key: [prefix, 'test-file'].compact.join('/'))
|
15
|
+
expect(file).to be
|
16
|
+
end
|
17
|
+
end
|
data/stack_master.gemspec
CHANGED
@@ -27,7 +27,6 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.add_development_dependency "timecop"
|
28
28
|
spec.add_dependency "ruby-progressbar"
|
29
29
|
spec.add_dependency "commander"
|
30
|
-
spec.add_dependency "virtus"
|
31
30
|
spec.add_dependency "aws-sdk", "~> 2.2.31"
|
32
31
|
spec.add_dependency "diffy"
|
33
32
|
spec.add_dependency "erubis"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stack_master
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steve Hodgkiss
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-07-
|
12
|
+
date: 2016-07-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -137,20 +137,6 @@ dependencies:
|
|
137
137
|
- - ">="
|
138
138
|
- !ruby/object:Gem::Version
|
139
139
|
version: '0'
|
140
|
-
- !ruby/object:Gem::Dependency
|
141
|
-
name: virtus
|
142
|
-
requirement: !ruby/object:Gem::Requirement
|
143
|
-
requirements:
|
144
|
-
- - ">="
|
145
|
-
- !ruby/object:Gem::Version
|
146
|
-
version: '0'
|
147
|
-
type: :runtime
|
148
|
-
prerelease: false
|
149
|
-
version_requirements: !ruby/object:Gem::Requirement
|
150
|
-
requirements:
|
151
|
-
- - ">="
|
152
|
-
- !ruby/object:Gem::Version
|
153
|
-
version: '0'
|
154
140
|
- !ruby/object:Gem::Dependency
|
155
141
|
name: aws-sdk
|
156
142
|
requirement: !ruby/object:Gem::Requirement
|
@@ -316,6 +302,7 @@ files:
|
|
316
302
|
- example/simple/templates/myapp_vpc.rb
|
317
303
|
- example/simple/templates/myapp_web.rb
|
318
304
|
- features/apply.feature
|
305
|
+
- features/apply_with_s3.feature
|
319
306
|
- features/delete.feature
|
320
307
|
- features/diff.feature
|
321
308
|
- features/events.feature
|
@@ -330,6 +317,7 @@ files:
|
|
330
317
|
- features/validate.feature
|
331
318
|
- lib/stack_master.rb
|
332
319
|
- lib/stack_master/aws_driver/cloud_formation.rb
|
320
|
+
- lib/stack_master/aws_driver/s3.rb
|
333
321
|
- lib/stack_master/change_set.rb
|
334
322
|
- lib/stack_master/cli.rb
|
335
323
|
- lib/stack_master/command.rb
|
@@ -375,6 +363,7 @@ files:
|
|
375
363
|
- lib/stack_master/template_compilers/sparkle_formation.rb
|
376
364
|
- lib/stack_master/template_compilers/yaml.rb
|
377
365
|
- lib/stack_master/test_driver/cloud_formation.rb
|
366
|
+
- lib/stack_master/test_driver/s3.rb
|
378
367
|
- lib/stack_master/testing.rb
|
379
368
|
- lib/stack_master/utils.rb
|
380
369
|
- lib/stack_master/validator.rb
|
@@ -392,6 +381,7 @@ files:
|
|
392
381
|
- spec/fixtures/templates/yml/valid_myapp_vpc.yml
|
393
382
|
- spec/fixtures/test/.gitkeep
|
394
383
|
- spec/spec_helper.rb
|
384
|
+
- spec/stack_master/aws_driver/s3_spec.rb
|
395
385
|
- spec/stack_master/change_set_spec.rb
|
396
386
|
- spec/stack_master/command_spec.rb
|
397
387
|
- spec/stack_master/commands/apply_spec.rb
|
@@ -428,6 +418,7 @@ files:
|
|
428
418
|
- spec/stack_master/template_compilers/sparkle_formation_spec.rb
|
429
419
|
- spec/stack_master/template_compilers/yaml_spec.rb
|
430
420
|
- spec/stack_master/test_driver/cloud_formation_spec.rb
|
421
|
+
- spec/stack_master/test_driver/s3_spec.rb
|
431
422
|
- spec/stack_master/utils_spec.rb
|
432
423
|
- spec/stack_master/validator_spec.rb
|
433
424
|
- spec/stack_master_spec.rb
|
@@ -463,6 +454,7 @@ summary: StackMaster is a sure-footed way of creating, updating and keeping trac
|
|
463
454
|
of Amazon (AWS) CloudFormation stacks.
|
464
455
|
test_files:
|
465
456
|
- features/apply.feature
|
457
|
+
- features/apply_with_s3.feature
|
466
458
|
- features/delete.feature
|
467
459
|
- features/diff.feature
|
468
460
|
- features/events.feature
|
@@ -484,6 +476,7 @@ test_files:
|
|
484
476
|
- spec/fixtures/templates/yml/valid_myapp_vpc.yml
|
485
477
|
- spec/fixtures/test/.gitkeep
|
486
478
|
- spec/spec_helper.rb
|
479
|
+
- spec/stack_master/aws_driver/s3_spec.rb
|
487
480
|
- spec/stack_master/change_set_spec.rb
|
488
481
|
- spec/stack_master/command_spec.rb
|
489
482
|
- spec/stack_master/commands/apply_spec.rb
|
@@ -520,6 +513,7 @@ test_files:
|
|
520
513
|
- spec/stack_master/template_compilers/sparkle_formation_spec.rb
|
521
514
|
- spec/stack_master/template_compilers/yaml_spec.rb
|
522
515
|
- spec/stack_master/test_driver/cloud_formation_spec.rb
|
516
|
+
- spec/stack_master/test_driver/s3_spec.rb
|
523
517
|
- spec/stack_master/utils_spec.rb
|
524
518
|
- spec/stack_master/validator_spec.rb
|
525
519
|
- spec/stack_master_spec.rb
|