stack_master 2.17.0 → 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 (78) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -6
  3. data/bin/stack_master +3 -5
  4. data/lib/stack_master/aws_driver/cloud_formation.rb +25 -23
  5. data/lib/stack_master/aws_driver/s3.rb +24 -17
  6. data/lib/stack_master/change_set.rb +11 -15
  7. data/lib/stack_master/cli.rb +53 -32
  8. data/lib/stack_master/command.rb +1 -5
  9. data/lib/stack_master/commands/apply.rb +39 -20
  10. data/lib/stack_master/commands/delete.rb +6 -7
  11. data/lib/stack_master/commands/drift.rb +11 -12
  12. data/lib/stack_master/commands/events.rb +4 -6
  13. data/lib/stack_master/commands/init.rb +21 -20
  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/nag.rb +0 -1
  17. data/lib/stack_master/commands/outputs.rb +1 -1
  18. data/lib/stack_master/commands/resources.rb +9 -1
  19. data/lib/stack_master/commands/status.rb +4 -4
  20. data/lib/stack_master/commands/terminal_helper.rb +3 -3
  21. data/lib/stack_master/commands/tidy.rb +14 -13
  22. data/lib/stack_master/config.rb +23 -21
  23. data/lib/stack_master/diff.rb +2 -2
  24. data/lib/stack_master/identity.rb +2 -1
  25. data/lib/stack_master/parameter_loader.rb +3 -5
  26. data/lib/stack_master/parameter_resolver.rb +18 -18
  27. data/lib/stack_master/parameter_resolvers/acm_certificate.rb +4 -1
  28. data/lib/stack_master/parameter_resolvers/ami_finder.rb +2 -3
  29. data/lib/stack_master/parameter_resolvers/ejson.rb +9 -6
  30. data/lib/stack_master/parameter_resolvers/env.rb +1 -2
  31. data/lib/stack_master/parameter_resolvers/latest_ami_by_tags.rb +1 -1
  32. data/lib/stack_master/parameter_resolvers/latest_container.rb +9 -7
  33. data/lib/stack_master/parameter_resolvers/one_password.rb +11 -7
  34. data/lib/stack_master/parameter_resolvers/parameter_store.rb +1 -5
  35. data/lib/stack_master/parameter_resolvers/security_group.rb +1 -1
  36. data/lib/stack_master/parameter_resolvers/sso_group_id.rb +3 -2
  37. data/lib/stack_master/parameter_resolvers/stack_output.rb +7 -9
  38. data/lib/stack_master/parameter_validator.rb +2 -5
  39. data/lib/stack_master/prompter.rb +11 -10
  40. data/lib/stack_master/resolver_array.rb +2 -3
  41. data/lib/stack_master/role_assumer.rb +7 -5
  42. data/lib/stack_master/security_group_finder.rb +7 -5
  43. data/lib/stack_master/sns_topic_finder.rb +4 -3
  44. data/lib/stack_master/sparkle_formation/compile_time/allowed_pattern_validator.rb +2 -3
  45. data/lib/stack_master/sparkle_formation/compile_time/allowed_values_validator.rb +2 -3
  46. data/lib/stack_master/sparkle_formation/compile_time/definitions_validator.rb +6 -6
  47. data/lib/stack_master/sparkle_formation/compile_time/empty_validator.rb +0 -2
  48. data/lib/stack_master/sparkle_formation/compile_time/max_length_validator.rb +1 -2
  49. data/lib/stack_master/sparkle_formation/compile_time/max_size_validator.rb +1 -2
  50. data/lib/stack_master/sparkle_formation/compile_time/min_length_validator.rb +2 -3
  51. data/lib/stack_master/sparkle_formation/compile_time/min_size_validator.rb +2 -3
  52. data/lib/stack_master/sparkle_formation/compile_time/number_validator.rb +1 -2
  53. data/lib/stack_master/sparkle_formation/compile_time/parameters_validator.rb +0 -1
  54. data/lib/stack_master/sparkle_formation/compile_time/state_builder.rb +0 -2
  55. data/lib/stack_master/sparkle_formation/compile_time/string_validator.rb +2 -3
  56. data/lib/stack_master/sparkle_formation/compile_time/value_builder.rb +7 -9
  57. data/lib/stack_master/sparkle_formation/compile_time/value_validator.rb +3 -6
  58. data/lib/stack_master/sparkle_formation/compile_time/value_validator_factory.rb +11 -13
  59. data/lib/stack_master/sparkle_formation/template_file.rb +2 -4
  60. data/lib/stack_master/sso_group_id_finder.rb +15 -12
  61. data/lib/stack_master/stack.rb +51 -18
  62. data/lib/stack_master/stack_definition.rb +6 -5
  63. data/lib/stack_master/stack_differ.rb +36 -9
  64. data/lib/stack_master/stack_events/fetcher.rb +3 -1
  65. data/lib/stack_master/stack_events/presenter.rb +6 -1
  66. data/lib/stack_master/stack_events/streamer.rb +3 -1
  67. data/lib/stack_master/stack_status.rb +1 -0
  68. data/lib/stack_master/template_compilers/json.rb +1 -1
  69. data/lib/stack_master/template_compilers/sparkle_formation.rb +12 -9
  70. data/lib/stack_master/template_utils.rb +8 -4
  71. data/lib/stack_master/test_driver/cloud_formation.rb +34 -9
  72. data/lib/stack_master/test_driver/s3.rb +2 -3
  73. data/lib/stack_master/utils.rb +4 -6
  74. data/lib/stack_master/validator.rb +7 -6
  75. data/lib/stack_master/version.rb +1 -1
  76. data/lib/stack_master.rb +3 -1
  77. metadata +21 -10
  78. data/lib/stack_master/parameter_resolvers/accounts_by_tags.rb +0 -60
