stack_master 2.4.0 → 2.5.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: 676259d50dc1b2634f669f98625e3203f57d39eb77d6e6bf55f0e3b13318174b
4
- data.tar.gz: f759222c480eed85f359c9b6f713f865664f156078a065bd4ad16fcd2db47417
3
+ metadata.gz: eb7f5a24127477671e8e06a522daedc090735825f9911168123d0a7173bf2350
4
+ data.tar.gz: 2301be2eaf943e22f980c07b75686d5303a77e3475c34f9de0eee1e6654a9bf6
5
5
  SHA512:
6
- metadata.gz: 482ccf3ecd0511921404744dd8f081f6f1c17c954918bc8fef5e5d6b2bf4ddebafd74d942c22b858062abb9e38fa238031d0fb310c8a5dbd02482833b6119641
7
- data.tar.gz: f9fdaf391a317ccaa1cad9e527b8bd4b529c7446b6bc13335a31fc8fde7504878f6f9183959742710e9a5b637ad3a783b302f2955f7ed6c2b67ba2876ef6fb62
6
+ metadata.gz: 59a9b3bc3d11e90bd4a01c57b76085bc2b702c3c10feee855d66cf3199225068a9298ff7e750dea12fdd55746e91e5b61f673065ebc48b59f22e1d2344c1c6f9
7
+ data.tar.gz: bdef690c7b5ea589d060f92c8c09a9fb4f491216ed2997a2c37f3c67bea41a598d70039686a17d44efa26d03e8cc17786ce5a424efd9d41f659af370ee98f8ed
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 Steve Hodgkiss
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -53,7 +53,7 @@ Stacks are defined inside a `stack_master.yml` YAML file. When running
53
53
  directory, or that the file is passed in with `--config
54
54
  /path/to/stack_master.yml`. Here's an example configuration file:
55
55
 
56
- ```
56
+ ```yaml
57
57
  region_aliases:
58
58
  production: us-east-1
59
59
  staging: ap-southeast-2
@@ -166,7 +166,7 @@ Parameters are loaded from multiple YAML files, merged from the following lookup
166
166
 
167
167
  A simple parameter file could look like this:
168
168
 
169
- ```
169
+ ```yaml
170
170
  key_name: myapp-us-east-1
171
171
  ```
172
172
 
@@ -177,7 +177,7 @@ allows you to use the [Compile Time Parameters](http://www.sparkleformation.io/d
177
177
 
178
178
  A simple example looks like this
179
179
 
180
- ```
180
+ ```yaml
181
181
  vpc_cidr: 10.0.0.0/16
182
182
  compile_time_parameters:
183
183
  subnet_cidrs:
@@ -286,8 +286,8 @@ db_password:
286
286
  An alternative to the secrets store is accessing 1password secrets using the 1password cli (`op`).
287
287
  You declare a 1password lookup with the following parameters in your parameters file:
288
288
 
289
- ```
290
- parameters/database.yml
289
+ ```yaml
290
+ # parameters/database.yml
291
291
  database_password:
292
292
  one_password:
293
293
  title: production database
@@ -477,7 +477,7 @@ name of the original resolver.
477
477
 
478
478
  When creating a new resolver, one can automatically create the array resolver by adding a `array_resolver` statement
479
479
  in the class definition, with an optional class name if different from the default one.
480
- ```
480
+ ```ruby
481
481
  module StackMaster
482
482
  module ParameterResolvers
483
483
  class MyResolver < Resolver
@@ -488,7 +488,7 @@ module StackMaster
488
488
  end
489
489
  ```
490
490
  In that example, using the array resolver would look like:
491
- ```
491
+ ```yaml
492
492
  my_parameter:
493
493
  my_custom_array_resolver:
494
494
  - value1
@@ -498,13 +498,13 @@ my_parameter:
498
498
  Array parameter values can include nested parameter resolvers.
499
499
 
500
500
  For example, given the following parameter definition:
501
- ```
501
+ ```yaml
502
502
  my_parameter:
