stack_master 2.17.1 → 2.18.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 (55) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/bin/stack_master +3 -5
  4. data/lib/stack_master/aws_driver/cloud_formation.rb +4 -4
  5. data/lib/stack_master/aws_driver/s3.rb +7 -7
  6. data/lib/stack_master/change_set.rb +7 -11
  7. data/lib/stack_master/cli.rb +32 -26
  8. data/lib/stack_master/command.rb +1 -5
  9. data/lib/stack_master/commands/apply.rb +34 -19
  10. data/lib/stack_master/commands/delete.rb +4 -4
  11. data/lib/stack_master/commands/drift.rb +5 -9
  12. data/lib/stack_master/commands/events.rb +4 -6
  13. data/lib/stack_master/commands/init.rb +14 -14
  14. data/lib/stack_master/commands/lint.rb +1 -1
  15. data/lib/stack_master/commands/list_stacks.rb +1 -1
  16. data/lib/stack_master/commands/outputs.rb +1 -1
  17. data/lib/stack_master/commands/status.rb +4 -4
  18. data/lib/stack_master/commands/terminal_helper.rb +3 -3
  19. data/lib/stack_master/commands/tidy.rb +14 -16
  20. data/lib/stack_master/config.rb +8 -11
  21. data/lib/stack_master/diff.rb +2 -2
  22. data/lib/stack_master/parameter_loader.rb +1 -2
  23. data/lib/stack_master/parameter_resolver.rb +14 -17
  24. data/lib/stack_master/parameter_resolvers/ami_finder.rb +1 -2
  25. data/lib/stack_master/parameter_resolvers/ejson.rb +4 -4
  26. data/lib/stack_master/parameter_resolvers/latest_ami_by_tags.rb +1 -1
  27. data/lib/stack_master/parameter_resolvers/latest_container.rb +3 -3
  28. data/lib/stack_master/parameter_resolvers/one_password.rb +5 -5
  29. data/lib/stack_master/parameter_resolvers/sso_group_id.rb +1 -1
  30. data/lib/stack_master/parameter_resolvers/stack_output.rb +7 -11
  31. data/lib/stack_master/parameter_validator.rb +1 -5
  32. data/lib/stack_master/prompter.rb +1 -1
  33. data/lib/stack_master/resolver_array.rb +2 -2
  34. data/lib/stack_master/role_assumer.rb +1 -1
  35. data/lib/stack_master/security_group_finder.rb +4 -4
  36. data/lib/stack_master/sns_topic_finder.rb +1 -1
  37. data/lib/stack_master/sparkle_formation/compile_time/allowed_pattern_validator.rb +1 -1
  38. data/lib/stack_master/sparkle_formation/compile_time/definitions_validator.rb +1 -1
  39. data/lib/stack_master/sparkle_formation/compile_time/value_builder.rb +7 -7
  40. data/lib/stack_master/sparkle_formation/compile_time/value_validator.rb +1 -3
  41. data/lib/stack_master/sparkle_formation/template_file.rb +2 -2
  42. data/lib/stack_master/sso_group_id_finder.rb +3 -3
  43. data/lib/stack_master/stack.rb +6 -4
  44. data/lib/stack_master/stack_definition.rb +3 -4
  45. data/lib/stack_master/stack_differ.rb +32 -9
  46. data/lib/stack_master/template_compilers/json.rb +1 -1
  47. data/lib/stack_master/template_compilers/sparkle_formation.rb +2 -2
  48. data/lib/stack_master/template_utils.rb +2 -2
  49. data/lib/stack_master/test_driver/cloud_formation.rb +11 -3
  50. data/lib/stack_master/test_driver/s3.rb +2 -3
  51. data/lib/stack_master/utils.rb +3 -6
  52. data/lib/stack_master/validator.rb +1 -1
  53. data/lib/stack_master/version.rb +1 -1
  54. data/lib/stack_master.rb +1 -1
  55. metadata +6 -5
@@ -1,5 +1,5 @@
1
- require "diffy"
2
- require "hashdiff"
1
+ require 'diffy'
2
+ require 'hashdiff'
3
3
 
4
4
  module StackMaster
5
5
  class StackDiffer
@@ -34,7 +34,7 @@ module StackMaster
34
34
  params = @proposed_stack.parameters_with_defaults
35
35
  if @current_stack
36
36
  noecho_keys.each do |key|
37
- params[key] = "****"
37
+ params[key] = '****'
38
38
  end
39
39
  end
40
40
  YAML.dump(sort_params(params))