@@ -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}"
@@ -35,11 +35,12 @@ module StackMaster
35
35
  end
36
36
 
37
37
  def stack
38
- @stack ||= if validate_template_parameters?
39
- Stack.generate(@stack_definition, @config)
40
- else
41
- Stack.generate_without_parameters(@stack_definition, @config)
42
- end
38
+ @stack ||=
39
+ if validate_template_parameters?
40
+ Stack.generate(@stack_definition, @config)
41
+ else
42
+ Stack.generate_without_parameters(@stack_definition, @config)
43
+ end
43
44
  end
44
45
 
45
46
  def parameter_validator
@@ -1,3 +1,3 @@
1
1
  module StackMaster
2
- VERSION = "2.17.0"
2
+ VERSION = '2.18.0'
3
3
  end
data/lib/stack_master.rb CHANGED
@@ -140,6 +140,7 @@ module StackMaster
140
140
 
141
141
  def debug(message)
142
142
  return unless debug?
143
+
143
144
  stderr.puts Rainbow("[DEBUG] #{message}").color(:green)
144
145
  end
145
146
 
@@ -167,10 +168,11 @@ module StackMaster
167
168
  end
168
169
 
169
170
  attr_accessor :non_interactive_answer
171
+
170
172
  @non_interactive_answer = 'y'
171
173
 
172
174
  def base_dir
173
- File.expand_path(File.join(File.dirname(__FILE__), ".."))
175
+ File.expand_path(File.join(File.dirname(__FILE__), '..'))
174
176
  end
175
177
 
176
178
  def cloud_formation_driver
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stack_master
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.17.0
4
+ version: 2.18.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steve Hodgkiss
8
8
  - Glen Stampoultzis
9
- autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2025-07-11 00:00:00.000000000 Z
11
+ date: 1980-01-02 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: bundler
@@ -123,6 +122,20 @@ dependencies:
123
122
  - - ">="
124
123
  - !ruby/object:Gem::Version
125
124
  version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rubocop
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
126
139
  - !ruby/object:Gem::Dependency
127
140
  name: os
128
141
  requirement: !ruby/object:Gem::Requirement
@@ -542,7 +555,6 @@ files:
542
555
  - lib/stack_master/paged_response_accumulator.rb
