stack_master 1.7.2-x64-mingw32 → 1.8.0-x64-mingw32

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
  SHA1:
3
- metadata.gz: e23fe0b1ad02d826d9e845196960ec3eb056534e
4
- data.tar.gz: 02b08ab848383b41d55ec9d628b574dfcde13563
3
+ metadata.gz: 94aab9979b48015c316ca47e533b627a463be5e8
4
+ data.tar.gz: 43e8fa27e5b181c06d40313232452056675f3562
5
5
  SHA512:
6
- metadata.gz: 654de1b6c6e8baed17953896812d6f4562a870e8dcefcb672bd80e1d0f262f24872964368d134d1f8f54f8e92c6efc7fab2186bcddea923d941e03093f77fbf0
7
- data.tar.gz: c15a3ff445d055540b662f11e1e385cff426908cfab675ae14134bfa3dde235028046291ad7365ed9d1c15224b814de4d158c2f495bbd4db6d6a48e8a684b5e6
6
+ metadata.gz: bf4539eb97c8c07ec1238bc94f53250c9401dac6916ba11dff28916bc6dcc94996e7251ec9f77c11108a05f5ccca0c5b447761bbf42f31a95bd0bdb3dc7dca0a
7
+ data.tar.gz: 32299dfe9da9e509a07cc3bc11858f6c44956b66172b96d0fdf0a7c60899ebc912b8de124856f72b13753454d2e5f38353820c809af7b7867ee51e474cb5883a
data/README.md CHANGED
@@ -340,6 +340,15 @@ db_username:
340
340
  env: DB_USERNAME