503
503
  - stack_output: my-stack/output # value resolves to 'value1'
504
504
  - value2
505
505
  ```
506
506
  The parameter value will resolve to:
507
- ```
507
+ ```yaml
508
508
  my_parameter: 'value1,value2'
509
509
  ```
510
510
 
@@ -520,7 +520,7 @@ ROLE=<%= role %>
520
520
 
521
521
  And used like this in SparkleFormation templates:
522
522
 
523
- ```
523
+ ```ruby
524
524
  # templates/app.rb
525
525
  user_data user_data_file!('app.erb', role: :worker)
526
526
  ```
@@ -533,7 +533,7 @@ my_variable=<%= ref!(:foo) %>
533
533
  my_other_variable=<%= account_id! %>
534
534
  ```
535
535
 
536
- ```
536
+ ```ruby
537
537
  # templates/ecs_task.rb
538
538
  container_definitions array!(
539
539
  -> {
@@ -565,7 +565,7 @@ project-root
565
565
 
566
566
  Your env-1/stack_master.yml files can reference common templates by setting:
567
567
 
568
- ```
568
+ ```yaml
569
569
  template_dir: ../../sparkle/templates
570
570
  stack_defaults:
571
571
  compiler_options:
@@ -46,7 +46,7 @@ module StackMaster
46
46
  c.option '--on-failure ACTION', String, "Action to take on CREATE_FAILURE. Valid Values: [ DO_NOTHING | ROLLBACK | DELETE ]. Default: ROLLBACK\nNote: You cannot use this option with Serverless Application Model (SAM) templates."
47
47
  c.option '--yes-param PARAM_NAME', String, "Auto-approve stack updates when only parameter PARAM_NAME changes"
48
48
  c.action do |args, options|
49
- options.defaults config: default_config_file
49
+ options.default config: default_config_file
50
50
  execute_stacks_command(StackMaster::Commands::Apply, args, options)
51
51
  end
52
52
  end
@@ -56,7 +56,7 @@ module StackMaster
56
56
  c.summary = 'Displays outputs for a stack'
57
57
  c.description = "Displays outputs for a stack"
58
58
  c.action do |args, options|
59
- options.defaults config: default_config_file
59
+ options.default config: default_config_file
60
60
  execute_stacks_command(StackMaster::Commands::Outputs, args, options)
61
61
  end
62
62
  end
@@ -67,7 +67,7 @@ module StackMaster
67
67
  c.description = 'Initialises the expected directory structure and stack_master.yml file'
68
68
  c.option('--overwrite', 'Overwrite existing files')
69
69
  c.action do |args, options|
70
- options.defaults config: default_config_file
70
+ options.default config: default_config_file
71
71
  unless args.size == 2
72
72
  say "Invalid arguments. stack_master init [region] [stack_name]"
73
73
  else
@@ -82,7 +82,7 @@ module StackMaster
82
82
  c.description = "Shows a diff of the proposed stack's template and parameters"
83
83
  c.example 'diff a stack named myapp-vpc in us-east-1', 'stack_master diff us-east-1 myapp-vpc'
84
84
  c.action do |args, options|
85
- options.defaults config: default_config_file
85
+ options.default config: default_config_file
86
86
  execute_stacks_command(StackMaster::Commands::Diff, args, options)
87
87
  end
88
88
  end
@@ -96,7 +96,7 @@ module StackMaster
96
96
  c.option '--all', 'Show all events'
97
97
  c.option '--tail', 'Tail events'
98
98
  c.action do |args, options|
99
- options.defaults config: default_config_file
99
+ options.default config: default_config_file
100
100
  execute_stacks_command(StackMaster::Commands::Events, args, options)
101
101
  end
102
102
  end
@@ -106,7 +106,7 @@ module StackMaster
106
106
  c.summary = "Shows stack resources"
107
107
  c.description = "Shows stack resources"
108
108
  c.action do |args, options|
109
- options.defaults config: default_config_file
109
+ options.default config: default_config_file
110
110
  execute_stacks_command(StackMaster::Commands::Resources, args, options)
111
111
  end
112
112
  end
@@ -116,7 +116,7 @@ module StackMaster
116
116
  c.summary = 'List stack definitions'
117
117
  c.description = 'List stack definitions'
118
118
  c.action do |args, options|
119
- options.defaults config: default_config_file
119
+ options.default config: default_config_file
120
120
  say "Invalid arguments." if args.size > 0
121
121
  config = load_config(options.config)
122
122
  StackMaster::Commands::ListStacks.perform(config, nil, options)
@@ -128,8 +128,9 @@ module StackMaster
128
128
  c.summary = 'Validate a template'
129
129
  c.description = 'Validate a template'
130
130
  c.example 'validate a stack named myapp-vpc in us-east-1', 'stack_master validate us-east-1 myapp-vpc'
131
+ c.option '--[no-]validate-template-parameters', 'Validate template parameters. Default: validate'
131
132
  c.action do |args, options|
132
- options.defaults config: default_config_file
133
+ options.default config: default_config_file, validate_template_parameters: true
133
134
  execute_stacks_command(StackMaster::Commands::Validate, args, options)
134
135
  end
135
136
  end
@@ -140,7 +141,7 @@ module StackMaster
140
141
  c.description = "Runs cfn-lint on the template which would be sent to AWS on apply"
141
142
  c.example 'run cfn-lint on stack myapp-vpc with us-east-1 settings', 'stack_master lint us-east-1 myapp-vpc'
142
143
  c.action do |args, options|
143
- options.defaults config: default_config_file
144
+ options.default config: default_config_file
144
145
  execute_stacks_command(StackMaster::Commands::Lint, args, options)
145
146
  end
146
147
  end
@@ -151,7 +152,7 @@ module StackMaster
151
152
  c.description = "Processes the stack and prints out a compiled version - same we'd send to AWS"
152
153
  c.example 'print compiled stack myapp-vpc with us-east-1 settings', 'stack_master compile us-east-1 myapp-vpc'
153
154
  c.action do |args, options|
154
- options.defaults config: default_config_file
155
+ options.default config: default_config_file
155
156
  execute_stacks_command(StackMaster::Commands::Compile, args, options)
156
157
  end
157
158
  end
@@ -162,7 +163,7 @@ module StackMaster
162
163
  c.description = 'Checks the status of all stacks defined in the stack_master.yml file. Warning this operation can be somewhat slow.'
163
164
  c.example 'description', 'Check the status of all stack definitions'
164
165
  c.action do |args, options|
165
- options.defaults config: default_config_file
166
+ options.default config: default_config_file
166
167
  say "Invalid arguments. stack_master status" and return unless args.size == 0
167
168
  config = load_config(options.config)
168
169
  StackMaster::Commands::Status.perform(config, nil, options)
@@ -175,7 +176,7 @@ module StackMaster
175
176
  c.description = 'Cross references stack_master.yml with the template and parameter directories to identify extra or missing files.'
176
177
  c.example 'description', 'Check for missing or extra files'
177
178
  c.action do |args, options|
178
- options.defaults config: default_config_file
179
+ options.default config: default_config_file
179
180
  say "Invalid arguments. stack_master tidy" and return unless args.size == 0
180
181
  config = load_config(options.config)
181
182
  StackMaster::Commands::Tidy.perform(config, nil, options)
@@ -5,7 +5,7 @@ module StackMaster
5
5
  include Commander::UI
6
6
 
7
7
  def perform
8
- failed unless Validator.valid?(@stack_definition, @config)
8
+ failed unless Validator.valid?(@stack_definition, @config, @options)
9
9
  end
10
10
  end
11
11
  end
@@ -75,6 +75,25 @@ module StackMaster
75
75
  stack_policy_body: stack_policy_body)
76
76
  end
77
77
 
78
+ def self.generate_without_parameters(stack_definition, config)
79
+ parameter_hash = ParameterLoader.load(stack_definition.parameter_files)
80
+ compile_time_parameters = ParameterResolver.resolve(config, stack_definition, parameter_hash[:compile_time_parameters])
81
+ template_body = TemplateCompiler.compile(config, stack_definition.compiler, stack_definition.template_dir, stack_definition.template, compile_time_parameters, stack_definition.compiler_options)
82
+ template_format = TemplateUtils.identify_template_format(template_body)
83
+ stack_policy_body = if stack_definition.stack_policy_file_path
84
+ File.read(stack_definition.stack_policy_file_path)
85
+ end
86
+ new(region: stack_definition.region,
87
+ stack_name: stack_definition.stack_name,
88
+ tags: stack_definition.tags,
89
+ parameters: {},
90
+ template_body: template_body,
91
+ template_format: template_format,
92
+ role_arn: stack_definition.role_arn,
93
+ notification_arns: stack_definition.notification_arns,
94
+ stack_policy_body: stack_policy_body)
95
+ end
96
+
78
97
  def max_template_size(use_s3)
79
98
  return TemplateUtils::MAX_S3_TEMPLATE_SIZE if use_s3
80
99
  TemplateUtils::MAX_TEMPLATE_SIZE
@@ -1,17 +1,18 @@
1
1
  module StackMaster
2
2
  class Validator
3
- def self.valid?(stack_definition, config)
4
- new(stack_definition, config).perform
3
+ def self.valid?(stack_definition, config, options)
4
+ new(stack_definition, config, options).perform
5
5
  end
6
6
 
7
- def initialize(stack_definition, config)
7
+ def initialize(stack_definition, config, options)
8
8
  @stack_definition = stack_definition
9
9
  @config = config
10
+ @options = options
10
11
  end
11
12
 
12
13
  def perform
13
14
  StackMaster.stdout.print "#{@stack_definition.stack_name}: "
14
- if parameter_validator.missing_parameters?
15
+ if validate_template_parameters? && parameter_validator.missing_parameters?
15
16
  StackMaster.stdout.puts "invalid\n#{parameter_validator.error_message}"
16
17
  return false
17
18
  end
@@ -25,12 +26,20 @@ module StackMaster
25
26
 
26
27
  private
27
28
 
29
+ def validate_template_parameters?
30
+ @options.validate_template_parameters
31
+ end
32
+
28
33
  def cf
29
34
  @cf ||= StackMaster.cloud_formation_driver
30
35
  end
31
36
 
32
37
  def stack
33
- @stack ||= Stack.generate(@stack_definition, @config)
38
+ @stack ||= if validate_template_parameters?
39
+ Stack.generate(@stack_definition, @config)
40
+ else
41
+ Stack.generate_without_parameters(@stack_definition, @config)
42
+ end
34
43
  end
35
44
 
36
45
  def parameter_validator
@@ -1,3 +1,3 @@
1
1
  module StackMaster
2
- VERSION = "2.4.0"
2
+ VERSION = "2.5.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: 2.4.0
4
+ version: 2.5.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: 2020-04-03 00:00:00.000000000 Z
12
+ date: 2020-05-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -446,6 +446,7 @@ executables:
446
446
  extensions: []
447
447
  extra_rdoc_files: []
448
448
  files:
449
+ - LICENSE.txt
449
450
  - README.md
450
451
  - bin/stack_master
451
452
  - lib/stack_master.rb
@@ -538,8 +539,8 @@ licenses:
538
539
  metadata:
539
540
  bug_tracker_uri: https://github.com/envato/stack_master/issues
540
541
  changelog_uri: https://github.com/envato/stack_master/blob/master/CHANGELOG.md
541
- documentation_uri: https://www.rubydoc.info/gems/stack_master/2.4.0
542
- source_code_uri: https://github.com/envato/stack_master/tree/v2.4.0
542
+ documentation_uri: https://www.rubydoc.info/gems/stack_master/2.5.0
543
+ source_code_uri: https://github.com/envato/stack_master/tree/v2.5.0
543
544
  post_install_message:
544
545
  rdoc_options: []
545
546
  require_paths: