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.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/bin/stack_master +3 -5
- data/lib/stack_master/aws_driver/cloud_formation.rb +4 -4
- data/lib/stack_master/aws_driver/s3.rb +7 -7
- data/lib/stack_master/change_set.rb +7 -11
- data/lib/stack_master/cli.rb +32 -26
- data/lib/stack_master/command.rb +1 -5
- data/lib/stack_master/commands/apply.rb +34 -19
- data/lib/stack_master/commands/delete.rb +4 -4
- data/lib/stack_master/commands/drift.rb +5 -9
- data/lib/stack_master/commands/events.rb +4 -6
- data/lib/stack_master/commands/init.rb +14 -14
- data/lib/stack_master/commands/lint.rb +1 -1
- data/lib/stack_master/commands/list_stacks.rb +1 -1
- data/lib/stack_master/commands/outputs.rb +1 -1
- data/lib/stack_master/commands/status.rb +4 -4
- data/lib/stack_master/commands/terminal_helper.rb +3 -3
- data/lib/stack_master/commands/tidy.rb +14 -16
- data/lib/stack_master/config.rb +8 -11
- data/lib/stack_master/diff.rb +2 -2
- data/lib/stack_master/parameter_loader.rb +1 -2
- data/lib/stack_master/parameter_resolver.rb +14 -17
- data/lib/stack_master/parameter_resolvers/ami_finder.rb +1 -2
- data/lib/stack_master/parameter_resolvers/ejson.rb +4 -4
- data/lib/stack_master/parameter_resolvers/latest_ami_by_tags.rb +1 -1
- data/lib/stack_master/parameter_resolvers/latest_container.rb +3 -3
- data/lib/stack_master/parameter_resolvers/one_password.rb +5 -5
- data/lib/stack_master/parameter_resolvers/sso_group_id.rb +1 -1
- data/lib/stack_master/parameter_resolvers/stack_output.rb +7 -11
- data/lib/stack_master/parameter_validator.rb +1 -5
- data/lib/stack_master/prompter.rb +1 -1
- data/lib/stack_master/resolver_array.rb +2 -2
- data/lib/stack_master/role_assumer.rb +1 -1
- data/lib/stack_master/security_group_finder.rb +4 -4
- data/lib/stack_master/sns_topic_finder.rb +1 -1
- data/lib/stack_master/sparkle_formation/compile_time/allowed_pattern_validator.rb +1 -1
- data/lib/stack_master/sparkle_formation/compile_time/definitions_validator.rb +1 -1
- data/lib/stack_master/sparkle_formation/compile_time/value_builder.rb +7 -7
- data/lib/stack_master/sparkle_formation/compile_time/value_validator.rb +1 -3
- data/lib/stack_master/sparkle_formation/template_file.rb +2 -2
- data/lib/stack_master/sso_group_id_finder.rb +3 -3
- data/lib/stack_master/stack.rb +6 -4
- data/lib/stack_master/stack_definition.rb +3 -4
- data/lib/stack_master/stack_differ.rb +32 -9
- data/lib/stack_master/template_compilers/json.rb +1 -1
- data/lib/stack_master/template_compilers/sparkle_formation.rb +2 -2
- data/lib/stack_master/template_utils.rb +2 -2
- data/lib/stack_master/test_driver/cloud_formation.rb +11 -3
- data/lib/stack_master/test_driver/s3.rb +2 -3
- data/lib/stack_master/utils.rb +3 -6
- data/lib/stack_master/validator.rb +1 -1
- data/lib/stack_master/version.rb +1 -1
- data/lib/stack_master.rb +1 -1
- metadata +6 -5
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
require
|
|
2
|
-
require
|
|
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
|
-
|
|
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] ==
|
|
114
|
+
diff[0] == '~' && diff[1] == param_name
|
|
92
115
|
end
|
|
93
116
|
|
|
94
117
|
private
|
|
@@ -36,13 +36,13 @@ module StackMaster::TemplateCompilers
|
|
|
36
36
|
|
|
37
37
|
collection = ::SparkleFormation::SparkleCollection.new
|
|
38
38
|
root_pack = ::SparkleFormation::Sparkle.new(
|
|
39
|
-
:
|
|
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(:
|
|
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 =
|
|
4
|
-
MAX_S3_TEMPLATE_SIZE =
|
|
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
|
-
|
|
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] =
|
|
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: {})
|
data/lib/stack_master/utils.rb
CHANGED
|
@@ -22,18 +22,16 @@ module StackMaster
|
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
def hash_to_aws_parameters(params)
|
|
25
|
-
params.
|
|
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.
|
|
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.
|
|
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
|
|
20
|
+
StackMaster.stdout.puts 'valid'
|
|
21
21
|
true
|
|
22
22
|
rescue Aws::CloudFormation::Errors::ValidationError => e
|
|
23
23
|
StackMaster.stdout.puts "invalid. #{e.message}"
|
data/lib/stack_master/version.rb
CHANGED
data/lib/stack_master.rb
CHANGED
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
|
+
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://
|
|
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.
|
|
626
|
-
source_code_uri: https://github.com/envato/stack_master/tree/v2.
|
|
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.
|
|
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.
|