stack_master 1.16.0 → 1.17.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f64b125495590bdb3890f184b5ecb67e2b57d13d7e8cc023fb785a543e825e2c
4
- data.tar.gz: 0f892956233a734941107967938357400c131d3280e687a5839531aa5dbaa275
3
+ metadata.gz: 6ae4eccac3702f32e8c22434fb946e19d3d29a76789a68e66a18c292924c3138
4
+ data.tar.gz: 13f4ae0b29aaa518a584d277e9329c16860725bc0b119be5e124d6a7c47ddefe
5
5
  SHA512:
6
- metadata.gz: d8fdc2f1e629e1620ef5144e5990706ff0e89f390df4cf3880671676bd6ef26091011d87adcdd55e21987311ff6c0cb8724dff58353e352e3e6531c8d915cf73
7
- data.tar.gz: 026efc1dec847d78400ea70bf087d52a2601738145790b05d70cc77b6dbd5fde337872c6226fcacf52b5bd4c91f633755ff67147ff48d820ac1ed5626f8ea99f
6
+ metadata.gz: 18a069c5c2df3f5cece5a647dc9239926440c97aea6e2f28999bd0f725e0fca3da3144d26b21cd3dd62ac52f0208606be9423f642b85981f6de9f212f5dfc297
7
+ data.tar.gz: bfb4d57cad111a3a8f4519c19ac2aa6f3ece8e3d2fd4125f97cb2fc28fe2897b016d2da89f8aa92949c9b690c2ebb6cd060035664da673da8064a69781617059
data/README.md CHANGED
@@ -602,10 +602,12 @@ we can use stack defined as follows:
602
602
  stacks:
603
603
  us-east-1:
604
604
  my-stack:
605
- sparkle_pack_template: template_name
605
+ template: template_name
606
+ compiler: sparkle_formation
606
607
  compiler_options:
607
608
  sparkle_packs:
608
609
  - some-sparkle-pack
