stack_master 1.2.1 → 1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 77c6c6c758e05af556c50439bfdf5dce99720a8deb44f485f0e17bcbd82890a6
4
- data.tar.gz: 8f467f0f94b7e963afac93400d4f2c4152a3cbc6e12dc0949ed8fcfc857f5d9d
3
+ metadata.gz: a80f3544c2f5a4920fcc6bfb3ff09a524549f028cba7a6736b0e761560599d73
4
+ data.tar.gz: 2bee13731638f892921863c688c88e59fd4213e906c73afc1cc2434b3b36b4f7
5
5
  SHA512:
6
- metadata.gz: f32beb39936cbe533bf08949f2a9657f69dc353dda6bf12f9d98d4736a00060d3745baec090d02fb02288d7abf739a923c0d21af6f7d77f27d2540b67971535d
7
- data.tar.gz: 467c51b8edc25e774f20ab3a804b8d44f3559bbde1e9c7817f67935d8a1a4a577d7d4f3181650c48bfa708b11a314213c1ae40e44a546dd03ba882ef225608a1
6
+ metadata.gz: b8b64ef00d94df9456194077d70386143a9722ffd52b04177c38eacd76805bd377a1116f5c29e70d346b730a758c57628404f4ad416210a4d224fc2590e72719
7
+ data.tar.gz: fb8a380e0ac314af64e62e5395ec43a8550e1590080aa698ff150cc4ee6c90b508e521a1a9086e8837e4c3f000cf0d1a9d01e2e582c4a8d365077e8e38fa8b0d
data/README.md CHANGED
@@ -467,6 +467,30 @@ stacks:
467
467
  template: my-stack.rb
468
468
  ```
469
469
 
470
+ ### Loading SparklePacks
471
+
472
+ [SparklePacks](http://www.sparkleformation.io/docs/sparkle_formation/sparkle-packs.html) can be pre-loaded using compiler options. This requires the name of a rubygem to `require` followed by the name of the SparklePack, which is usually the same name as the Gem.
473
+
474
+ ```yaml
475
+ stacks:
476
+ us-east-1
477
+ my-stack:
478
+ template: my-stack-with-dynamic.rb
479
+ compiler_options:
480
+ sparkle_packs:
481
+ - vpc-sparkle-pack
482
+ ```
483
+
484
+ The template can then simply load a dynamic from the sparkle pack like so:
485
+
486
+ ```ruby
487
+ SparkleFormation.new(:my_stack_with_dynamic) do
488
+ dynamic!(:sparkle_pack_dynamic)
489
+ end
490
+ ```
491
+
492
+ Note though that if a dynamic with the same name exists in your `templates/dynamics/` directory it will get loaded since it has higher precedence.
493
+
470
494
  ## Commands
471
495
 
472
496
  ```bash
@@ -65,7 +65,7 @@ module StackMaster
65
65
  parameter_hash = ParameterLoader.load(stack_definition.parameter_files)
66
66
  template_parameters = ParameterResolver.resolve(config, stack_definition, parameter_hash[:template_parameters])
67
67
  compile_time_parameters = ParameterResolver.resolve(config, stack_definition, parameter_hash[:compile_time_parameters])
68
- template_body = TemplateCompiler.compile(config, stack_definition.template_file_path, compile_time_parameters,stack_definition.compiler_options)
68
+ template_body = TemplateCompiler.compile(config, stack_definition.template_file_path, compile_time_parameters, stack_definition.compiler_options)
69
69
  template_format = TemplateUtils.identify_template_format(template_body)
70
70
  stack_policy_body = if stack_definition.stack_policy_file_path
71
71
  File.read(stack_definition.stack_policy_file_path)
@@ -13,12 +13,7 @@ module StackMaster::TemplateCompilers
13
13
  end
14
14
 
15
15
  def self.compile(template_file_path, compile_time_parameters, compiler_options = {})
16
- if compiler_options['sparkle_path']
17
- ::SparkleFormation.sparkle_path = File.expand_path(compiler_options['sparkle_path'])
18
- else
19
- ::SparkleFormation.sparkle_path = File.dirname(template_file_path)
20
- end
21
- sparkle_template = ::SparkleFormation.compile(template_file_path, :sparkle)
16
+ sparkle_template = compile_sparkle_template(template_file_path, compiler_options)
22
17
  definitions = sparkle_template.parameters
23
18
  validate_definitions(definitions)
24
19
  validate_parameters(definitions, compile_time_parameters)
@@ -32,6 +27,33 @@ module StackMaster::TemplateCompilers
32
27
 
33
28
  private
34
29
 
30
+ def self.compile_sparkle_template(template_file_path, compiler_options)
31
+ sparkle_path = compiler_options['sparkle_path'] ?
32
+ File.expand_path(compiler_options['sparkle_path']) : File.dirname(template_file_path)
33
+
34
+ collection = ::SparkleFormation::SparkleCollection.new
35
+ root_pack = ::SparkleFormation::Sparkle.new(
36
+ :root => sparkle_path,
37
+ )
38
+ collection.set_root(root_pack)
39
+ if compiler_options['sparkle_packs']
40
+ compiler_options['sparkle_packs'].each do |pack_name|
41
+ require pack_name
42
+ pack = ::SparkleFormation::SparklePack.new(:name => pack_name)
43
+ collection.add_sparkle(pack)
44
+ end
45
+ end
46
+
47
+ sparkle_template = compile_template_with_sparkle_path(template_file_path, sparkle_path)
48
+ sparkle_template.sparkle.apply(collection)
49
+ sparkle_template
50
+ end
51
+
52
+ def self.compile_template_with_sparkle_path(template_path, sparkle_path)
53
+ ::SparkleFormation.sparkle_path = sparkle_path
54
+ ::SparkleFormation.compile(template_path, :sparkle)
55
+ end
56
+
35
57
  def self.validate_definitions(definitions)
36
58
  CompileTime::DefinitionsValidator.new(definitions).validate
37
59
  end
@@ -1,3 +1,3 @@
1
1
  module StackMaster
2
- VERSION = "1.2.1"
2
+ VERSION = "1.3.0"
3
3
  end
@@ -0,0 +1 @@
1
+ ::SparkleFormation::SparklePack.register!
@@ -0,0 +1,5 @@
1
+ SparkleFormation.dynamic(:my_dynamic) do
2
+ outputs.foo do
3
+ value "bar"
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ SparkleFormation.dynamic(:local_dynamic) do
2
+ outputs.bar do
3
+ value "local_dynamic"
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ SparkleFormation.new(:template_with_dynamic) do
2
+ dynamic!(:local_dynamic)
3
+ end
@@ -0,0 +1,3 @@
1
+ SparkleFormation.new(:template_with_dynamic_from_pack) do
2
+ dynamic!(:my_dynamic)
3
+ end
@@ -15,13 +15,20 @@ RSpec.describe StackMaster::TemplateCompilers::SparkleFormation do
15
15
  let(:parameters_validator) { instance_double(StackMaster::SparkleFormation::CompileTime::ParametersValidator) }
16
16
  let(:state_builder) { instance_double(StackMaster::SparkleFormation::CompileTime::StateBuilder) }
17
17
 
18
+ let(:sparkle_double) { instance_double(::SparkleFormation::SparkleCollection) }
19
+
18
20
  before do
19
21
  allow(::SparkleFormation).to receive(:compile).with(template_file_path, :sparkle).and_return(sparkle_template)
22
+ allow(::SparkleFormation::Sparkle).to receive(:new)
20
23
  allow(StackMaster::SparkleFormation::CompileTime::DefinitionsValidator).to receive(:new).and_return(definitions_validator)
21
24
  allow(StackMaster::SparkleFormation::CompileTime::ParametersValidator).to receive(:new).and_return(parameters_validator)
22
25
  allow(StackMaster::SparkleFormation::CompileTime::StateBuilder).to receive(:new).and_return(state_builder)
26
+ allow(::SparkleFormation::SparkleCollection).to receive(:new).and_return(sparkle_double)
23
27
 
24
28
  allow(sparkle_template).to receive(:parameters).and_return(compile_time_parameter_definitions)
29
+ allow(sparkle_template).to receive(:sparkle).and_return(sparkle_double)
30
+ allow(sparkle_double).to receive(:apply)
31
+ allow(sparkle_double).to receive(:set_root)
25
32
  allow(definitions_validator).to receive(:validate)