@@ -61,20 +61,43 @@ module StackMaster
61
61
  after: proposed_parameters)
62
62
  end
63
63
 
64
+ def tags_different?
65
+ tags_diff.different?
66
+ end
67
+
68
+ def tags_diff
69
+ @tags_diff ||= Diff.new(name: 'Tags',
70
+ before: current_tags,
71
+ after: proposed_tags)
72
+ end
73
+
74
+ def current_tags
75
+ tags_hash = @current_stack&.tags
76
+ return '' if tags_hash.nil? || tags_hash.empty?
77
+
78
+ YAML.dump(sort_params(tags_hash))
79
+ end
80
+
81
+ def proposed_tags
82
+ tags_hash = @proposed_stack.tags
83
+ return '' if tags_hash.nil? || tags_hash.empty?
84
+
85
+ YAML.dump(sort_params(tags_hash))
86
+ end
87
+
64
88
  def output_diff
65
89
  body_diff.display
66
90
  parameters_diff.display
91
+ tags_diff.display
67
92
 
68
- unless noecho_keys.empty?
69
- StackMaster.stdout.puts " * can not tell if NoEcho parameters are different."
70
- end
71
- StackMaster.stdout.puts "No stack found" if @current_stack.nil?
93
+ StackMaster.stdout.puts ' * can not tell if NoEcho parameters are different.' unless noecho_keys.empty?
94
+ StackMaster.stdout.puts 'No stack found' if @current_stack.nil?
72
95
  end
73
96
 
74
97
  def noecho_keys
75
98
  if @current_stack
76
99
  @current_stack.parameters_with_defaults.select do |key, value|
77
- value == "****"
100
+ value == '****'
78
101
  end.keys
79
102
  else
80
103
  []
@@ -88,7 +111,7 @@ module StackMaster
88
111
  return false if differences.count != 1
89
112
 
90
113
  diff = differences[0]
91
- diff[0] == "~" && diff[1] == param_name
114
+ diff[0] == '~' && diff[1] == param_name
92
115
  end
93
116
 
94
117
  private
@@ -1,6 +1,6 @@
1
1
  module StackMaster::TemplateCompilers
2
2
  class Json
3
- MAX_TEMPLATE_SIZE = 51200
3
+ MAX_TEMPLATE_SIZE = 51_200
4
4
  private_constant :MAX_TEMPLATE_SIZE
5
5
 
6
6
  def self.require_dependencies
@@ -36,13 +36,13 @@ module StackMaster::TemplateCompilers
36
36
 
37
37
  collection = ::SparkleFormation::SparkleCollection.new
38
38
  root_pack = ::SparkleFormation::Sparkle.new(
39
- :root => sparkle_path,
39
+ root: sparkle_path
40
40
  )
41
41
  collection.set_root(root_pack)
42
42
  if compiler_options['sparkle_packs']
43
43
  compiler_options['sparkle_packs'].each do |pack_name|
44
44
  require pack_name
45
- pack = ::SparkleFormation::SparklePack.new(:name => pack_name)
45
+ pack = ::SparkleFormation::SparklePack.new(name: pack_name)
46
46
  collection.add_sparkle(pack)
47
47
  end
48
48
  end
@@ -1,7 +1,7 @@
1
1
  module StackMaster
2
2
  module TemplateUtils
3
- MAX_TEMPLATE_SIZE = 51200
4
- MAX_S3_TEMPLATE_SIZE = 460800
3
+ MAX_TEMPLATE_SIZE = 51_200
4
+ MAX_S3_TEMPLATE_SIZE = 460_800
5
5
  # Matches if the first non-whitespace character is a '{', handling cases
6
6
  # with leading whitespace and extra (whitespace-only) lines.
7
7
  JSON_IDENTIFICATION_PATTERN = Regexp.new('\A\s*{', Regexp::MULTILINE)
@@ -28,6 +28,14 @@ module StackMaster
28
28
  parameter_value: hash[:parameter_value])
29
29
  end
30
30
  end
31
+
32
+ def tags
33
+ return [] if @tags.nil?
34
+
35
+ @tags.map do |hash|
36
+ OpenStruct.new(key: hash[:key], value: hash[:value])
37
+ end
38
+ end
31
39
  end
32
40
 
33
41
  class StackEvent
@@ -139,11 +147,11 @@ module StackMaster
139
147
  stack_name = options[:stack_name]
140
148
  stacks =
141
149
  if stack_name
142
- if @stacks[stack_name]
143
- [@stacks[stack_name]]
144
- else
150
+ unless @stacks[stack_name]
145
151
  raise Aws::CloudFormation::Errors::ValidationError.new('', 'Stack does not exist')
