stack_master 1.5.0 → 1.6.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 (122) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -0
  3. data/lib/stack_master/commands/terminal_helper.rb +14 -1
  4. data/lib/stack_master/parameter_resolvers/secret.rb +7 -2
  5. data/lib/stack_master/version.rb +1 -1
  6. metadata +21 -216
  7. data/.gitignore +0 -18
  8. data/.rspec +0 -2
  9. data/.travis.yml +0 -12
  10. data/CODE_OF_CONDUCT.md +0 -73
  11. data/Gemfile +0 -4
  12. data/LICENSE.txt +0 -22
  13. data/Rakefile +0 -27
  14. data/apply_demo.gif +0 -0
  15. data/example/simple/Gemfile +0 -3
  16. data/example/simple/parameters/myapp_vpc.yml +0 -1
  17. data/example/simple/parameters/myapp_web.yml +0 -2
  18. data/example/simple/stack_master.yml +0 -13
  19. data/example/simple/templates/myapp_vpc.rb +0 -39
  20. data/example/simple/templates/myapp_web.rb +0 -16
  21. data/features/apply.feature +0 -392
  22. data/features/apply_with_compile_time_parameters.feature +0 -93
  23. data/features/apply_with_env_parameters.feature +0 -49
  24. data/features/apply_with_parameter_store_parameters.feature +0 -47
  25. data/features/apply_with_s3.feature +0 -106
  26. data/features/delete.feature +0 -29
  27. data/features/diff.feature +0 -179
  28. data/features/events.feature +0 -33
  29. data/features/init.feature +0 -6
  30. data/features/outputs.feature +0 -45
  31. data/features/region_aliases.feature +0 -62
  32. data/features/resources.feature +0 -42
  33. data/features/stack_defaults.feature +0 -82
  34. data/features/status.feature +0 -118
  35. data/features/step_definitions/parameter_store_steps.rb +0 -14
  36. data/features/step_definitions/stack_steps.rb +0 -71
  37. data/features/support/env.rb +0 -16
  38. data/features/validate.feature +0 -46
  39. data/logo.png +0 -0
  40. data/script/buildkite/bundle.sh +0 -5
  41. data/script/buildkite/clean.sh +0 -3
  42. data/script/buildkite_rspec.sh +0 -27
  43. data/spec/fixtures/parameters/myapp_vpc.yml +0 -1
  44. data/spec/fixtures/parameters/myapp_vpc_with_secrets.yml +0 -3
  45. data/spec/fixtures/sparkle_pack_integration/my_sparkle_pack/lib/my_sparkle_pack.rb +0 -1
  46. data/spec/fixtures/sparkle_pack_integration/my_sparkle_pack/lib/sparkleformation/dynamics/my_dynamic.rb +0 -5
  47. data/spec/fixtures/sparkle_pack_integration/templates/dynamics/local_dynamic.rb +0 -5
  48. data/spec/fixtures/sparkle_pack_integration/templates/template_with_dynamic.rb +0 -3
  49. data/spec/fixtures/sparkle_pack_integration/templates/template_with_dynamic_from_pack.rb +0 -3
  50. data/spec/fixtures/stack_master.yml +0 -49
  51. data/spec/fixtures/templates/json/valid_myapp_vpc.json +0 -53
  52. data/spec/fixtures/templates/myapp_vpc.json +0 -1
  53. data/spec/fixtures/templates/rb/cfndsl/sample.json +0 -28
  54. data/spec/fixtures/templates/rb/cfndsl/sample.rb +0 -16
  55. data/spec/fixtures/templates/yml/valid_myapp_vpc.yml +0 -35
  56. data/spec/fixtures/test/.gitkeep +0 -0
  57. data/spec/spec_helper.rb +0 -102
  58. data/spec/stack_master/aws_driver/s3_spec.rb +0 -130
  59. data/spec/stack_master/change_set_spec.rb +0 -70
  60. data/spec/stack_master/command_spec.rb +0 -66
  61. data/spec/stack_master/commands/apply_spec.rb +0 -259
  62. data/spec/stack_master/commands/delete_spec.rb +0 -40
  63. data/spec/stack_master/commands/init_spec.rb +0 -17
  64. data/spec/stack_master/commands/status_spec.rb +0 -44
  65. data/spec/stack_master/commands/validate_spec.rb +0 -27
  66. data/spec/stack_master/config_spec.rb +0 -153
  67. data/spec/stack_master/paged_response_accumulator_spec.rb +0 -39
  68. data/spec/stack_master/parameter_loader_spec.rb +0 -110
  69. data/spec/stack_master/parameter_resolver_spec.rb +0 -148
  70. data/spec/stack_master/parameter_resolvers/ami_finder_spec.rb +0 -68
  71. data/spec/stack_master/parameter_resolvers/env_spec.rb +0 -35
  72. data/spec/stack_master/parameter_resolvers/latest_ami_by_tags_spec.rb +0 -33
  73. data/spec/stack_master/parameter_resolvers/latest_ami_spec.rb +0 -46
  74. data/spec/stack_master/parameter_resolvers/parameter_store_spec.rb +0 -50
  75. data/spec/stack_master/parameter_resolvers/secret_spec.rb +0 -66
  76. data/spec/stack_master/parameter_resolvers/security_group_spec.rb +0 -19
  77. data/spec/stack_master/parameter_resolvers/security_groups_spec.rb +0 -32
  78. data/spec/stack_master/parameter_resolvers/sns_topic_name_spec.rb +0 -43
  79. data/spec/stack_master/parameter_resolvers/stack_output_spec.rb +0 -127
  80. data/spec/stack_master/prompter_spec.rb +0 -23
  81. data/spec/stack_master/resolver_array_spec.rb +0 -42
  82. data/spec/stack_master/security_group_finder_spec.rb +0 -49
  83. data/spec/stack_master/sns_topic_finder_spec.rb +0 -25
  84. data/spec/stack_master/sparkle_formation/compile_time/allowed_pattern_validator_spec.rb +0 -47
  85. data/spec/stack_master/sparkle_formation/compile_time/allowed_values_validator_spec.rb +0 -47
  86. data/spec/stack_master/sparkle_formation/compile_time/definitions_validator_spec.rb +0 -36
  87. data/spec/stack_master/sparkle_formation/compile_time/empty_validator_spec.rb +0 -47
  88. data/spec/stack_master/sparkle_formation/compile_time/max_length_validator_spec.rb +0 -37
  89. data/spec/stack_master/sparkle_formation/compile_time/max_size_validator_spec.rb +0 -27
  90. data/spec/stack_master/sparkle_formation/compile_time/min_length_validator_spec.rb +0 -36
  91. data/spec/stack_master/sparkle_formation/compile_time/min_size_validator_spec.rb +0 -28
  92. data/spec/stack_master/sparkle_formation/compile_time/number_validator_spec.rb +0 -41
  93. data/spec/stack_master/sparkle_formation/compile_time/parameters_validator_spec.rb +0 -65
  94. data/spec/stack_master/sparkle_formation/compile_time/state_builder_spec.rb +0 -28
  95. data/spec/stack_master/sparkle_formation/compile_time/string_validator_spec.rb +0 -35
  96. data/spec/stack_master/sparkle_formation/compile_time/value_build_spec.rb +0 -52
  97. data/spec/stack_master/sparkle_formation/compile_time/value_validator_factory_spec.rb +0 -40
  98. data/spec/stack_master/sparkle_formation/template_file_spec.rb +0 -147
  99. data/spec/stack_master/stack_definition_spec.rb +0 -70
  100. data/spec/stack_master/stack_differ_spec.rb +0 -46
  101. data/spec/stack_master/stack_events/fetcher_spec.rb +0 -40
  102. data/spec/stack_master/stack_events/presenter_spec.rb +0 -18
  103. data/spec/stack_master/stack_events/streamer_spec.rb +0 -47
  104. data/spec/stack_master/stack_spec.rb +0 -184
  105. data/spec/stack_master/template_compiler_spec.rb +0 -39
  106. data/spec/stack_master/template_compilers/cfndsl_spec.rb +0 -22
  107. data/spec/stack_master/template_compilers/json_spec.rb +0 -32
  108. data/spec/stack_master/template_compilers/sparkle_formation_spec.rb +0 -116
  109. data/spec/stack_master/template_compilers/yaml_spec.rb +0 -20
  110. data/spec/stack_master/template_utils_spec.rb +0 -21
  111. data/spec/stack_master/test_driver/cloud_formation_spec.rb +0 -64
  112. data/spec/stack_master/test_driver/s3_spec.rb +0 -17
  113. data/spec/stack_master/utils_spec.rb +0 -30
  114. data/spec/stack_master/validator_spec.rb +0 -56
  115. data/spec/stack_master_spec.rb +0 -81
  116. data/spec/support/gemfiles/Gemfile.activesupport-4.0.0 +0 -5
  117. data/spec/support/validator_spec.rb +0 -23
  118. data/stack_master.gemspec +0 -46
  119. data/stacktemplates/parameter_region.yml +0 -3
  120. data/stacktemplates/parameter_stack_name.yml +0 -3
  121. data/stacktemplates/stack.json.erb +0 -20
  122. data/stacktemplates/stack_master.yml.erb +0 -6
