stack_master 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/features/apply.feature +9 -2
  3. data/lib/stack_master.rb +20 -1
  4. data/lib/stack_master/aws_driver/cloud_formation.rb +15 -35
  5. data/lib/stack_master/change_set.rb +104 -0
  6. data/lib/stack_master/cli.rb +3 -0
  7. data/lib/stack_master/command.rb +29 -3
  8. data/lib/stack_master/commands/apply.rb +54 -38
  9. data/lib/stack_master/commands/validate.rb +1 -1
  10. data/lib/stack_master/config.rb +10 -1
  11. data/lib/stack_master/paged_response_accumulator.rb +29 -0
  12. data/lib/stack_master/parameter_loader.rb +3 -0
  13. data/lib/stack_master/stack.rb +7 -1
  14. data/lib/stack_master/stack_events/fetcher.rb +1 -8
  15. data/lib/stack_master/template_compiler.rb +18 -14
  16. data/lib/stack_master/template_compilers/json.rb +18 -0
  17. data/lib/stack_master/template_compilers/sparkle_formation.rb +10 -0
  18. data/lib/stack_master/test_driver/cloud_formation.rb +33 -0
  19. data/lib/stack_master/validator.rb +5 -4
  20. data/lib/stack_master/version.rb +1 -1
  21. data/spec/stack_master/change_set_spec.rb +62 -0
  22. data/spec/stack_master/command_spec.rb +21 -1
  23. data/spec/stack_master/commands/apply_spec.rb +53 -9
  24. data/spec/stack_master/commands/validate_spec.rb +1 -1
  25. data/spec/stack_master/paged_response_accumulator_spec.rb +39 -0
  26. data/spec/stack_master/stack_events/fetcher_spec.rb +8 -33
  27. data/spec/stack_master/stack_spec.rb +19 -1
  28. data/spec/stack_master/template_compiler_spec.rb +12 -39
  29. data/spec/stack_master/template_compilers/json_spec.rb +29 -0
  30. data/spec/stack_master/template_compilers/sparkle_formation_spec.rb +22 -0
  31. data/spec/stack_master/test_driver/cloud_formation_spec.rb +39 -12
  32. data/spec/stack_master/validator_spec.rb +2 -1
  33. data/spec/stack_master_spec.rb +81 -0
  34. metadata +17 -3
@@ -18,7 +18,7 @@ RSpec.describe StackMaster::Commands::Validate do
18
18
  describe "#perform" do
19
19
  context "can find stack" do
20
20
  it "calls the validator to validate the stack definition" do
21
- expect(StackMaster::Validator).to receive(:valid?).with(stack_definition)
21
+ expect(StackMaster::Validator).to receive(:valid?).with(stack_definition, config)
22
22
  validate.perform
23
23
  end
24
24
  end
@@ -0,0 +1,39 @@
1
+ RSpec.describe StackMaster::PagedResponseAccumulator do
2
+ let(:cf) { Aws::CloudFormation::Client.new }
3
+ subject(:accumulator) { described_class.new(cf, :describe_stack_events, { stack_name: 'blah' }, :stack_events) }
4
+
5
+ context 'with one page' do
6
+ let(:page_one_events) { [
7
+ { event_id: '1', stack_id: '1', stack_name: 'blah', timestamp: Time.now},
8
+ { event_id: '2', stack_id: '1', stack_name: 'blah', timestamp: Time.now}
9
+ ] }
10
+
11
+ before do
12
+ cf.stub_responses(:describe_stack_events, { stack_events: page_one_events, next_token: nil })
13
+ end
14
+
15
+ it 'returns the first page' do
16
+ events = accumulator.call
17
+ expect(events.stack_events.count).to eq 2
18
+ end
19
+ end
20
+
21
+ context 'with two pages' do
22
+ let(:page_one_events) { [
23
+ { event_id: '1', stack_id: '1', stack_name: 'blah', timestamp: Time.now},
24
+ { event_id: '2', stack_id: '1', stack_name: 'blah', timestamp: Time.now}
25
+ ] }
26
+ let(:page_two_events) { [
27
+ { event_id: '3', stack_id: '1', stack_name: 'blah', timestamp: Time.now}
28
+ ] }
29
+
30
+ before do
31
+ cf.stub_responses(:describe_stack_events, { stack_events: page_one_events, next_token: 'blah' }, { stack_events: page_two_events } )
32
+ end
33
+
34
+ it 'returns all the stack events combined' do
35
+ events = accumulator.call
36
+ expect(events.stack_events.count).to eq 3
37
+ end
38
+ end
39
+ end
@@ -1,46 +1,25 @@
1
1
  RSpec.describe StackMaster::StackEvents::Fetcher do
2
2
  let(:cf) { Aws::CloudFormation::Client.new }
3
+ let(:stack_name) { 'blah' }
3
4
 
4
5
  before do
5
6
  allow(Aws::CloudFormation::Client).to receive(:new).and_return(cf)
6
7
  allow(StackMaster::StackEvents::Streamer).to receive(:stream)
8
+ allow(StackMaster::PagedResponseAccumulator).to receive(:call).with(StackMaster.cloud_formation_driver, :describe_stack_events, { stack_name: stack_name }, :stack_events).and_return(OpenStruct.new(stack_events: events))
7
9
  end
8
10
 
9
11
  context 'with 2 stack events' do
10
12
  let(:events) { [
11
- { event_id: '1', stack_id: '1', stack_name: 'blah', timestamp: Time.now},
12
- { event_id: '2', stack_id: '1', stack_name: 'blah', timestamp: Time.now}
13
+ OpenStruct.new(event_id: '1', stack_id: '1', stack_name: 'blah', timestamp: Time.now),
14
+ OpenStruct.new(event_id: '2', stack_id: '1', stack_name: 'blah', timestamp: Time.now)
13
15
  ] }
14
16
 
15
- before do
16
- cf.stub_responses(:describe_stack_events, stack_events: events)
17
- end
18
-
19
17
  it 'returns stack events' do
20
- events = StackMaster::StackEvents::Fetcher.fetch('blah', 'us-east-1')
18
+ events = StackMaster::StackEvents::Fetcher.fetch(stack_name, 'us-east-1')
21
19
  expect(events.count).to eq 2
22
20
  end
23
21
  end
24
22
 
25
- context 'when more than one page is present' do
26
- let(:page_one_events) { [
27
- { event_id: '1', stack_id: '1', stack_name: 'blah', timestamp: Time.now},
28
- { event_id: '2', stack_id: '1', stack_name: 'blah', timestamp: Time.now}
29
- ] }
30
- let(:page_two_events) { [
31
- { event_id: '3', stack_id: '1', stack_name: 'blah', timestamp: Time.now}
32
- ] }
33
-
34
- before do
35
- cf.stub_responses(:describe_stack_events, { stack_events: page_one_events, next_token: 'blah' }, { stack_events: page_two_events } )
36
- end
37
-
38
- it 'returns all the stack events combined' do
39
- events = StackMaster::StackEvents::Fetcher.fetch('blah', 'us-east-1')
40
- expect(events.count).to eq 3
41
- end
42
- end
43
-
44
23
  context 'filtering with a from timestamp' do
45
24
  let(:two_pm) { Time.parse('2015-10-27 14:00') }
46
25
  let(:three_pm) { Time.parse('2015-10-27 15:00') }
@@ -48,17 +27,13 @@ RSpec.describe StackMaster::StackEvents::Fetcher do
48
27
 
49
28
  let(:events) {
50
29
  [
51
- { event_id: '1', stack_id: '1', stack_name: 'blah', timestamp: two_pm },
52
- { event_id: '2', stack_id: '1', stack_name: 'blah', timestamp: four_pm },
30
+ OpenStruct.new(event_id: '1', stack_id: '1', stack_name: 'blah', timestamp: two_pm),
31
+ OpenStruct.new(event_id: '2', stack_id: '1', stack_name: 'blah', timestamp: four_pm),
53
32
  ]
54
33
  }
55
34
 
56
- before do
57
- cf.stub_responses(:describe_stack_events, stack_events: events)
58
- end
59
-
60
35
  it 'only returns events after the timestamp' do
61
- events = StackMaster::StackEvents::Fetcher.fetch('blah', 'us-east-1', from: three_pm)
36
+ events = StackMaster::StackEvents::Fetcher.fetch(stack_name, 'us-east-1', from: three_pm)
62
37
  expect(events.map(&:event_id)).to eq ['2']
63
38
  end
64
39
  end
@@ -82,7 +82,7 @@ RSpec.describe StackMaster::Stack do
82
82
  before do
83
83
  allow(StackMaster::ParameterLoader).to receive(:load).and_return(parameter_hash)
84
84
  allow(StackMaster::ParameterResolver).to receive(:resolve).and_return(resolved_parameters)
85
- allow(StackMaster::TemplateCompiler).to receive(:compile).with(stack_definition.template_file_path).and_return(template_body)
85
+ allow(StackMaster::TemplateCompiler).to receive(:compile).with(config, stack_definition.template_file_path).and_return(template_body)
86
86
  allow(File).to receive(:read).with(stack_definition.stack_policy_file_path).and_return(stack_policy_body)
87
87
  end
88
88
 
@@ -154,4 +154,22 @@ RSpec.describe StackMaster::Stack do
154
154
  expect(little_stack.too_big?).to be_falsey
155
155
  end
156
156
  end
157
+
158
+ describe '#missing_parameters?' do
159
+ subject { stack.missing_parameters? }
160
+
161
+ let(:stack) { StackMaster::Stack.new(parameters: parameters, template_body: '{}') }
162
+
163
+ context 'when a parameter has a nil value' do
164
+ let(:parameters) { { 'my_param' => nil } }
165
+
166
+ it { should eq true }
167
+ end
168
+
169
+ context 'when no parameers have a nil value' do
170
+ let(:parameters) { { 'my_param' => '1' } }
171
+
172
+ it { should eq false }
173
+ end
174
+ end
157
175
  end
@@ -1,47 +1,20 @@
1
1
  RSpec.describe StackMaster::TemplateCompiler do
2
- describe ".compile" do
3
- def compile
4
- StackMaster::TemplateCompiler.compile(template_file_path)
5
- end
6
-
7
- context 'json template' do
8
- let(:template_file_path) { '/base_dir/templates/template.json' }
9
-
10
- context "small json template" do
11
- before do
12
- allow(File).to receive(:read).with(template_file_path).and_return('{ }')
13
- end
14
-
15
- it "reads from the template file path" do
16
- expect(compile).to eq('{ }')
17
- end
18
- end
19
-
20
- context 'extra big json template' do
21
- before do
22
- allow(File).to receive(:read).with(template_file_path).and_return("{ #{' ' * 60000} }")
23
- end
2
+ describe '.compile' do
3
+ let(:config) { double(template_compilers: { fab: :test_template_compiler }) }
4
+ let(:template_file_path) { '/base_dir/templates/template.fab' }
24
5
 
25
- it "reads from the template file path" do
26
- expect(compile).to eq('{}')
27
- end
28
- end
6
+ class TestTemplateCompiler
7
+ def self.compile(template_file_path); end
29
8
  end
30
9
 
31
- context 'sparkleformation template' do
32
- let(:template_file_path) { '/base_dir/templates/template.rb' }
33
-
34
- before do
35
- allow(SparkleFormation).to receive(:compile).with(template_file_path).and_return({})
36
- end
37
-
38
- it 'compiles with sparkleformation' do
39
- expect(compile).to eq("{\n}")
40
- end
10
+ context 'when a template compiler is registered for the given file type' do
11
+ before {
12
+ StackMaster::TemplateCompiler.register(:test_template_compiler, TestTemplateCompiler)
13
+ }
41
14
 
42
- it 'sets the appropriate sparkle_path' do
43
- compile
44
- expect(SparkleFormation.sparkle_path).to eq File.dirname(template_file_path)
15
+ it 'compiles the template using the relevant template compiler' do
16
+ expect(TestTemplateCompiler).to receive(:compile).with(template_file_path)
17
+ StackMaster::TemplateCompiler.compile(config, template_file_path)
45
18
  end
46
19
  end
47
20
  end