146
152
  end
153
+
154
+ [@stacks[stack_name]]
147
155
  else
148
156
  @stacks.values
149
157
  end
@@ -5,11 +5,10 @@ module StackMaster
5
5
  reset
6
6
  end
7
7
 
8
- def set_region(_)
9
- end
8
+ def set_region(_); end
10
9
 
11
10
  def reset
12
- @files = Hash.new { |hash, key| hash[key] = Hash.new }
11
+ @files = Hash.new { |hash, key| hash[key] = {} }
13
12
  end
14
13
 
15
14
  def upload_files(bucket: nil, prefix: nil, region: nil, files: {})
@@ -22,18 +22,16 @@ module StackMaster
22
22
  end
23
23
 
24
24
  def hash_to_aws_parameters(params)
25
- params.inject([]) do |params, (key, value)|
25
+ params.each_with_object([]) do |(key, value), params|
26
26
  params << { parameter_key: key, parameter_value: value }
27
- params
28
27
  end
29
28
  end
30
29
 
31
30
  def hash_to_aws_tags(tags)
32
31
  return [] if tags.nil?
33
32
 
34
- tags.inject([]) do |aws_tags, (key, value)|
33
+ tags.each_with_object([]) do |(key, value), aws_tags|
35
34
  aws_tags << { key: key, value: value }
36
- aws_tags
37
35
  end
38
36
  end
39
37
 
@@ -42,9 +40,8 @@ module StackMaster
42
40
  end
43
41
 
44
42
  def underscore_keys_to_hyphen(hash)
45
- hash.inject({}) do |hash, (key, value)|
43
+ hash.each_with_object({}) do |(key, value), hash|
46
44
  hash[underscore_to_hyphen(key)] = value
47
- hash
48
45
  end
49
46
  end
50
47
  end
@@ -17,7 +17,7 @@ module StackMaster
17
17
  return false
18
18
  end
19
19
  cf.validate_template(template_body: TemplateUtils.maybe_compressed_template_body(stack.template_body))
20
- StackMaster.stdout.puts "valid"
20
+ StackMaster.stdout.puts 'valid'
21
21
  true
22
22
  rescue Aws::CloudFormation::Errors::ValidationError => e
23
23
  StackMaster.stdout.puts "invalid. #{e.message}"
@@ -1,3 +1,3 @@
1
1
  module StackMaster
2
- VERSION = "2.17.1"
2
+ VERSION = '2.18.0'
3
3
  end
data/lib/stack_master.rb CHANGED
@@ -172,7 +172,7 @@ module StackMaster
172
172
  @non_interactive_answer = 'y'
173
173
 
174
174
  def base_dir
175
- File.expand_path(File.join(File.dirname(__FILE__), ".."))
175
+ File.expand_path(File.join(File.dirname(__FILE__), '..'))
176
176
  end
177
177
 
178
178
  def cloud_formation_driver
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.17.1
4
+ version: 2.18.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steve Hodgkiss
@@ -616,14 +616,15 @@ files:
616
616
  - stacktemplates/parameter_stack_name.yml
617
617
  - stacktemplates/stack.json.erb
618
618
  - stacktemplates/stack_master.yml.erb
619
- homepage: https://opensource.envato.com/projects/stack_master.html
619
+ homepage: https://github.com/envato/stack_master
620
620
  licenses:
621
621
  - MIT
622
622
  metadata:
623
+ allowed_push_host: https://rubygems.org
623
624
  bug_tracker_uri: https://github.com/envato/stack_master/issues
624
625
  changelog_uri: https://github.com/envato/stack_master/blob/master/CHANGELOG.md
625
- documentation_uri: https://www.rubydoc.info/gems/stack_master/2.17.1
626
- source_code_uri: https://github.com/envato/stack_master/tree/v2.17.1
626
+ documentation_uri: https://www.rubydoc.info/gems/stack_master/2.18.0
627
+ source_code_uri: https://github.com/envato/stack_master/tree/v2.18.0
627
628
  rdoc_options: []
628
629
  require_paths:
629
630
  - lib
@@ -638,7 +639,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
638
639
  - !ruby/object:Gem::Version
639
640
  version: '0'
640
641
  requirements: []
641
- rubygems_version: 4.0.2
642
+ rubygems_version: 4.0.5
642
643
  specification_version: 4
643
644
  summary: StackMaster is a sure-footed way of creating, updating and keeping track
644
645
  of Amazon (AWS) CloudFormation stacks.