@@ -1,41 +0,0 @@
1
- RSpec.describe StackMaster::SparkleFormation::CompileTime::NumberValidator do
2
-
3
- describe '#validate' do
4
- let(:name) { 'name' }
5
- let(:error_message) { -> (error, _definition) { "#{name}:#{error} are not Numbers" } }
6
-
7
- context 'numerical validation' do
8
- let(:definition) { {type: :number} }
9
- validate_valid_parameter(1)
10
- validate_valid_parameter(['1'])
11
- validate_invalid_parameter(['1.'], ['1.'])
12
- validate_invalid_parameter(['.1'], ['.1'])
13
- validate_invalid_parameter(['1.1.1'], ['1.1.1'])
14
- validate_invalid_parameter(['1a1'], ['1a1'])
15
- end
16
-
17
- context 'numerical validation with default' do
18
- let(:definition) { {type: :number, default: 1} }
19
- validate_valid_parameter(nil)
20
- end
21
-
22
- context 'numerical validation with multiples' do
23
- let(:definition) { {type: :number, multiple: true} }
24
- validate_valid_parameter('1,2')
25
- validate_valid_parameter([1, 2])
26
- validate_invalid_parameter('1,1.', ['1.'])
27
- validate_invalid_parameter({}, [{}])
28
- end
29
-
30
- context 'numerical validation with multiples and default' do
31
- let(:definition) { {type: :number, multiple: true, default: '1,2'} }
32
- validate_valid_parameter(nil)
33
- end
34
-
35
- context 'string validation' do
36
- let(:definition) { {type: :string} }
37
- validate_valid_parameter('a')
38
- end
39
-
40
- end
41
- end
@@ -1,65 +0,0 @@
1
- RSpec.describe StackMaster::SparkleFormation::CompileTime::ParametersValidator do
2
-
3
- let(:definitions) {{ip: {type: :string}}}
4
- let(:parameters) {{'Ip' => '10.0.0.0'}}
5
- let(:value_validator_factory) {instance_double(StackMaster::SparkleFormation::CompileTime::ValueValidatorFactory)}
6
- let(:value_validator) {instance_double(StackMaster::SparkleFormation::CompileTime::ValueValidator)}
7
-
8
- subject {described_class.new(definitions, parameters)}
9
-
10
- before(:each) do
11
- allow(StackMaster::SparkleFormation::CompileTime::ValueValidatorFactory)
12
- .to receive(:new).and_return(value_validator_factory)
13
- allow(value_validator_factory)
14
- .to receive(:build).and_return([value_validator])
15
- allow(value_validator).to receive(:validate)
16
- allow(value_validator).to receive(:is_valid).and_return(true)
17
- end
18
-
19
- describe '#validate' do
20
-
21
- it('should initialise the ValueValidatorFactory') do
22
- expect(StackMaster::SparkleFormation::CompileTime::ValueValidatorFactory).to receive(:new).with(:ip, {type: :string}, '10.0.0.0')
23
- subject.validate
24
- end
25
-
26
- it('should build validators') do
27
- expect(value_validator_factory).to receive(:build)
28
- subject.validate
29
- end
30
-
31
- it('should call validate on all validators') do
32
- expect(value_validator).to receive(:validate)
33
- subject.validate
34
- end
35
-
36
- context 'when the validators are valid' do
37
-
38
- before(:each) do
39
- allow(value_validator).to receive(:is_valid).and_return(true)
40
- end
41
-
42
- it('should not raise any error') do
43
- expect{subject.validate}.to_not raise_error
44
- end
45
-
46
- end
47
-
48
- context 'when the validators are invalid' do
49
-
50
- let(:error){'error'}
51
-
52
- before(:each) do
53
- allow(value_validator).to receive(:is_valid).and_return(false)
54
- allow(value_validator).to receive(:error).and_return(error)
55
- end
56
-
57
- it('should raise an error') do
58
- expect {subject.validate}.to raise_error(ArgumentError, "Invalid compile time parameter: #{error}")
59
- end
60
-
61
- end
62
-
63
- end
64
-
65
- end
@@ -1,28 +0,0 @@
1
- RSpec.describe StackMaster::SparkleFormation::CompileTime::StateBuilder do
2
-
3
- let(:definitions) {{ip: {type: :string}, size: {type: :number}}}
4
- let(:ip) {'10.0.0.0'}
5
- let(:size) {nil}
6
- let(:parameters) {{'Ip' => ip}}
7
- let(:ip_builder) {instance_double(StackMaster::SparkleFormation::CompileTime::ValueBuilder)}
8
- let(:size_builder) {instance_double(StackMaster::SparkleFormation::CompileTime::ValueBuilder)}
9
-
10
- subject {described_class.new(definitions, parameters)}
11
-
12
- before(:each) do
13
- allow(StackMaster::SparkleFormation::CompileTime::ValueBuilder).to receive(:new).with({type: :string}, ip).and_return(ip_builder)
14
- allow(StackMaster::SparkleFormation::CompileTime::ValueBuilder).to receive(:new).with({type: :number}, size).and_return(size_builder)
15
- allow(ip_builder).to receive(:build).and_return(ip)
16
- allow(size_builder).to receive(:build).and_return(size)
17
- end
18
-
19
- describe '#build' do
20
-
21
- it 'should create state' do
22
- expected = {ip: '10.0.0.0', size: nil}
23
- expect(subject.build).to eq(expected)
24
- end
25
-
26
- end
27
-
28
- end
@@ -1,35 +0,0 @@
1
- RSpec.describe StackMaster::SparkleFormation::CompileTime::StringValidator do
2
-
3
- describe '#validate' do
4
- let(:name) { 'name' }
5
- let(:error_message) { -> (error, _definition) { "#{name}:#{error} are not Strings" } }
6
-
7
- context 'string validation' do
8
- let(:definition) { {type: :string} }
9
- validate_valid_parameter('a')
10
- validate_valid_parameter([''])
11
- validate_invalid_parameter({}, [{}])
12
- end
13
-
14
- context 'string validation default' do
15
- let(:definition) { {type: :string, default: 'a'} }
16
- validate_valid_parameter(nil)
17
- end
18
-
19
- context 'string validation with multiples' do
20
- let(:definition) { {type: :string, multiple: true} }
21
- validate_valid_parameter('a,b')
22
- validate_invalid_parameter([{}], [{}])
23
- end
24
-
25
- context 'string validation with multiples and default' do
26
- let(:definition) { {type: :string, multiple: true, default: 'a,a'} }
27
- validate_valid_parameter(nil)
28
- end
29
-
30
- context 'numerical validation' do
31
- let(:definition) { {type: :number} }
32
- validate_valid_parameter(1)
33
- end
34
- end
35
- end
@@ -1,52 +0,0 @@
1
- RSpec.describe StackMaster::SparkleFormation::CompileTime::ValueBuilder do
2
- scenarios= [
3
- {definition: {type: :string}, parameter: nil, expected: nil},
4
- {definition: {type: :string}, parameter: 'a', expected: 'a'},
5
- {definition: {type: :string}, parameter: ['a'], expected: ['a']},
6
-
7
- {definition: {type: :string, default: 'a'}, parameter: nil, expected: 'a'},
8
-
9
- {definition: {type: :string, multiple: true}, parameter: 'a', expected: ['a']},
10
- {definition: {type: :string, multiple: true}, parameter: 'a,b', expected: ['a', 'b']},
11
- {definition: {type: :string, multiple: true}, parameter: 'a, b', expected: ['a', 'b']},
12
-
13
- {definition: {type: :string, multiple: true, default: 'a'}, parameter: nil, expected: ['a']},
14
-
15
- {definition: {type: :number}, parameter: nil, expected: nil},
16
- {definition: {type: :number}, parameter: 1, expected: 1},
17
- {definition: {type: :number}, parameter: '1', expected: 1},
18
- {definition: {type: :number}, parameter: [1], expected: [1]},
19
- {definition: {type: :number}, parameter: ['1'], expected: [1]},
20
-
21
- {definition: {type: :number, default: '1'}, parameter: nil, expected: 1},
22
-
23
- {definition: {type: :number, multiple: true}, parameter: 1, expected: 1},
24
- {definition: {type: :number, multiple: true}, parameter: '1', expected: [1]},
25
- {definition: {type: :number, multiple: true}, parameter: '1,2', expected: [1,2]},
26
- {definition: {type: :number, multiple: true}, parameter: '1, 2', expected: [1,2]},
27
-
28
- {definition: {type: :number, multiple: true, default: '1'}, parameter: nil, expected: [1]}
29
- ]
30
-
31
- describe '#build' do
32
-
33
- scenarios.each do |scenario|
34
-
35
- description = scenario.clone.tap {|clone| clone.delete(:expected)}
36
- context "when #{description}" do
37
-
38
- definition = scenario[:definition]
39
- parameter = scenario[:parameter]
40
- expected = scenario[:expected]
41
-
42
- it("should have a value of #{expected}") do
43
- expect(described_class.new(definition, parameter).build).to eq expected
44
- end
45
-
46
- end
47
-
48
- end
49
-
50
- end
51
-
52
- end
@@ -1,40 +0,0 @@
1
- RSpec.describe StackMaster::SparkleFormation::CompileTime::ValueValidatorFactory do
2
-
3
- let(:name) {:ip}
4
- let(:definition) {{type: :string}}
5
- let(:parameter) {{'Ip' => '10.0.0.0'}}
6
-
7
- subject {described_class.new(name, definition, parameter)}
8
-
9
- describe '#build' do
10
-
11
- validators = [
12
- StackMaster::SparkleFormation::CompileTime::EmptyValidator,
13
- StackMaster::SparkleFormation::CompileTime::StringValidator,
14
- StackMaster::SparkleFormation::CompileTime::NumberValidator,
15
- StackMaster::SparkleFormation::CompileTime::AllowedValuesValidator,
16
- StackMaster::SparkleFormation::CompileTime::AllowedPatternValidator,
17
- StackMaster::SparkleFormation::CompileTime::MaxLengthValidator,
18
- StackMaster::SparkleFormation::CompileTime::MinLengthValidator,
19
- StackMaster::SparkleFormation::CompileTime::MaxSizeValidator,
20
- StackMaster::SparkleFormation::CompileTime::MinSizeValidator]
21
-
22
- after(:each){subject.build}
23
-
24
- validators.each do |validator|
25
-
26
- it "should build a #{validator} with correct parameters" do
27
- expect(validator).to receive(:new).with(name, definition, parameter)
28
- end
29
-
30
- end
31
-
32
- it 'should build in the correct order' do
33
- validators.each do |validator|
34
- expect(validator).to receive(:new).ordered
35
- end
36
- end
37
-
38
- end
39
-
40
- end
@@ -1,147 +0,0 @@
1
- require 'stack_master/sparkle_formation/template_file'
2
-
3
- RSpec.describe SparkleFormation::SparkleAttribute::Aws, '#user_data_file!' do
4
- let(:user_data) do
5
- <<-EOS
6
- #!/bin/bash
7
-
8
- REGION=<%= region! %>
9
- echo $REGION
10
- <%= ref!(:test) %> <%= ref!(:test_2) %>
11
- <%= has_var?(:test) ? "echo 'yes'" : "echo 'no'" %>
12
- EOS
13
- end
14
- let(:expected_hash) do
15
- {"Fn::Base64"=>{"Fn::Join"=>["", ["#!/bin/bash\n", "\n", "REGION=", {"Ref"=>"AWS::Region"}, "\n", "echo $REGION\n", {"Ref"=>"Test"}, " ", {"Ref"=>"Test2"}, "\n", "echo 'no'", "\n"]]}}
16
- end
17
-
18
- before do
19
- allow(SparkleFormation).to receive(:sparkle_path).and_return('/templates_dir')
20
- klass = Class.new(AttributeStruct)
21
- klass.include(SparkleFormation::SparkleAttribute)
22
- klass.include(SparkleFormation::SparkleAttribute::Aws)
23
- klass.include(SparkleFormation::Utils::TypeCheckers)
24
- @attr = klass.new
25
- @attr._camel_keys = true
26
- end
27
-
28
- it 'reads from the user_data dir in templates' do
29
- expect(File).to receive(:read).with('/templates_dir/user_data/test.erb').and_return(user_data)
30
- @attr.user_data_file!('test.erb')
31
- end
32
-
33
- context 'when the file exists' do
34
- before do
35
- allow(File).to receive(:read).and_return(user_data)
36
- end
37
-
38
- it 'compiles the file and returns a joined version' do
39
- expect(@attr.user_data_file!('test.erb')).to eq expected_hash
40
- end
41
-
42
- context 'with custom vars' do
43
- let(:user_data) do
44
- <<-EOS
45
- #!/bin/bash
46
- <%= my_custom_var %>
47
- <%= has_var?(:my_custom_var) ? "yes" : "no" %>
48
- EOS
49
- end
50
- let(:expected_hash) do
51
- {"Fn::Base64"=>{"Fn::Join"=>["", ["#!/bin/bash\n", "test_var", "\n", "yes", "\n"]]}}
52
- end
53
-
54
- it 'compiles the file and returns a joined version' do
55
- expect(@attr.user_data_file!('test.erb', my_custom_var: :test_var)).to eq expected_hash
56
- expect(@attr.user_data_file!('test.erb', my_custom_var: 'test_var')).to eq expected_hash
57
- end
58
- end
59
- end
60
-
61
- context "when the file doesn't exist" do
62
- before do
63
- allow(File).to receive(:read).and_raise(Errno::ENOENT)
64
- end
65
-
66
- it 'raises a specific error' do
67
- expect {
68
- @attr.user_data_file!('test.erb')
69
- }.to raise_error(StackMaster::SparkleFormation::TemplateFileNotFound)
70
- end
71
- end
72
-
73
- context 'with nested templates' do
74
- let(:inner_user_data) do
75
- <<-EOS
76
- REGION=<%= region! %>
77
- <%= test1 %>
78
- <%= has_var?(:test2) ? 'yes' : 'no' %>
79
- EOS
80
- end
81
-
82
- let(:outer_user_data) do
83
- <<-EOS
84
- #!/bin/bash
85
- <%= test1 %> <%= test2 %>
86
- <%= render 'inner.sh.erb', test1: 'inner1' %>
87
- EOS
88
- end
89
-
90
- let(:expected_hash) do
91
- {"Fn::Base64"=>{"Fn::Join"=>["", [
92
- "#!/bin/bash\n",
93
- "outer1", " ", "outer2", "\n",
94
- "REGION=", {"Ref"=>"AWS::Region"}, "\n",
95
- "inner1", "\n",
96
- "no", "\n", "\n"
97
- ]]}}
98
- end
99
-
100
- before do
101
- allow(File).to receive(:read).and_call_original
102
- allow(File).to receive(:read).with('/templates_dir/user_data/outer.sh.erb').and_return(outer_user_data)
103
- allow(File).to receive(:read).with('/templates_dir/user_data/inner.sh.erb').and_return(inner_user_data)
104
- end
105
-
106
- it 'renders the outer template, including the inner template with its own var context' do
107
- expect(@attr.user_data_file!('outer.sh.erb', test1: :outer1, test2: 'outer2')).to eq expected_hash
108
- end
109
- end
110
- end
111
-
112
- RSpec.describe SparkleFormation::SparkleAttribute::Aws, '#joined_file!' do
113
- let(:config) do
114
- <<-EOS
115
- variable=<%= ref!(:test) %>
116
- EOS
117
- end
118
-
119
- let(:expected_hash) do
120
- {"Fn::Join"=>["", ["variable=", {"Ref"=>"Test"}, "\n"]]}
121
- end
122
-
123
- before do
124
- allow(SparkleFormation).to receive(:sparkle_path).and_return('/templates_dir')
125
- klass = Class.new(AttributeStruct)
126
- klass.include(SparkleFormation::SparkleAttribute)
127
- klass.include(SparkleFormation::SparkleAttribute::Aws)
128
- klass.include(SparkleFormation::Utils::TypeCheckers)
129
- @attr = klass.new
130
- @attr._camel_keys = true
131
- end
132
-
133
- it 'reads from the config dir in templates' do
134
- expect(File).to receive(:read).with('/templates_dir/joined_file/test.erb').and_return(config)
135
- @attr.joined_file!('test.erb')
136
- end
137
-
138
- context 'when the file exists' do
139
- before do
140
- allow(File).to receive(:read).and_return(config)
141
- end
142
-
143
- it 'compiles the file and returns a joined version' do
144
- expect(@attr.joined_file!('test.erb')).to eq expected_hash
145
- end
146
- end
147
- end
@@ -1,70 +0,0 @@
1
- RSpec.describe StackMaster::StackDefinition do
2
- subject(:stack_definition) do
3
- StackMaster::StackDefinition.new(
4
- region: region,
5
- stack_name: stack_name,
6
- template: template,
7
- tags: tags,
8
- base_dir: base_dir)
9
- end
10
-
11
- let(:region) { 'us-east-1' }
12
- let(:stack_name) { 'stack_name' }
13
- let(:template) { 'template.json' }
14
- let(:tags) { {'environment' => 'production'} }
15
- let(:base_dir) { '/base_dir' }
16
-
17
- before do
18
- allow(Dir).to receive(:glob).with(
19
- File.join(base_dir, 'parameters', "#{stack_name}.y*ml")
20
- ).and_return(
21
- [
22
- "/base_dir/parameters/#{stack_name}.yaml",
23
- "/base_dir/parameters/#{stack_name}.yml",
24
- ]
25
- )
26
-
27
- allow(Dir).to receive(:glob).with(
28
- File.join(base_dir, 'parameters', "#{region}", "#{stack_name}.y*ml")
29
- ).and_return(
30
- [
31
- "/base_dir/parameters/#{region}/#{stack_name}.yaml",
32
- "/base_dir/parameters/#{region}/#{stack_name}.yml",
33
- ]
34
- )
35
- end
36
-
37
- it 'has default and region specific parameter file locations' do
38
- expect(stack_definition.parameter_files).to eq([
39
- "/base_dir/parameters/#{stack_name}.yaml",
40
- "/base_dir/parameters/#{stack_name}.yml",
41
- "/base_dir/parameters/#{region}/#{stack_name}.yaml",
42
- "/base_dir/parameters/#{region}/#{stack_name}.yml",
43
- ])
44
- end
45
-
46
- context 'with additional parameter lookup dirs' do
47
- before do
48
- stack_definition.send(:additional_parameter_lookup_dirs=, ['production'])
49
- allow(Dir).to receive(:glob).with(
50
- File.join(base_dir, 'parameters', "production", "#{stack_name}.y*ml")
51
- ).and_return(
52
- [
53
- "/base_dir/parameters/production/#{stack_name}.yaml",
54
- "/base_dir/parameters/production/#{stack_name}.yml",
55
- ]
56
- )
57
- end
58
-
59
- it 'includes a parameter lookup dir for it' do
60
- expect(stack_definition.parameter_files).to eq([
61
- "/base_dir/parameters/#{stack_name}.yaml",
62
- "/base_dir/parameters/#{stack_name}.yml",
63
- "/base_dir/parameters/#{region}/#{stack_name}.yaml",
64
- "/base_dir/parameters/#{region}/#{stack_name}.yml",
65
- "/base_dir/parameters/production/#{stack_name}.yaml",
66
- "/base_dir/parameters/production/#{stack_name}.yml",
67
- ])
68
- end
69
- end
70
- end