@@ -0,0 +1,29 @@
1
+ RSpec.describe StackMaster::TemplateCompilers::Json do
2
+ describe '.compile' do
3
+ def compile
4
+ described_class.compile(template_file_path)
5
+ end
6
+
7
+ let(:template_file_path) { '/base_dir/templates/template.json' }
8
+
9
+ context "small json template" do
10
+ before do
11
+ allow(File).to receive(:read).with(template_file_path).and_return('{ }')
12
+ end
13
+
14
+ it "reads from the template file path" do
15
+ expect(compile).to eq('{ }')
16
+ end
17
+ end
18
+
19
+ context 'extra big json template' do
20
+ before do
21
+ allow(File).to receive(:read).with(template_file_path).and_return("{ #{' ' * 60000} }")
22
+ end
23
+
24
+ it "reads from the template file path" do
25
+ expect(compile).to eq('{}')
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,22 @@
1
+ RSpec.describe StackMaster::TemplateCompilers::SparkleFormation do
2
+ describe '.compile' do
3
+ def compile
4
+ described_class.compile(template_file_path)
5
+ end
6
+
7
+ before do
8
+ allow(SparkleFormation).to receive(:compile).with(template_file_path).and_return({})
9
+ end
10
+
11
+ let(:template_file_path) { '/base_dir/templates/template.rb' }
12
+
13
+ it 'compiles with sparkleformation' do
14
+ expect(compile).to eq("{\n}")
15
+ end
16
+
17
+ it 'sets the appropriate sparkle_path' do
18
+ compile
19
+ expect(SparkleFormation.sparkle_path).to eq File.dirname(template_file_path)
20
+ end
21
+ end
22
+ end
@@ -3,22 +3,49 @@ require 'stack_master/test_driver/cloud_formation'
3
3
  RSpec.describe StackMaster::TestDriver::CloudFormation do
4
4
  subject(:test_cf_driver) { described_class.new }
5
5
 
6
- it 'adds and gets stacks' do
7
- test_cf_driver.add_stack(stack_id: "1", stack_name: 'stack-1')
8
- test_cf_driver.add_stack(stack_id: "2", stack_name: 'stack-2')
9
- expect(test_cf_driver.describe_stacks.stacks.map(&:stack_id)).to eq(["1", "2"])
6
+ context 'stacks' do
7
+ it 'creates and describes stacks' do
8
+ test_cf_driver.create_stack(stack_id: "1", stack_name: 'stack-1')
9
+ test_cf_driver.create_stack(stack_id: "2", stack_name: 'stack-2')
10
+ expect(test_cf_driver.describe_stacks.stacks.map(&:stack_id)).to eq(["1", "2"])
10
11
 
12
+ end
13
+
14
+ it 'adds and gets stack events' do
15
+ test_cf_driver.add_stack_event(stack_name: 'stack-1', resource_status: "UPDATE_COMPLETE")
16
+ test_cf_driver.add_stack_event(stack_name: 'stack-1', resource_status: "UPDATE_COMPLETE")
17
+ test_cf_driver.add_stack_event(stack_name: 'stack-2')
18
+ expect(test_cf_driver.describe_stack_events(stack_name: 'stack-1').stack_events.map(&:stack_name)).to eq ['stack-1', 'stack-1']
19
+ end
20
+
21
+ it 'sets and gets templates' do
22
+ test_cf_driver.set_template('stack-1', 'blah')
23
+ expect(test_cf_driver.get_template(stack_name: 'stack-1').template_body).to eq 'blah'
24
+ end
11
25
  end
12
26
 
13
- it 'adds and gets stack events' do
14
- test_cf_driver.add_stack_event(stack_name: 'stack-1', resource_status: "UPDATE_COMPLETE")
15
- test_cf_driver.add_stack_event(stack_name: 'stack-1', resource_status: "UPDATE_COMPLETE")
16
- test_cf_driver.add_stack_event(stack_name: 'stack-2')
17
- expect(test_cf_driver.describe_stack_events(stack_name: 'stack-1').stack_events.map(&:stack_name)).to eq ['stack-1', 'stack-1']
27
+ context 'change sets' do
28
+ it 'creates and describes change sets' do
29
+ change_set_id = test_cf_driver.create_change_set(
30
+ stack_name: 'stack-1',
31
+ change_set_name: 'change-set-1',
32
+ template_body: '{}',
33
+ parameters: [{ paramater_key: 'param_1', parameter_value: 'value_1'}]
34
+ ).id
35
+ change_set = test_cf_driver.describe_change_set(change_set_name: change_set_id)
36
+ expect(change_set.change_set_id).to eq change_set_id
37
+ expect(change_set.change_set_name).to eq 'change-set-1'
38
+ change_set = test_cf_driver.describe_change_set(change_set_name: 'change-set-1')
39
+ expect(change_set.change_set_id).to eq change_set_id
40
+ expect(change_set.change_set_name).to eq 'change-set-1'
41
+ end
18
42
  end
19
43
 
20
- it 'sets and gets templates' do
21
- test_cf_driver.set_template('stack-1', 'blah')
22
- expect(test_cf_driver.get_template(stack_name: 'stack-1').template_body).to eq 'blah'
44
+ it 'deletes change sets' do
45
+ change_set_id = test_cf_driver.create_change_set(stack_name: '1', change_set_name: '2').id
46
+ test_cf_driver.delete_change_set(change_set_name: change_set_id)
47
+ expect {
48
+ test_cf_driver.describe_change_set(change_set_name: change_set_id)
49
+ }.to raise_error(KeyError)
23
50
  end