341
341
  ```
342
342
 
343
+ ### ACM Certificates
344
+
345
+ Find an ACM certificate by domain name:
346
+
347
+ ```yaml
348
+ cert:
349
+ acm_certificate: www.example.com
350
+ ```
351
+
343
352
  ### Custom parameter resolvers
344
353
 
345
354
  New parameter resolvers can be created in a separate gem.
data/lib/stack_master.rb CHANGED
@@ -1,11 +1,12 @@
1
1
  require 'commander'
2
2
  require 'yaml'
3
- require "aws-sdk-cloudformation"
4
- require "aws-sdk-ec2"
5
- require "aws-sdk-s3"
6
- require "aws-sdk-sns"
7
- require "aws-sdk-ssm"
8
- require "colorize"
3
+ require 'aws-sdk-acm'
4
+ require 'aws-sdk-cloudformation'
5
+ require 'aws-sdk-ec2'
6
+ require 'aws-sdk-s3'
7
+ require 'aws-sdk-sns'
8
+ require 'aws-sdk-ssm'
9
+ require 'colorize'
9
10
  require 'active_support/core_ext/string'
10
11
  require 'multi_json'
11
12
 
@@ -54,12 +55,15 @@ module StackMaster
54
55
  autoload :Diff, 'stack_master/commands/diff'
55
56
  autoload :ListStacks, 'stack_master/commands/list_stacks'
56
57
  autoload :Validate, 'stack_master/commands/validate'
58
+ autoload :Lint, 'stack_master/commands/lint'
59
+ autoload :Compile, 'stack_master/commands/compile'
57
60
  autoload :Resources, 'stack_master/commands/resources'
58
61
  autoload :Delete, 'stack_master/commands/delete'
59
62
  autoload :Status, 'stack_master/commands/status'
60
63
  end
61
64
 
62
65
  module ParameterResolvers
66
+ autoload :AcmCertificate, 'stack_master/parameter_resolvers/acm_certificate'
63
67
  autoload :AmiFinder, 'stack_master/parameter_resolvers/ami_finder'
64
68
  autoload :StackOutput, 'stack_master/parameter_resolvers/stack_output'
65
69
  autoload :Secret, 'stack_master/parameter_resolvers/secret'
@@ -131,6 +131,28 @@ module StackMaster
131
131
  end
132
132
  end
133
133
 
134
+ command :lint do |c|
135
+ c.syntax = 'stack_master lint [region_or_alias] [stack_name]'
136
+ c.summary = "Check the stack definition locally"
137
+ c.description = "Runs cfn-lint on the template which would be sent to AWS on apply"
138
+ c.example 'run cfn-lint on stack myapp-vpc with us-east-1 settings', 'stack_master lint us-east-1 myapp-vpc'
139
+ c.action do |args, options|
140
+ options.defaults config: default_config_file
141
+ execute_stacks_command(StackMaster::Commands::Lint, args, options)
142
+ end
143
+ end
144
+
145
+ command :compile do |c|
146
+ c.syntax = 'stack_master compile [region_or_alias] [stack_name]'
147
+ c.summary = "Print the compiled version of a given stack"
148
+ c.description = "Processes the stack and prints out a compiled version - same we'd send to AWS"
149
+ c.example 'print compiled stack myapp-vpc with us-east-1 settings', 'stack_master compile us-east-1 myapp-vpc'
150
+ c.action do |args, options|
151
+ options.defaults config: default_config_file
152
+ execute_stacks_command(StackMaster::Commands::Compile, args, options)
153
+ end
154
+ end
155
+
134
156
  command :status do |c|
135
157
  c.syntax = 'stack_master status'
136
158
  c.summary = 'Check the current status stacks.'
@@ -0,0 +1,27 @@
1
+ module StackMaster
2
+ module Commands
3
+ class Compile
4
+ include Command
5
+ include Commander::UI
6
+
7
+ def initialize(config, stack_definition, options = {})
8
+ @config = config
9
+ @stack_definition = stack_definition
10
+ end
11
+
12
+ def perform
13
+ puts(proposed_stack.template_body)
14
+ end
15
+
16
+ private
17
+
18
+ def stack_definition
19
+ @stack_definition ||= @config.find_stack(@region, @stack_name)
20
+ end
21
+
22
+ def proposed_stack
23
+ @proposed_stack ||= Stack.generate(stack_definition, @config)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,42 @@
1
+ require 'tempfile'
2
+
3
+ module StackMaster
4
+ module Commands
5
+ class Lint
6
+ include Command
7
+ include Commander::UI
8
+
9
+ def initialize(config, stack_definition, options = {})
10
+ @config = config
11
+ @stack_definition = stack_definition
12
+ end
13
+
14
+ def perform
15
+ unless cfn_lint_available
16
+ failed! "Failed to run cfn-lint, do you have it installed and available in $PATH?"
17
+ end
18
+
19
+ Tempfile.open(['stack', ".#{proposed_stack.template_format}"]) do |f|
20
+ f.write(proposed_stack.template_body)
21
+ f.flush
22
+ system('cfn-lint', f.path)
23
+ puts "cfn-lint run complete"
24
+ end
25
+ end
26
+
27
+ private
28
+
29
+ def stack_definition
30
+ @stack_definition ||= @config.find_stack(@region, @stack_name)
31
+ end
32
+
33
+ def proposed_stack
34
+ @proposed_stack ||= Stack.generate(stack_definition, @config)
35
+ end
36
+
37
+ def cfn_lint_available
38
+ !system('cfn-lint', '--version').nil?
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,37 @@
1
+ module StackMaster
2
+ module ParameterResolvers
3
+ class AcmCertificate < Resolver
4
+ CertificateNotFound = Class.new(StandardError)
5
+
6
+ def initialize(config, stack_definition)
7
+ @config = config
8
+ @stack_definition = stack_definition
9
+ end
10
+
11
+ def resolve(domain_name)
12
+ cert_arn = find_cert_arn_by_domain_name(domain_name)
13
+ raise CertificateNotFound, "Could not find certificate #{domain_name} in #{@stack_definition.region}" unless cert_arn
14
+ cert_arn
15
+ end
16
+
17
+ private
18
+
19
+ def all_certs
20
+ certs = []
21
+ next_token = nil
22
+ client = Aws::ACM::Client.new(region: @stack_definition.region)
23
+ loop do
24
+ resp = client.list_certificates(certificate_statuses: ['ISSUED'], next_token: next_token)
25
+ certs << resp.certificate_summary_list
26
+ next_token = resp.next_token
27
+ break if next_token.nil?
28
+ end
29
+ certs.flatten
30
+ end
31
+
32
+ def find_cert_arn_by_domain_name(domain_name)
33
+ all_certs.map { |c| c.certificate_arn if c.domain_name == domain_name }.compact.first
34
+ end
35
+ end
36
+ end
37
+ end
@@ -1,3 +1,3 @@
1
1
  module StackMaster
2
- VERSION = "1.7.2"
2
+ VERSION = "1.8.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.7.2
4
+ version: 1.8.0
5
5
  platform: x64-mingw32
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-07-05 00:00:00.000000000 Z
12
+ date: 2018-07-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -151,6 +151,20 @@ dependencies:
151
151
  - - ">="
152
152
  - !ruby/object:Gem::Version
153
153
  version: '0'
154
+ - !ruby/object:Gem::Dependency
155
+ name: aws-sdk-acm
156
+ requirement: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - "~>"
159
+ - !ruby/object:Gem::Version
160
+ version: '1'
161
+ type: :runtime
162
+ prerelease: false
163
+ version_requirements: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - "~>"
166
+ - !ruby/object:Gem::Version
167
+ version: '1'
154
168
  - !ruby/object:Gem::Dependency
155
169
  name: aws-sdk-cloudformation
156
170
  requirement: !ruby/object:Gem::Requirement
@@ -379,10 +393,12 @@ files:
379
393
  - lib/stack_master/cli.rb
380
394
  - lib/stack_master/command.rb
381
395
  - lib/stack_master/commands/apply.rb
396
+ - lib/stack_master/commands/compile.rb
382
397
  - lib/stack_master/commands/delete.rb
383
398
  - lib/stack_master/commands/diff.rb
384
399
  - lib/stack_master/commands/events.rb
385
400
  - lib/stack_master/commands/init.rb
401
+ - lib/stack_master/commands/lint.rb
386
402
  - lib/stack_master/commands/list_stacks.rb
387
403
  - lib/stack_master/commands/outputs.rb
388
404
  - lib/stack_master/commands/resources.rb
@@ -394,6 +410,7 @@ files:
394
410
  - lib/stack_master/paged_response_accumulator.rb
395
411
  - lib/stack_master/parameter_loader.rb
396
412
  - lib/stack_master/parameter_resolver.rb
413
+ - lib/stack_master/parameter_resolvers/acm_certificate.rb
397
414
  - lib/stack_master/parameter_resolvers/ami_finder.rb
398
415
  - lib/stack_master/parameter_resolvers/env.rb
399
416
  - lib/stack_master/parameter_resolvers/latest_ami.rb