26
33
  allow(parameters_validator).to receive(:validate)
27
34
  allow(state_builder).to receive(:build).and_return({})
@@ -78,4 +85,32 @@ RSpec.describe StackMaster::TemplateCompilers::SparkleFormation do
78
85
 
79
86
  end
80
87
 
88
+ describe '.compile with sparkle packs' do
89
+ let(:compile_time_parameters) { {} }
90
+ subject(:compile) { described_class.compile(template_file_path, compile_time_parameters, compiler_options)}
91
+
92
+ context 'with a sparkle_pack loaded' do
93
+ let(:template_file_path) { File.join(File.dirname(__FILE__), "..", "..", "fixtures", "sparkle_pack_integration", "templates", "template_with_dynamic_from_pack.rb")}
94
+ let(:compiler_options) { {"sparkle_packs" => ["my_sparkle_pack"]} }
95
+
96
+ before do
97
+ lib = File.join(File.dirname(__FILE__), "..", "..", "fixtures", "sparkle_pack_integration", "my_sparkle_pack", "lib")
98
+ puts "Loading from #{lib}"
99
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
100
+ end
101
+
102
+ it 'pulls the dynamic from the sparkle pack' do
103
+ expect(compile).to eq(%Q({\n \"Outputs\": {\n \"Foo\": {\n \"Value\": \"bar\"\n }\n }\n}))
104
+ end
105
+ end
106
+
107
+ context 'without a sparkle_pack loaded' do
108
+ let(:template_file_path) { File.join(File.dirname(__FILE__), "..", "..", "fixtures", "sparkle_pack_integration", "templates", "template_with_dynamic.rb")}
109
+ let(:compiler_options) { {} }
110
+
111
+ it 'pulls the dynamic from the local path' do
112
+ expect(compile).to eq(%Q({\n \"Outputs\": {\n \"Bar\": {\n \"Value\": \"local_dynamic\"\n }\n }\n}))
113
+ end
114
+ end
115
+ end
81
116
  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: 1.2.1
4
+ version: 1.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: 2018-02-23 00:00:00.000000000 Z
12
+ date: 2018-03-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -396,6 +396,11 @@ files:
396
396
  - script/buildkite_rspec.sh
397
397
  - spec/fixtures/parameters/myapp_vpc.yml
398
398
  - spec/fixtures/parameters/myapp_vpc_with_secrets.yml
399
+ - spec/fixtures/sparkle_pack_integration/my_sparkle_pack/lib/my_sparkle_pack.rb
400
+ - spec/fixtures/sparkle_pack_integration/my_sparkle_pack/lib/sparkleformation/dynamics/my_dynamic.rb
401
+ - spec/fixtures/sparkle_pack_integration/templates/dynamics/local_dynamic.rb
402
+ - spec/fixtures/sparkle_pack_integration/templates/template_with_dynamic.rb
403
+ - spec/fixtures/sparkle_pack_integration/templates/template_with_dynamic_from_pack.rb
399
404
  - spec/fixtures/stack_master.yml
400
405
  - spec/fixtures/templates/json/valid_myapp_vpc.json
401
406
  - spec/fixtures/templates/myapp_vpc.json
@@ -515,6 +520,11 @@ test_files:
515
520
  - features/validate.feature
516
521
  - spec/fixtures/parameters/myapp_vpc.yml
517
522
  - spec/fixtures/parameters/myapp_vpc_with_secrets.yml
523
+ - spec/fixtures/sparkle_pack_integration/my_sparkle_pack/lib/my_sparkle_pack.rb
524
+ - spec/fixtures/sparkle_pack_integration/my_sparkle_pack/lib/sparkleformation/dynamics/my_dynamic.rb
525
+ - spec/fixtures/sparkle_pack_integration/templates/dynamics/local_dynamic.rb
526
+ - spec/fixtures/sparkle_pack_integration/templates/template_with_dynamic.rb
527
+ - spec/fixtures/sparkle_pack_integration/templates/template_with_dynamic_from_pack.rb
518
528
  - spec/fixtures/stack_master.yml
519
529
  - spec/fixtures/templates/json/valid_myapp_vpc.json
520
530
  - spec/fixtures/templates/myapp_vpc.json