610
+ sparkle_pack_template: true
609
611
  ```
610
612
 
611
613
  ## Allowed accounts
@@ -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_dir, stack_definition.template_file_path, stack_definition.sparkle_pack_template, compile_time_parameters, stack_definition.compiler_options)
68
+ template_body = TemplateCompiler.compile(config, stack_definition.compiler, stack_definition.template_dir, stack_definition.template, 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)
@@ -3,7 +3,6 @@ module StackMaster
3
3
  attr_accessor :region,
4
4
  :stack_name,
5
5
  :template,
6
- :sparkle_pack_template,
7
6
  :tags,
8
7
  :role_arn,
9
8
  :allowed_accounts,
@@ -20,6 +19,8 @@ module StackMaster
20
19
  :files,
21
20
  :compiler_options
22
21
 
22
+ attr_reader :compiler
23
+
23
24
  include Utils::Initializable
24
25
 
25
26
  def initialize(attributes = {})
@@ -30,6 +31,7 @@ module StackMaster
30
31
  @files = []
31
32
  @allowed_accounts = nil
32
33
  @ejson_file_kms = true
34
+ @compiler = nil
33
35
  super
34
36
  @template_dir ||= File.join(@base_dir, 'templates')
35
37
  @allowed_accounts = Array(@allowed_accounts)
@@ -40,7 +42,6 @@ module StackMaster
40
42
  @region == other.region &&
41
43
  @stack_name == other.stack_name &&
42
44
  @template == other.template &&
43
- @sparkle_pack_template == other.sparkle_pack_template &&
44
45
  @tags == other.tags &&
45
46
  @role_arn == other.role_arn &&
46
47
  @allowed_accounts == other.allowed_accounts &&
@@ -53,9 +54,14 @@ module StackMaster
53
54
  @stack_policy_file == other.stack_policy_file &&
54
55
  @additional_parameter_lookup_dirs == other.additional_parameter_lookup_dirs &&
55
56
  @s3 == other.s3 &&
57
+ @compiler == other.compiler &&
56
58
  @compiler_options == other.compiler_options
57
59
  end
58
60
 
61
+ def compiler=(compiler)
62
+ @compiler = compiler.&to_sym
63
+ end
64
+
59
65
  def template_file_path
60
66
  return unless template
61
67
  File.expand_path(File.join(template_dir, template))
@@ -2,12 +2,16 @@ module StackMaster
2
2
  class TemplateCompiler
3
3
  TemplateCompilationFailed = Class.new(RuntimeError)
4
4
 
5
- def self.compile(config, template_dir, template_file_path, sparkle_pack_template, compile_time_parameters, compiler_options = {})
6
- compiler = template_compiler_for_stack(template_file_path, sparkle_pack_template, config)
5
+ def self.compile(config, template_compiler, template_dir, template, compile_time_parameters, compiler_options = {})
6
+ compiler = if template_compiler
7
+ find_compiler(template_compiler)
8
+ else
9
+ template_compiler_for_stack(template, config)
10
+ end
7
11
  compiler.require_dependencies
8
- compiler.compile(template_dir, template_file_path, sparkle_pack_template, compile_time_parameters, compiler_options)
12
+ compiler.compile(template_dir, template, compile_time_parameters, compiler_options)
9
13
  rescue StandardError => e
10
- raise TemplateCompilationFailed.new("Failed to compile #{template_file_path || sparkle_pack_template} with error #{e}.\n#{e.backtrace}")
14
+ raise TemplateCompilationFailed.new("Failed to compile #{template} with error #{e}.\n#{e.backtrace}")
11
15
  end
12
16
 
13
17
  def self.register(name, klass)
@@ -16,20 +20,22 @@ module StackMaster
16
20
  end
17
21
 
18
22
  # private
19
- def self.template_compiler_for_stack(template_file_path, sparkle_pack_template, config)
20
- ext = if sparkle_pack_template
21
- :rb
22
- else
23
- file_ext(template_file_path)
24
- end
23
+ def self.template_compiler_for_stack(template, config)
24
+ ext = file_ext(template)
25
25
  compiler_name = config.template_compilers.fetch(ext)
26
- @compilers.fetch(compiler_name)
26
+ find_compiler(compiler_name)
27
27
  end
28
28
  private_class_method :template_compiler_for_stack
29
29
 
30
- def self.file_ext(template_file_path)
31
- File.extname(template_file_path).gsub('.', '').to_sym
30
+ def self.file_ext(template)
31
+ File.extname(template).gsub('.', '').to_sym
32
32
  end
33
33
  private_class_method :file_ext
34
+
35
+ def self.find_compiler(name)
36
+ @compilers.fetch(name.to_sym) do
37
+ raise "Unknown compiler #{name.inspect}"
38
+ end
39
+ end
34
40
  end
35
41
  end
@@ -4,10 +4,11 @@ module StackMaster::TemplateCompilers
4
4
  require 'cfndsl'
5
5
  end
6
6
 
7
- def self.compile(_template_dir, template_file_path, _sparkle_pack_template, compile_time_parameters, _compiler_options = {})
7
+ def self.compile(template_dir, template, compile_time_parameters, _compiler_options = {})
8
8
  CfnDsl.disable_binding
9
9
  CfnDsl::ExternalParameters.defaults.clear # Ensure there's no leakage across invocations
10
10
  CfnDsl::ExternalParameters.defaults(compile_time_parameters.symbolize_keys)
11
+ template_file_path = File.join(template_dir, template)
11
12
  ::CfnDsl.eval_file_with_extras(template_file_path).to_json
12
13
  end
13
14
 
@@ -7,7 +7,8 @@ module StackMaster::TemplateCompilers
7
7
  require 'json'
8
8
  end
9
9
 
10
- def self.compile(_template_dir, template_file_path, _sparkle_pack_template, _compile_time_parameters, _compiler_options = {})
10
+ def self.compile(template_dir, template, _compile_time_parameters, _compiler_options = {})
11
+ template_file_path = File.join(template_dir, template)
11
12
  template_body = File.read(template_file_path)
12
13
  if template_body.size > MAX_TEMPLATE_SIZE
13
14
  # Parse the json and rewrite compressed
@@ -12,8 +12,8 @@ module StackMaster::TemplateCompilers
12
12
  require 'stack_master/sparkle_formation/template_file'
13
13
  end
14
14
 
15
- def self.compile(template_dir, template_file_path, sparkle_pack_template, compile_time_parameters, compiler_options = {})
16
- sparkle_template = compile_sparkle_template(template_dir, template_file_path, sparkle_pack_template, compiler_options)
15
+ def self.compile(template_dir, template, compile_time_parameters, compiler_options = {})
16
+ sparkle_template = compile_sparkle_template(template_dir, template, compiler_options)
17
17
  definitions = sparkle_template.parameters
18
18
  validate_definitions(definitions)
19
19
  validate_parameters(definitions, compile_time_parameters)
@@ -27,7 +27,7 @@ module StackMaster::TemplateCompilers
27
27
 
28
28
  private
29
29
 
30
- def self.compile_sparkle_template(template_dir, template_file_path, sparkle_pack_template, compiler_options)
30
+ def self.compile_sparkle_template(template_dir, template, compiler_options)
31
31
  sparkle_path = if compiler_options['sparkle_path']
32
32
  File.expand_path(compiler_options['sparkle_path'])
33
33
  else
@@ -47,9 +47,11 @@ module StackMaster::TemplateCompilers
47
47
  end
48
48
  end
49
49
 
50
- if sparkle_pack_template
51
- raise ArgumentError.new("Template #{sparkle_pack_template} not found in any sparkle pack") unless collection.templates['aws'].include? sparkle_pack_template
52
- template_file_path = collection.templates['aws'][sparkle_pack_template].top['path']
50
+ if compiler_options['sparkle_pack_template']
51
+ raise ArgumentError.new("Template #{template.inspect} not found in any sparkle pack") unless collection.templates['aws'].include? template
52
+ template_file_path = collection.templates['aws'][template].top['path']
53
+ else
54
+ template_file_path = File.join(template_dir, template)
53
55
  end
54
56
 
55
57
  sparkle_template = compile_template_with_sparkle_path(template_file_path, sparkle_path)
@@ -5,7 +5,8 @@ module StackMaster::TemplateCompilers
5
5
  require 'json'
6
6
  end
7
7
 
8
- def self.compile(_template_dir, template_file_path, _sparkle_pack_template, _compile_time_parameters, _compiler_options = {})
8
+ def self.compile(template_dir, template, _compile_time_parameters, _compiler_options = {})
9
+ template_file_path = File.join(template_dir, template)
9
10
  File.read(template_file_path)
10
11
  end
11
12
 
@@ -14,7 +14,7 @@ module StackMaster
14
14
  compile_time_parameters = ParameterResolver.resolve(@config, @stack_definition, parameter_hash[:compile_time_parameters])
15
15
 
16
16
  StackMaster.stdout.print "#{@stack_definition.stack_name}: "
17
- template_body = TemplateCompiler.compile(@config, @stack_definition.template_dir, @stack_definition.template_file_path, @stack_definition.sparkle_pack_template, compile_time_parameters, @stack_definition.compiler_options)
17
+ template_body = TemplateCompiler.compile(@config, @stack_definition.compiler, @stack_definition.template_dir, @stack_definition.template, compile_time_parameters, @stack_definition.compiler_options)
18
18
  cf.validate_template(template_body: TemplateUtils.maybe_compressed_template_body(template_body))
19
19
  StackMaster.stdout.puts "valid"
20
20
  true
@@ -28,6 +28,5 @@ module StackMaster
28
28
  def cf
29
29
  @cf ||= StackMaster.cloud_formation_driver
30
30
  end
31
-
32
31
  end
33
32
  end
@@ -1,3 +1,3 @@
1
1
  module StackMaster
2
- VERSION = "1.16.0"
2
+ VERSION = "1.17.0"
3
3
  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.16.0
4
+ version: 1.17.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: 2019-08-16 00:00:00.000000000 Z
12
+ date: 2019-08-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -529,8 +529,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
529
529
  - !ruby/object:Gem::Version
530
530
  version: '0'
531
531
  requirements: []
532
- rubyforge_project:
533
- rubygems_version: 2.7.6.2
532
+ rubygems_version: 3.0.3
534
533
  signing_key:
535
534
  specification_version: 4
536
535
  summary: StackMaster is a sure-footed way of creating, updating and keeping track