24
51
  end
@@ -1,6 +1,7 @@
1
1
  RSpec.describe StackMaster::Validator do
2
2
 
3
- subject(:validator) { described_class.new(stack_definition) }
3
+ subject(:validator) { described_class.new(stack_definition, config) }
4
+ let(:config) { StackMaster::Config.new({'stacks' => {}}, '/base_dir') }
4
5
  let(:stack_definition) do
5
6
  StackMaster::StackDefinition.new(
6
7
  region: 'us-east-1',
@@ -0,0 +1,81 @@
1
+ RSpec.describe StackMaster do
2
+ describe '.debug' do
3
+ let(:message) { "Doing some stuff" }
4
+
5
+ context 'when debugging' do
6
+ before { allow(StackMaster).to receive(:debug?).and_return(true) }
7
+
8
+ it 'outputs the message to STDERR' do
9
+ expect { StackMaster.debug(message) }.to output(/\[DEBUG\] #{message}/).to_stderr
10
+ end
11
+ end
12
+
13
+ context 'when not debugging' do
14
+ before { allow(StackMaster).to receive(:debug?).and_return(false) }
15
+
16
+ it "doesn't output the message to STDERR" do
17
+ expect { StackMaster.debug(message) }.to output("").to_stderr
18
+ end
19
+ end
20
+ end
21
+
22
+ describe '.debug?' do
23
+ subject { StackMaster.debug? }
24
+
25
+ context "when debug! isn't called" do
26
+ it { should eq false }
27
+ end
28
+
29
+ context 'when debug! is called' do
30
+ before { StackMaster.debug! }
31
+
32
+ it { should eq true }
33
+
34
+ after { StackMaster.instance_variable_set('@debug', false) }
35
+ end
36
+ end
37
+
38
+ describe '.interactive?' do
39
+ subject { StackMaster.interactive? }
40
+
41
+ context "when non_interactive! isn't called" do
42
+ it { should eq true }
43
+ end
44
+
45
+ context 'when non_interactive! is called' do
46
+ before { StackMaster.non_interactive! }
47
+
48
+ it { should eq false }
49
+
50
+ after { StackMaster.instance_variable_set('@non_interactive', false) }
51
+ end
52
+ end
53
+
54
+ describe '.non_interactive?' do
55
+ subject { StackMaster.non_interactive? }
56
+
57
+ context "when non_interactive! isn't called" do
58
+ it { should eq false }
59
+ end
60
+
61
+ context 'when non_interactive! is called' do
62
+ before { StackMaster.non_interactive! }
63
+
64
+ it { should eq true }
65
+
66
+ after { StackMaster.instance_variable_set('@non_interactive', false) }
67
+ end
68
+ end
69
+
70
+ describe '.non_interactive_answer' do
71
+ it 'defaults to y' do
72
+ expect(StackMaster.non_interactive_answer).to eq 'y'
73
+ end
74
+
75
+ it 'can be overridden' do
76
+ StackMaster.non_interactive_answer = 'n'
77
+ expect(StackMaster.non_interactive_answer).to eq 'n'
78
+ StackMaster.instance_variable_set('@non_interactive_answer', 'y')
79
+ end
80
+ end
81
+ end
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.2.0
4
+ version: 0.3.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-03-09 00:00:00.000000000 Z
12
+ date: 2016-03-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -302,6 +302,7 @@ files:
302
302
  - features/validate.feature
303
303
  - lib/stack_master.rb
304
304
  - lib/stack_master/aws_driver/cloud_formation.rb
305
+ - lib/stack_master/change_set.rb
305
306
  - lib/stack_master/cli.rb
306
307
  - lib/stack_master/command.rb
307
308
  - lib/stack_master/commands/apply.rb
@@ -317,6 +318,7 @@ files:
317
318
  - lib/stack_master/commands/validate.rb
318
319
  - lib/stack_master/config.rb
319
320
  - lib/stack_master/ctrl_c.rb
321
+ - lib/stack_master/paged_response_accumulator.rb
320
322
  - lib/stack_master/parameter_loader.rb
321
323
  - lib/stack_master/parameter_resolver.rb
322
324
  - lib/stack_master/parameter_resolvers/latest_ami_by_tags.rb
@@ -337,6 +339,8 @@ files:
337
339
  - lib/stack_master/stack_states.rb
338
340
  - lib/stack_master/stack_status.rb
339
341
  - lib/stack_master/template_compiler.rb
342
+ - lib/stack_master/template_compilers/json.rb
343
+ - lib/stack_master/template_compilers/sparkle_formation.rb
340
344
  - lib/stack_master/test_driver/cloud_formation.rb
341
345
  - lib/stack_master/testing.rb
342
346
  - lib/stack_master/utils.rb
@@ -350,6 +354,7 @@ files:
350
354
  - spec/fixtures/stack_master.yml
351
355
  - spec/fixtures/templates/myapp_vpc.json
352
356
  - spec/spec_helper.rb
357
+ - spec/stack_master/change_set_spec.rb
353
358
  - spec/stack_master/command_spec.rb
354
359
  - spec/stack_master/commands/apply_spec.rb
355
360
  - spec/stack_master/commands/delete_spec.rb
@@ -357,6 +362,7 @@ files:
357
362
  - spec/stack_master/commands/status_spec.rb
358
363
  - spec/stack_master/commands/validate_spec.rb
359
364
  - spec/stack_master/config_spec.rb
365
+ - spec/stack_master/paged_response_accumulator_spec.rb
360
366
  - spec/stack_master/parameter_loader_spec.rb
361
367
  - spec/stack_master/parameter_resolver_spec.rb
362
368
  - spec/stack_master/parameter_resolvers/latest_ami_by_tag_spec.rb
@@ -376,9 +382,12 @@ files:
376
382
  - spec/stack_master/stack_events/streamer_spec.rb
377
383
  - spec/stack_master/stack_spec.rb
378
384
  - spec/stack_master/template_compiler_spec.rb
385
+ - spec/stack_master/template_compilers/json_spec.rb
386
+ - spec/stack_master/template_compilers/sparkle_formation_spec.rb
379
387
  - spec/stack_master/test_driver/cloud_formation_spec.rb
380
388
  - spec/stack_master/utils_spec.rb
381
389
  - spec/stack_master/validator_spec.rb
390
+ - spec/stack_master_spec.rb
382
391
  - stack_master.gemspec
383
392
  - stacktemplates/parameter_region.yml
384
393
  - stacktemplates/parameter_stack_name.yml
@@ -404,7 +413,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
404
413
  version: '0'
405
414
  requirements: []
406
415
  rubyforge_project:
407
- rubygems_version: 2.4.5.1
416
+ rubygems_version: 2.5.1
408
417
  signing_key:
409
418
  specification_version: 4
410
419
  summary: StackMaster is a sure-footed way of creating, updating and keeping track
@@ -427,6 +436,7 @@ test_files:
427
436
  - spec/fixtures/stack_master.yml
428
437
  - spec/fixtures/templates/myapp_vpc.json
429
438
  - spec/spec_helper.rb
439
+ - spec/stack_master/change_set_spec.rb
430
440
  - spec/stack_master/command_spec.rb
431
441
  - spec/stack_master/commands/apply_spec.rb
432
442
  - spec/stack_master/commands/delete_spec.rb
@@ -434,6 +444,7 @@ test_files:
434
444
  - spec/stack_master/commands/status_spec.rb
435
445
  - spec/stack_master/commands/validate_spec.rb
436
446
  - spec/stack_master/config_spec.rb
447
+ - spec/stack_master/paged_response_accumulator_spec.rb
437
448
  - spec/stack_master/parameter_loader_spec.rb
438
449
  - spec/stack_master/parameter_resolver_spec.rb
439
450
  - spec/stack_master/parameter_resolvers/latest_ami_by_tag_spec.rb
@@ -453,6 +464,9 @@ test_files:
453
464
  - spec/stack_master/stack_events/streamer_spec.rb
454
465
  - spec/stack_master/stack_spec.rb
455
466
  - spec/stack_master/template_compiler_spec.rb
467
+ - spec/stack_master/template_compilers/json_spec.rb
468
+ - spec/stack_master/template_compilers/sparkle_formation_spec.rb
456
469
  - spec/stack_master/test_driver/cloud_formation_spec.rb
457
470
  - spec/stack_master/utils_spec.rb
458
471
  - spec/stack_master/validator_spec.rb
472
+ - spec/stack_master_spec.rb