stack_master 2.16.0 → 2.17.1
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 +18 -5
- data/lib/stack_master/aws_driver/cloud_formation.rb +21 -19
- data/lib/stack_master/aws_driver/s3.rb +18 -11
- data/lib/stack_master/change_set.rb +5 -5
- data/lib/stack_master/cli.rb +24 -9
- data/lib/stack_master/commands/apply.rb +5 -1
- data/lib/stack_master/commands/delete.rb +2 -3
- data/lib/stack_master/commands/drift.rb +6 -3
- data/lib/stack_master/commands/init.rb +6 -5
- data/lib/stack_master/commands/nag.rb +0 -1
- data/lib/stack_master/commands/resources.rb +9 -1
- data/lib/stack_master/commands/tidy.rb +4 -1
- data/lib/stack_master/config.rb +16 -11
- data/lib/stack_master/identity.rb +2 -1
- data/lib/stack_master/parameter_loader.rb +3 -4
- data/lib/stack_master/parameter_resolver.rb +4 -1
- data/lib/stack_master/parameter_resolvers/acm_certificate.rb +4 -1
- data/lib/stack_master/parameter_resolvers/ami_finder.rb +1 -1
- data/lib/stack_master/parameter_resolvers/ejson.rb +7 -4
- data/lib/stack_master/parameter_resolvers/env.rb +1 -2
- data/lib/stack_master/parameter_resolvers/latest_container.rb +6 -4
- data/lib/stack_master/parameter_resolvers/one_password.rb +7 -3
- data/lib/stack_master/parameter_resolvers/parameter_store.rb +1 -5
- data/lib/stack_master/parameter_resolvers/security_group.rb +1 -1
- data/lib/stack_master/parameter_resolvers/sso_group_id.rb +22 -0
- data/lib/stack_master/parameter_resolvers/stack_output.rb +3 -1
- data/lib/stack_master/parameter_validator.rb +1 -0
- data/lib/stack_master/prompter.rb +11 -10
- data/lib/stack_master/resolver_array.rb +0 -1
- data/lib/stack_master/role_assumer.rb +7 -5
- data/lib/stack_master/security_group_finder.rb +3 -1
- data/lib/stack_master/sns_topic_finder.rb +3 -2
- data/lib/stack_master/sparkle_formation/compile_time/allowed_pattern_validator.rb +1 -2
- data/lib/stack_master/sparkle_formation/compile_time/allowed_values_validator.rb +2 -3
- data/lib/stack_master/sparkle_formation/compile_time/definitions_validator.rb +5 -5
- data/lib/stack_master/sparkle_formation/compile_time/empty_validator.rb +0 -2
- data/lib/stack_master/sparkle_formation/compile_time/max_length_validator.rb +1 -2
- data/lib/stack_master/sparkle_formation/compile_time/max_size_validator.rb +1 -2
- data/lib/stack_master/sparkle_formation/compile_time/min_length_validator.rb +2 -3
- data/lib/stack_master/sparkle_formation/compile_time/min_size_validator.rb +2 -3
- data/lib/stack_master/sparkle_formation/compile_time/number_validator.rb +1 -2
- data/lib/stack_master/sparkle_formation/compile_time/parameters_validator.rb +0 -1
- data/lib/stack_master/sparkle_formation/compile_time/state_builder.rb +0 -2
- data/lib/stack_master/sparkle_formation/compile_time/string_validator.rb +2 -3
- data/lib/stack_master/sparkle_formation/compile_time/value_builder.rb +0 -2
- data/lib/stack_master/sparkle_formation/compile_time/value_validator.rb +2 -3
- data/lib/stack_master/sparkle_formation/compile_time/value_validator_factory.rb +11 -13
- data/lib/stack_master/sparkle_formation/template_file.rb +0 -2
- data/lib/stack_master/sso_group_id_finder.rb +36 -0
- data/lib/stack_master/stack.rb +47 -16
- data/lib/stack_master/stack_definition.rb +3 -1
- data/lib/stack_master/stack_differ.rb +4 -0
- data/lib/stack_master/stack_events/fetcher.rb +3 -1
- data/lib/stack_master/stack_events/presenter.rb +6 -1
- data/lib/stack_master/stack_events/streamer.rb +3 -1
- data/lib/stack_master/stack_status.rb +1 -0
- data/lib/stack_master/template_compilers/sparkle_formation.rb +10 -7
- data/lib/stack_master/template_utils.rb +6 -2
- data/lib/stack_master/test_driver/cloud_formation.rb +28 -10
- data/lib/stack_master/utils.rb +1 -0
- data/lib/stack_master/validator.rb +6 -5
- data/lib/stack_master/version.rb +1 -1
- data/lib/stack_master.rb +5 -0
- metadata +49 -8
data/lib/stack_master/stack.rb
CHANGED
|
@@ -17,10 +17,13 @@ module StackMaster
|
|
|
17
17
|
include Utils::Initializable
|
|
18
18
|
|
|
19
19
|
def template_default_parameters
|
|
20
|
-
TemplateUtils
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
TemplateUtils
|
|
21
|
+
.template_hash(template)
|
|
22
|
+
.fetch('Parameters', {})
|
|
23
|
+
.inject({}) do |result, (parameter_name, description)|
|
|
24
|
+
result[parameter_name] = description['Default']&.to_s
|
|
25
|
+
result
|
|
26
|
+
end
|
|
24
27
|
end
|
|
25
28
|
|
|
26
29
|
def parameters_with_defaults
|
|
@@ -31,6 +34,7 @@ module StackMaster
|
|
|
31
34
|
cf = StackMaster.cloud_formation_driver
|
|
32
35
|
cf_stack = cf.describe_stacks({ stack_name: stack_name }).stacks.first
|
|
33
36
|
return unless cf_stack
|
|
37
|
+
|
|
34
38
|
parameters = cf_stack.parameters.inject({}) do |params_hash, param_struct|
|
|
35
39
|
params_hash[param_struct.parameter_key] = param_struct.parameter_value
|
|
36
40
|
params_hash
|
|
@@ -56,14 +60,27 @@ module StackMaster
|
|
|
56
60
|
end
|
|
57
61
|
|
|
58
62
|
def self.generate(stack_definition, config)
|
|
59
|
-
parameter_hash = ParameterLoader.load(
|
|
63
|
+
parameter_hash = ParameterLoader.load(
|
|
64
|
+
parameter_files: stack_definition.all_parameter_files,
|
|
65
|
+
parameters: stack_definition.parameters
|
|
66
|
+
)
|
|
60
67
|
template_parameters = ParameterResolver.resolve(config, stack_definition, parameter_hash[:template_parameters])
|
|
61
|
-
compile_time_parameters = ParameterResolver.resolve(
|
|
62
|
-
|
|
68
|
+
compile_time_parameters = ParameterResolver.resolve(
|
|
69
|
+
config,
|
|
70
|
+
stack_definition,
|
|
71
|
+
parameter_hash[:compile_time_parameters]
|
|
72
|
+
)
|
|
73
|
+
template_body = TemplateCompiler.compile(
|
|
74
|
+
config,
|
|
75
|
+
stack_definition.compiler,
|
|
76
|
+
stack_definition.template_dir,
|
|
77
|
+
stack_definition.template,
|
|
78
|
+
compile_time_parameters,
|
|
79
|
+
stack_definition.compiler_options
|
|
80
|
+
)
|
|
63
81
|
template_format = TemplateUtils.identify_template_format(template_body)
|
|
64
|
-
stack_policy_body =
|
|
65
|
-
|
|
66
|
-
end
|
|
82
|
+
stack_policy_body =
|
|
83
|
+
(File.read(stack_definition.stack_policy_file_path) if stack_definition.stack_policy_file_path)
|
|
67
84
|
new(region: stack_definition.region,
|
|
68
85
|
stack_name: stack_definition.stack_name,
|
|
69
86
|
tags: stack_definition.tags,
|
|
@@ -76,13 +93,26 @@ module StackMaster
|
|
|
76
93
|
end
|
|
77
94
|
|
|
78
95
|
def self.generate_without_parameters(stack_definition, config)
|
|
79
|
-
parameter_hash = ParameterLoader.load(
|
|
80
|
-
|
|
81
|
-
|
|
96
|
+
parameter_hash = ParameterLoader.load(
|
|
97
|
+
parameter_files: stack_definition.all_parameter_files,
|
|
98
|
+
parameters: stack_definition.parameters
|
|
99
|
+
)
|
|
100
|
+
compile_time_parameters = ParameterResolver.resolve(
|
|
101
|
+
config,
|
|
102
|
+
stack_definition,
|
|
103
|
+
parameter_hash[:compile_time_parameters]
|
|
104
|
+
)
|
|
105
|
+
template_body = TemplateCompiler.compile(
|
|
106
|
+
config,
|
|
107
|
+
stack_definition.compiler,
|
|
108
|
+
stack_definition.template_dir,
|
|
109
|
+
stack_definition.template,
|
|
110
|
+
compile_time_parameters,
|
|
111
|
+
stack_definition.compiler_options
|
|
112
|
+
)
|
|
82
113
|
template_format = TemplateUtils.identify_template_format(template_body)
|
|
83
|
-
stack_policy_body =
|
|
84
|
-
|
|
85
|
-
end
|
|
114
|
+
stack_policy_body =
|
|
115
|
+
(File.read(stack_definition.stack_policy_file_path) if stack_definition.stack_policy_file_path)
|
|
86
116
|
new(region: stack_definition.region,
|
|
87
117
|
stack_name: stack_definition.stack_name,
|
|
88
118
|
tags: stack_definition.tags,
|
|
@@ -96,6 +126,7 @@ module StackMaster
|
|
|
96
126
|
|
|
97
127
|
def max_template_size(use_s3)
|
|
98
128
|
return TemplateUtils::MAX_S3_TEMPLATE_SIZE if use_s3
|
|
129
|
+
|
|
99
130
|
TemplateUtils::MAX_TEMPLATE_SIZE
|
|
100
131
|
end
|
|
101
132
|
|
|
@@ -65,6 +65,7 @@ module StackMaster
|
|
|
65
65
|
|
|
66
66
|
def template_file_path
|
|
67
67
|
return unless template
|
|
68
|
+
|
|
68
69
|
File.expand_path(template, template_dir)
|
|
69
70
|
end
|
|
70
71
|
|
|
@@ -85,6 +86,7 @@ module StackMaster
|
|
|
85
86
|
|
|
86
87
|
def s3_template_file_name
|
|
87
88
|
return template if ['.json', '.yaml', '.yml'].include?(File.extname(template))
|
|
89
|
+
|
|
88
90
|
Utils.change_extension(template, 'json')
|
|
89
91
|
end
|
|
90
92
|
|
|
@@ -101,7 +103,7 @@ module StackMaster
|
|
|
101
103
|
end
|
|
102
104
|
|
|
103
105
|
def parameter_file_globs
|
|
104
|
-
[
|
|
106
|
+
[default_parameter_glob, region_parameter_glob] + additional_parameter_lookup_globs
|
|
105
107
|
end
|
|
106
108
|
|
|
107
109
|
def stack_policy_file_path
|
|
@@ -10,12 +10,14 @@ module StackMaster
|
|
|
10
10
|
|
|
11
11
|
def proposed_template
|
|
12
12
|
return @proposed_stack.template_body unless @proposed_stack.template_format == :json
|
|
13
|
+
|
|
13
14
|
JSON.pretty_generate(JSON.parse(@proposed_stack.template_body)) + "\n"
|
|
14
15
|
end
|
|
15
16
|
|
|
16
17
|
def current_template
|
|
17
18
|
return '' unless @current_stack
|
|
18
19
|
return @current_stack.template_body unless @current_stack.template_format == :json
|
|
20
|
+
|
|
19
21
|
JSON.pretty_generate(TemplateUtils.template_hash(@current_stack.template_body)) + "\n"
|
|
20
22
|
end
|
|
21
23
|
|
|
@@ -81,8 +83,10 @@ module StackMaster
|
|
|
81
83
|
|
|
82
84
|
def single_param_update?(param_name)
|
|
83
85
|
return false if param_name.blank? || @current_stack.blank? || body_different?
|
|
86
|
+
|
|
84
87
|
differences = Hashdiff.diff(@current_stack.parameters_with_defaults, @proposed_stack.parameters_with_defaults)
|
|
85
88
|
return false if differences.count != 1
|
|
89
|
+
|
|
86
90
|
diff = differences[0]
|
|
87
91
|
diff[0] == "~" && diff[1] == param_name
|
|
88
92
|
end
|
|
@@ -31,7 +31,9 @@ module StackMaster
|
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
def fetch_events
|
|
34
|
-
PagedResponseAccumulator
|
|
34
|
+
PagedResponseAccumulator
|
|
35
|
+
.call(cf, :describe_stack_events, { stack_name: @stack_name }, :stack_events)
|
|
36
|
+
.stack_events
|
|
35
37
|
end
|
|
36
38
|
end
|
|
37
39
|
end
|
|
@@ -10,7 +10,12 @@ module StackMaster
|
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
def print_event(event)
|
|
13
|
-
@io.puts
|
|
13
|
+
@io.puts(
|
|
14
|
+
Rainbow(
|
|
15
|
+
"#{event.timestamp.localtime} #{event.logical_resource_id} #{event.resource_type} " \
|
|
16
|
+
"#{event.resource_status} #{event.resource_status_reason}"
|
|
17
|
+
).color(event_colour(event))
|
|
18
|
+
)
|
|
14
19
|
end
|
|
15
20
|
|
|
16
21
|
def event_colour(event)
|
|
@@ -7,7 +7,8 @@ module StackMaster
|
|
|
7
7
|
new(stack_name, region, **args, &block).stream
|
|
8
8
|
end
|
|
9
9
|
|
|
10
|
-
def initialize(stack_name, region, from: Time.now, break_on_finish_state: true, sleep_between_fetches: 1,
|
|
10
|
+
def initialize(stack_name, region, from: Time.now, break_on_finish_state: true, sleep_between_fetches: 1,
|
|
11
|
+
io: nil, &block)
|
|
11
12
|
@stack_name = stack_name
|
|
12
13
|
@region = region
|
|
13
14
|
@block = block
|
|
@@ -42,6 +43,7 @@ module StackMaster
|
|
|
42
43
|
[].tap do |unseen_events|
|
|
43
44
|
events.each do |event|
|
|
44
45
|
next if @seen_events.include?(event.event_id)
|
|
46
|
+
|
|
45
47
|
@seen_events << event.event_id
|
|
46
48
|
unseen_events << event
|
|
47
49
|
end
|
|
@@ -4,7 +4,6 @@ require 'stack_master/sparkle_formation/compile_time/state_builder'
|
|
|
4
4
|
|
|
5
5
|
module StackMaster::TemplateCompilers
|
|
6
6
|
class SparkleFormation
|
|
7
|
-
|
|
8
7
|
CompileTime = StackMaster::SparkleFormation::CompileTime
|
|
9
8
|
|
|
10
9
|
def self.require_dependencies
|
|
@@ -28,11 +27,12 @@ module StackMaster::TemplateCompilers
|
|
|
28
27
|
private
|
|
29
28
|
|
|
30
29
|
def self.compile_sparkle_template(template_dir, template, compiler_options)
|
|
31
|
-
sparkle_path =
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
30
|
+
sparkle_path =
|
|
31
|
+
if compiler_options['sparkle_path']
|
|
32
|
+
File.expand_path(compiler_options['sparkle_path'])
|
|
33
|
+
else
|
|
34
|
+
template_dir
|
|
35
|
+
end
|
|
36
36
|
|
|
37
37
|
collection = ::SparkleFormation::SparkleCollection.new
|
|
38
38
|
root_pack = ::SparkleFormation::Sparkle.new(
|
|
@@ -48,7 +48,10 @@ module StackMaster::TemplateCompilers
|
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
if compiler_options['sparkle_pack_template']
|
|
51
|
-
|
|
51
|
+
unless collection.templates['aws'].include? template
|
|
52
|
+
raise ArgumentError.new("Template #{template.inspect} not found in any sparkle pack")
|
|
53
|
+
end
|
|
54
|
+
|
|
52
55
|
template_file_path = collection.templates['aws'][template].top['path']
|
|
53
56
|
else
|
|
54
57
|
template_file_path = File.join(template_dir, template)
|
|
@@ -16,8 +16,9 @@ module StackMaster
|
|
|
16
16
|
end
|
|
17
17
|
end
|
|
18
18
|
|
|
19
|
-
def template_hash(template_body=nil)
|
|
19
|
+
def template_hash(template_body = nil)
|
|
20
20
|
return unless template_body
|
|
21
|
+
|
|
21
22
|
template_format = identify_template_format(template_body)
|
|
22
23
|
case template_format
|
|
23
24
|
when :json
|
|
@@ -30,7 +31,10 @@ module StackMaster
|
|
|
30
31
|
def maybe_compressed_template_body(template_body)
|
|
31
32
|
# Do not compress the template if it's not JSON because parsing YAML as a hash ignores
|
|
32
33
|
# CloudFormation-specific tags such as !Ref
|
|
33
|
-
|
|
34
|
+
if template_body.size <= MAX_TEMPLATE_SIZE || identify_template_format(template_body) != :json
|
|
35
|
+
return template_body
|
|
36
|
+
end
|
|
37
|
+
|
|
34
38
|
JSON.dump(template_hash(template_body))
|
|
35
39
|
end
|
|
36
40
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
require 'ostruct'
|
|
1
2
|
require 'securerandom'
|
|
2
3
|
|
|
3
4
|
module StackMaster
|
|
@@ -98,11 +99,27 @@ module StackMaster
|
|
|
98
99
|
change_set_id = options.fetch(:change_set_name)
|
|
99
100
|
change_set = @change_sets.fetch(change_set_id)
|
|
100
101
|
change_details = [
|
|
101
|
-
OpenStruct.new(
|
|
102
|
+
OpenStruct.new(
|
|
103
|
+
evaluation: 'Static',
|
|
104
|
+
change_source: 'ResourceReference',
|
|
105
|
+
target: OpenStruct.new(
|
|
106
|
+
attribute: 'Properties',
|
|
107
|
+
requires_recreation: 'Always',
|
|
108
|
+
name: 'blah'
|
|
109
|
+
)
|
|
110
|
+
)
|
|
102
111
|
]
|
|
103
|
-
change = OpenStruct.new(
|
|
112
|
+
change = OpenStruct.new(
|
|
113
|
+
action: 'Modify',
|
|
114
|
+
replacement: 'True',
|
|
115
|
+
scope: ['Properties'],
|
|
116
|
+
details: change_details
|
|
117
|
+
)
|
|
104
118
|
changes = [
|
|
105
|
-
OpenStruct.new(
|
|
119
|
+
OpenStruct.new(
|
|
120
|
+
type: 'AWS::Resource',
|
|
121
|
+
resource_change: change
|
|
122
|
+
)
|
|
106
123
|
]
|
|
107
124
|
OpenStruct.new(change_set.merge(changes: changes, status: 'CREATE_COMPLETE'))
|
|
108
125
|
end
|
|
@@ -120,15 +137,16 @@ module StackMaster
|
|
|
120
137
|
|
|
121
138
|
def describe_stacks(options = {})
|
|
122
139
|
stack_name = options[:stack_name]
|
|
123
|
-
stacks =
|
|
124
|
-
if
|
|
125
|
-
|
|
140
|
+
stacks =
|
|
141
|
+
if stack_name
|
|
142
|
+
if @stacks[stack_name]
|
|
143
|
+
[@stacks[stack_name]]
|
|
144
|
+
else
|
|
145
|
+
raise Aws::CloudFormation::Errors::ValidationError.new('', 'Stack does not exist')
|
|
146
|
+
end
|
|
126
147
|
else
|
|
127
|
-
|
|
148
|
+
@stacks.values
|
|
128
149
|
end
|
|
129
|
-
else
|
|
130
|
-
@stacks.values
|
|
131
|
-
end
|
|
132
150
|
OpenStruct.new(stacks: stacks, next_token: nil)
|
|
133
151
|
end
|
|
134
152
|
|
data/lib/stack_master/utils.rb
CHANGED
|
@@ -35,11 +35,12 @@ module StackMaster
|
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
def stack
|
|
38
|
-
@stack ||=
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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
|
data/lib/stack_master/version.rb
CHANGED
data/lib/stack_master.rb
CHANGED
|
@@ -4,6 +4,7 @@ require 'aws-sdk-acm'
|
|
|
4
4
|
require 'aws-sdk-cloudformation'
|
|
5
5
|
require 'aws-sdk-ec2'
|
|
6
6
|
require 'aws-sdk-ecr'
|
|
7
|
+
require 'aws-sdk-identitystore'
|
|
7
8
|
require 'aws-sdk-s3'
|
|
8
9
|
require 'aws-sdk-sns'
|
|
9
10
|
require 'aws-sdk-ssm'
|
|
@@ -33,6 +34,7 @@ module StackMaster
|
|
|
33
34
|
autoload :StackStatus, 'stack_master/stack_status'
|
|
34
35
|
autoload :SnsTopicFinder, 'stack_master/sns_topic_finder'
|
|
35
36
|
autoload :SecurityGroupFinder, 'stack_master/security_group_finder'
|
|
37
|
+
autoload :SsoGroupIdFinder, 'stack_master/sso_group_id_finder'
|
|
36
38
|
autoload :ParameterLoader, 'stack_master/parameter_loader'
|
|
37
39
|
autoload :ParameterResolver, 'stack_master/parameter_resolver'
|
|
38
40
|
autoload :RoleAssumer, 'stack_master/role_assumer'
|
|
@@ -84,6 +86,7 @@ module StackMaster
|
|
|
84
86
|
autoload :Ejson, 'stack_master/parameter_resolvers/ejson'
|
|
85
87
|
autoload :SnsTopicName, 'stack_master/parameter_resolvers/sns_topic_name'
|
|
86
88
|
autoload :SecurityGroup, 'stack_master/parameter_resolvers/security_group'
|
|
89
|
+
autoload :SsoGroupId, 'stack_master/parameter_resolvers/sso_group_id'
|
|
87
90
|
autoload :LatestAmiByTags, 'stack_master/parameter_resolvers/latest_ami_by_tags'
|
|
88
91
|
autoload :LatestAmi, 'stack_master/parameter_resolvers/latest_ami'
|
|
89
92
|
autoload :Env, 'stack_master/parameter_resolvers/env'
|
|
@@ -137,6 +140,7 @@ module StackMaster
|
|
|
137
140
|
|
|
138
141
|
def debug(message)
|
|
139
142
|
return unless debug?
|
|
143
|
+
|
|
140
144
|
stderr.puts Rainbow("[DEBUG] #{message}").color(:green)
|
|
141
145
|
end
|
|
142
146
|
|
|
@@ -164,6 +168,7 @@ module StackMaster
|
|
|
164
168
|
end
|
|
165
169
|
|
|
166
170
|
attr_accessor :non_interactive_answer
|
|
171
|
+
|
|
167
172
|
@non_interactive_answer = 'y'
|
|
168
173
|
|
|
169
174
|
def base_dir
|
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.
|
|
4
|
+
version: 2.17.1
|
|
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:
|
|
11
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
13
12
|
dependencies:
|
|
14
13
|
- !ruby/object:Gem::Dependency
|
|
15
14
|
name: bundler
|
|
@@ -109,6 +108,34 @@ dependencies:
|
|
|
109
108
|
- - ">="
|
|
110
109
|
- !ruby/object:Gem::Version
|
|
111
110
|
version: '0'
|
|
111
|
+
- !ruby/object:Gem::Dependency
|
|
112
|
+
name: ostruct
|
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
|
114
|
+
requirements:
|
|
115
|
+
- - ">="
|
|
116
|
+
- !ruby/object:Gem::Version
|
|
117
|
+
version: '0'
|
|
118
|
+
type: :development
|
|
119
|
+
prerelease: false
|
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
+
requirements:
|
|
122
|
+
- - ">="
|
|
123
|
+
- !ruby/object:Gem::Version
|
|
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'
|
|
112
139
|
- !ruby/object:Gem::Dependency
|
|
113
140
|
name: os
|
|
114
141
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -199,6 +226,20 @@ dependencies:
|
|
|
199
226
|
- - "~>"
|
|
200
227
|
- !ruby/object:Gem::Version
|
|
201
228
|
version: '1'
|
|
229
|
+
- !ruby/object:Gem::Dependency
|
|
230
|
+
name: aws-sdk-identitystore
|
|
231
|
+
requirement: !ruby/object:Gem::Requirement
|
|
232
|
+
requirements:
|
|
233
|
+
- - "~>"
|
|
234
|
+
- !ruby/object:Gem::Version
|
|
235
|
+
version: '1'
|
|
236
|
+
type: :runtime
|
|
237
|
+
prerelease: false
|
|
238
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
239
|
+
requirements:
|
|
240
|
+
- - "~>"
|
|
241
|
+
- !ruby/object:Gem::Version
|
|
242
|
+
version: '1'
|
|
202
243
|
- !ruby/object:Gem::Dependency
|
|
203
244
|
name: aws-sdk-s3
|
|
204
245
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -525,6 +566,7 @@ files:
|
|
|
525
566
|
- lib/stack_master/parameter_resolvers/parameter_store.rb
|
|
526
567
|
- lib/stack_master/parameter_resolvers/security_group.rb
|
|
527
568
|
- lib/stack_master/parameter_resolvers/sns_topic_name.rb
|
|
569
|
+
- lib/stack_master/parameter_resolvers/sso_group_id.rb
|
|
528
570
|
- lib/stack_master/parameter_resolvers/stack_output.rb
|
|
529
571
|
- lib/stack_master/parameter_validator.rb
|
|
530
572
|
- lib/stack_master/prompter.rb
|
|
@@ -548,6 +590,7 @@ files:
|
|
|
548
590
|
- lib/stack_master/sparkle_formation/compile_time/value_validator.rb
|
|
549
591
|
- lib/stack_master/sparkle_formation/compile_time/value_validator_factory.rb
|
|
550
592
|
- lib/stack_master/sparkle_formation/template_file.rb
|
|
593
|
+
- lib/stack_master/sso_group_id_finder.rb
|
|
551
594
|
- lib/stack_master/stack.rb
|
|
552
595
|
- lib/stack_master/stack_definition.rb
|
|
553
596
|
- lib/stack_master/stack_differ.rb
|
|
@@ -579,9 +622,8 @@ licenses:
|
|
|
579
622
|
metadata:
|
|
580
623
|
bug_tracker_uri: https://github.com/envato/stack_master/issues
|
|
581
624
|
changelog_uri: https://github.com/envato/stack_master/blob/master/CHANGELOG.md
|
|
582
|
-
documentation_uri: https://www.rubydoc.info/gems/stack_master/2.
|
|
583
|
-
source_code_uri: https://github.com/envato/stack_master/tree/v2.
|
|
584
|
-
post_install_message:
|
|
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
|
|
585
627
|
rdoc_options: []
|
|
586
628
|
require_paths:
|
|
587
629
|
- lib
|
|
@@ -596,8 +638,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
596
638
|
- !ruby/object:Gem::Version
|
|
597
639
|
version: '0'
|
|
598
640
|
requirements: []
|
|
599
|
-
rubygems_version:
|
|
600
|
-
signing_key:
|
|
641
|
+
rubygems_version: 4.0.2
|
|
601
642
|
specification_version: 4
|
|
602
643
|
summary: StackMaster is a sure-footed way of creating, updating and keeping track
|
|
603
644
|
of Amazon (AWS) CloudFormation stacks.
|