543
556
  - lib/stack_master/parameter_loader.rb
544
557
  - lib/stack_master/parameter_resolver.rb
545
- - lib/stack_master/parameter_resolvers/accounts_by_tags.rb
546
558
  - lib/stack_master/parameter_resolvers/acm_certificate.rb
547
559
  - lib/stack_master/parameter_resolvers/ami_finder.rb
548
560
  - lib/stack_master/parameter_resolvers/ejson.rb
@@ -604,15 +616,15 @@ files:
604
616
  - stacktemplates/parameter_stack_name.yml
605
617
  - stacktemplates/stack.json.erb
606
618
  - stacktemplates/stack_master.yml.erb
607
- homepage: https://opensource.envato.com/projects/stack_master.html
619
+ homepage: https://github.com/envato/stack_master
608
620
  licenses:
609
621
  - MIT
610
622
  metadata:
623
+ allowed_push_host: https://rubygems.org
611
624
  bug_tracker_uri: https://github.com/envato/stack_master/issues
612
625
  changelog_uri: https://github.com/envato/stack_master/blob/master/CHANGELOG.md
613
- documentation_uri: https://www.rubydoc.info/gems/stack_master/2.17.0
614
- source_code_uri: https://github.com/envato/stack_master/tree/v2.17.0
615
- post_install_message:
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
616
628
  rdoc_options: []
617
629
  require_paths:
618
630
  - lib
@@ -627,8 +639,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
627
639
  - !ruby/object:Gem::Version
628
640
  version: '0'
629
641
  requirements: []
630
- rubygems_version: 3.0.3.1
631
- signing_key:
642
+ rubygems_version: 4.0.5
632
643
  specification_version: 4
633
644
  summary: StackMaster is a sure-footed way of creating, updating and keeping track
634
645
  of Amazon (AWS) CloudFormation stacks.
@@ -1,60 +0,0 @@
1
- module StackMaster
2
- module ParameterResolvers
3
- class AccountsByTags < Resolver
4
- array_resolver class_name: 'AccountsByTags'
5
-
6
- def initialize(config, stack_definition)
7
- @config = config
8
- @stack_definition = stack_definition
9
- end
10
-
11
- def resolve(team)
12
-
13
- end
14
-
15
- private
16
-
17
- def fetch_all_aws_accounts()
18
- return @aws_accounts if defined(@aws_accounts)
19
- @aws_accounts = []
20
- next_token = nil
21
- client = Aws::Organizations::Client.new(region: @stack_definition.region)
22
- loop do
23
- resp = client.list_accounts(next_token: next_token)
24
- @aws_accounts << resp.accounts
25
- next_token = resp.next_token
26
- break if next_token.nil?
27
- end
28
- @aws_accounts.flatten! || @aws_accounts
29
- end
30
-
31
- def_fetch_tags_for_account(account)
32
- client = Aws::Organizations::Client.new(region: @stack_definition.region)
33
- next_token = nil
34
- tags = []
35
- loop do
36
- client.list_tags_for_resource(resource_id: account.id, next_token: next_token)
37
- tags << resp.tags
38
- next_token = resp.next_token
39
- break if next_token.nil?
40
- end
41
- tags.flatten! || tags
42
- end
43
-
44
- def fetch_tags_for_accounts()
45
- return @tagged_aws_accounts if defined?(@tagged_aws_accounts )
46
- @tagged_aws_accounts = Hash.new()
47
- fetch_all_aws_accounts()
48
- @aws_accounts.each do |account|
49
- @tagged_aws_accounts[account.id.to_sym] = { :account => account.id, :tags => fetch_tags_for_account(account.id) }
50
- end
51
- end
52
-
53
- def account_in_group?(account, group)
54
- fetch_tags_for_accounts if defined?(@tagged_aws_accounts)
55
- @tagged_aws_accounts[:account.to_sym][:tags].select {|tag| tag['key'] =='Group' && tag['value']==group}
56
- end
57
-
58
- end
59
- end
60
- end