stack_master 2.17.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 +0 -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 +2 -1
- 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 +14 -11
- 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 +27 -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 +2 -0
- metadata +19 -9
- data/lib/stack_master/parameter_resolvers/accounts_by_tags.rb +0 -60
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
module StackMaster
|
|
2
2
|
module ParameterResolvers
|
|
3
3
|
class ParameterStore < Resolver
|
|
4
|
-
|
|
5
4
|
ParameterNotFound = Class.new(StandardError)
|
|
6
5
|
|
|
7
6
|
def initialize(config, stack_definition)
|
|
@@ -12,10 +11,7 @@ module StackMaster
|
|
|
12
11
|
def resolve(value)
|
|
13
12
|
begin
|
|
14
13
|
ssm = Aws::SSM::Client.new({ region: @stack_definition.region })
|
|
15
|
-
resp = ssm.get_parameter({
|
|
16
|
-
name: value,
|
|
17
|
-
with_decryption: true
|
|
18
|
-
})
|
|
14
|
+
resp = ssm.get_parameter({ name: value, with_decryption: true })
|
|
19
15
|
rescue Aws::SSM::Errors::ParameterNotFound
|
|
20
16
|
raise ParameterNotFound, "Unable to find #{value} in Parameter Store"
|
|
21
17
|
end
|
|
@@ -18,7 +18,9 @@ module StackMaster
|
|
|
18
18
|
region, stack_name, output_name = parse!(value)
|
|
19
19
|
stack = find_stack(stack_name, region)
|
|
20
20
|
if stack
|
|
21
|
-
output = stack.outputs.find
|
|
21
|
+
output = stack.outputs.find do |stack_output|
|
|
22
|
+
stack_output.output_key == output_name.camelize || stack_output.output_key == output_name
|
|
23
|
+
end
|
|
22
24
|
if output
|
|
23
25
|
output.output_value
|
|
24
26
|
else
|
|
@@ -9,6 +9,7 @@ module StackMaster
|
|
|
9
9
|
|
|
10
10
|
def error_message
|
|
11
11
|
return nil unless missing_parameters?
|
|
12
|
+
|
|
12
13
|
message = "Empty/blank parameters detected. Please provide values for these parameters:\n"
|
|
13
14
|
missing_parameters.each do |parameter_name|
|
|
14
15
|
message << " - #{parameter_name}\n"
|
|
@@ -4,18 +4,19 @@ module StackMaster
|
|
|
4
4
|
module Prompter
|
|
5
5
|
def ask?(question)
|
|
6
6
|
StackMaster.stdout.print question
|
|
7
|
-
answer =
|
|
8
|
-
if StackMaster.
|
|
9
|
-
StackMaster.stdin.
|
|
7
|
+
answer =
|
|
8
|
+
if StackMaster.interactive?
|
|
9
|
+
if StackMaster.stdin.tty? && StackMaster.stdout.tty?
|
|
10
|
+
StackMaster.stdin.getch.chomp
|
|
11
|
+
else
|
|
12
|
+
StackMaster.stdout.puts
|
|
13
|
+
StackMaster.stdout.puts "STDOUT or STDIN was not a TTY. Defaulting to no. To force yes use -y"
|
|
14
|
+
'n'
|
|
15
|
+
end
|
|
10
16
|
else
|
|
11
|
-
StackMaster.
|
|
12
|
-
StackMaster.
|
|
13
|
-
'n'
|
|
17
|
+
print StackMaster.non_interactive_answer
|
|
18
|
+
StackMaster.non_interactive_answer
|
|
14
19
|
end
|
|
15
|
-
else
|
|
16
|
-
print StackMaster.non_interactive_answer
|
|
17
|
-
StackMaster.non_interactive_answer
|
|
18
|
-
end
|
|
19
20
|
StackMaster.stdout.puts
|
|
20
21
|
answer == 'y'
|
|
21
22
|
end
|
|
@@ -44,11 +44,13 @@ module StackMaster
|
|
|
44
44
|
def assume_role_credentials(account, role)
|
|
45
45
|
credentials_key = "#{account}:#{role}"
|
|
46
46
|
@credentials.fetch(credentials_key) do
|
|
47
|
-
@credentials[credentials_key] = Aws::AssumeRoleCredentials.new(
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
47
|
+
@credentials[credentials_key] = Aws::AssumeRoleCredentials.new(
|
|
48
|
+
{
|
|
49
|
+
region: StackMaster.cloud_formation_driver.region,
|
|
50
|
+
role_arn: "arn:aws:iam::#{account}:role/#{role}",
|
|
51
|
+
role_session_name: "stack-master-role-assumer"
|
|
52
|
+
}
|
|
53
|
+
)
|
|
52
54
|
end
|
|
53
55
|
end
|
|
54
56
|
end
|
|
@@ -8,7 +8,9 @@ module StackMaster
|
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
def find(reference)
|
|
11
|
-
|
|
11
|
+
unless reference.is_a?(String) && !reference.empty?
|
|
12
|
+
raise ArgumentError, 'Security group references must be non-empty strings'
|
|
13
|
+
end
|
|
12
14
|
|
|
13
15
|
groups = @resource.security_groups({
|
|
14
16
|
filters: [
|
|
@@ -7,7 +7,9 @@ module StackMaster
|
|
|
7
7
|
end
|
|
8
8
|
|
|
9
9
|
def find(reference)
|
|
10
|
-
|
|
10
|
+
unless reference.is_a?(String) && !reference.empty?
|
|
11
|
+
raise ArgumentError, 'SNS topic references must be non-empty strings'
|
|
12
|
+
end
|
|
11
13
|
|
|
12
14
|
topic = @resource.topics.detect { |t| topic_name_from_arn(t.arn) == reference }
|
|
13
15
|
|
|
@@ -21,6 +23,5 @@ module StackMaster
|
|
|
21
23
|
def topic_name_from_arn(arn)
|
|
22
24
|
arn.split(":")[5]
|
|
23
25
|
end
|
|
24
|
-
|
|
25
26
|
end
|
|
26
27
|
end
|
|
@@ -4,7 +4,6 @@ module StackMaster
|
|
|
4
4
|
module SparkleFormation
|
|
5
5
|
module CompileTime
|
|
6
6
|
class AllowedPatternValidator < ValueValidator
|
|
7
|
-
|
|
8
7
|
KEY = :allowed_pattern
|
|
9
8
|
|
|
10
9
|
def initialize(name, definition, parameter)
|
|
@@ -17,6 +16,7 @@ module StackMaster
|
|
|
17
16
|
|
|
18
17
|
def check_is_valid
|
|
19
18
|
return true unless @definition.key?(KEY)
|
|
19
|
+
|
|
20
20
|
invalid_values.empty?
|
|
21
21
|
end
|
|
22
22
|
|
|
@@ -28,7 +28,6 @@ module StackMaster
|
|
|
28
28
|
def create_error
|
|
29
29
|
"#{@name}:#{invalid_values} does not match #{KEY}:#{@definition[KEY]}"
|
|
30
30
|
end
|
|
31
|
-
|
|
32
31
|
end
|
|
33
32
|
end
|
|
34
33
|
end
|
|
@@ -4,7 +4,6 @@ module StackMaster
|
|
|
4
4
|
module SparkleFormation
|
|
5
5
|
module CompileTime
|
|
6
6
|
class AllowedValuesValidator < ValueValidator
|
|
7
|
-
|
|
8
7
|
KEY = :allowed_values
|
|
9
8
|
|
|
10
9
|
def initialize(name, definition, parameter)
|
|
@@ -17,20 +16,20 @@ module StackMaster
|
|
|
17
16
|
|
|
18
17
|
def check_is_valid
|
|
19
18
|
return true unless @definition.key?(KEY)
|
|
19
|
+
|
|
20
20
|
invalid_values.empty?
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
def invalid_values
|
|
24
24
|
values = build_values(@definition, @parameter)
|
|
25
25
|
values.reject do |value|
|
|
26
|
-
@definition[KEY].any? { |allowed_value| allowed_value.to_s == value.to_s}
|
|
26
|
+
@definition[KEY].any? { |allowed_value| allowed_value.to_s == value.to_s }
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
def create_error
|
|
31
31
|
"#{@name}:#{invalid_values} is not in #{KEY}:#{@definition[KEY]}"
|
|
32
32
|
end
|
|
33
|
-
|
|
34
33
|
end
|
|
35
34
|
end
|
|
36
35
|
end
|
|
@@ -4,16 +4,17 @@ module StackMaster
|
|
|
4
4
|
module SparkleFormation
|
|
5
5
|
module CompileTime
|
|
6
6
|
class DefinitionsValidator
|
|
7
|
-
|
|
8
7
|
VALID_TYPES = [:string, :number]
|
|
9
8
|
def initialize(definitions)
|
|
10
9
|
@definitions = definitions
|
|
11
10
|
end
|
|
12
11
|
|
|
13
12
|
def validate
|
|
14
|
-
@definitions.each do|name, definition|
|
|
13
|
+
@definitions.each do |name, definition|
|
|
15
14
|
type = definition[:type]
|
|
16
|
-
|
|
15
|
+
unless is_valid(type)
|
|
16
|
+
raise ArgumentError.new "Unknown compile time parameter type: #{create_error(name, type)}"
|
|
17
|
+
end
|
|
17
18
|
end
|
|
18
19
|
end
|
|
19
20
|
|
|
@@ -26,8 +27,7 @@ module StackMaster
|
|
|
26
27
|
def create_error(name, type)
|
|
27
28
|
"#{name}:#{type} valid types are #{VALID_TYPES}"
|
|
28
29
|
end
|
|
29
|
-
|
|
30
30
|
end
|
|
31
31
|
end
|
|
32
32
|
end
|
|
33
|
-
end
|
|
33
|
+
end
|
|
@@ -4,7 +4,6 @@ module StackMaster
|
|
|
4
4
|
module SparkleFormation
|
|
5
5
|
module CompileTime
|
|
6
6
|
class EmptyValidator < ValueValidator
|
|
7
|
-
|
|
8
7
|
def initialize(name, definition, parameter)
|
|
9
8
|
@name = name
|
|
10
9
|
@definition = definition
|
|
@@ -25,7 +24,6 @@ module StackMaster
|
|
|
25
24
|
def create_error
|
|
26
25
|
"#{@name} cannot contain empty parameters:#{@parameter.inspect}"
|
|
27
26
|
end
|
|
28
|
-
|
|
29
27
|
end
|
|
30
28
|
end
|
|
31
29
|
end
|
|
@@ -4,7 +4,6 @@ module StackMaster
|
|
|
4
4
|
module SparkleFormation
|
|
5
5
|
module CompileTime
|
|
6
6
|
class MaxLengthValidator < ValueValidator
|
|
7
|
-
|
|
8
7
|
KEY = :max_length
|
|
9
8
|
|
|
10
9
|
def initialize(name, definition, parameter)
|
|
@@ -18,6 +17,7 @@ module StackMaster
|
|
|
18
17
|
def check_is_valid
|
|
19
18
|
return true unless @definition[:type] == :string
|
|
20
19
|
return true unless @definition.key?(KEY)
|
|
20
|
+
|
|
21
21
|
invalid_values.empty?
|
|
22
22
|
end
|
|
23
23
|
|
|
@@ -29,7 +29,6 @@ module StackMaster
|
|
|
29
29
|
def create_error
|
|
30
30
|
"#{@name}:#{invalid_values} must not exceed #{KEY}:#{@definition[KEY]} characters"
|
|
31
31
|
end
|
|
32
|
-
|
|
33
32
|
end
|
|
34
33
|
end
|
|
35
34
|
end
|
|
@@ -4,7 +4,6 @@ module StackMaster
|
|
|
4
4
|
module SparkleFormation
|
|
5
5
|
module CompileTime
|
|
6
6
|
class MaxSizeValidator < ValueValidator
|
|
7
|
-
|
|
8
7
|
KEY = :max_size
|
|
9
8
|
|
|
10
9
|
def initialize(name, definition, parameter)
|
|
@@ -18,6 +17,7 @@ module StackMaster
|
|
|
18
17
|
def check_is_valid
|
|
19
18
|
return true unless @definition[:type] == :number
|
|
20
19
|
return true unless @definition.key?(KEY)
|
|
20
|
+
|
|
21
21
|
invalid_values.empty?
|
|
22
22
|
end
|
|
23
23
|
|
|
@@ -29,7 +29,6 @@ module StackMaster
|
|
|
29
29
|
def create_error
|
|
30
30
|
"#{@name}:#{invalid_values} must not be greater than #{KEY}:#{@definition[KEY]}"
|
|
31
31
|
end
|
|
32
|
-
|
|
33
32
|
end
|
|
34
33
|
end
|
|
35
34
|
end
|
|
@@ -4,7 +4,6 @@ module StackMaster
|
|
|
4
4
|
module SparkleFormation
|
|
5
5
|
module CompileTime
|
|
6
6
|
class MinLengthValidator < ValueValidator
|
|
7
|
-
|
|
8
7
|
KEY = :min_length
|
|
9
8
|
|
|
10
9
|
def initialize(name, definition, parameter)
|
|
@@ -18,18 +17,18 @@ module StackMaster
|
|
|
18
17
|
def check_is_valid
|
|
19
18
|
return true unless @definition[:type] == :string
|
|
20
19
|
return true unless @definition.key?(KEY)
|
|
20
|
+
|
|
21
21
|
invalid_values.empty?
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
def invalid_values
|
|
25
25
|
values = build_values(@definition, @parameter)
|
|
26
|
-
values.select { |value| value.length < @definition[KEY].to_i}
|
|
26
|
+
values.select { |value| value.length < @definition[KEY].to_i }
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
def create_error
|
|
30
30
|
"#{@name}:#{invalid_values} must be at least #{KEY}:#{@definition[KEY]} characters"
|
|
31
31
|
end
|
|
32
|
-
|
|
33
32
|
end
|
|
34
33
|
end
|
|
35
34
|
end
|
|
@@ -4,7 +4,6 @@ module StackMaster
|
|
|
4
4
|
module SparkleFormation
|
|
5
5
|
module CompileTime
|
|
6
6
|
class MinSizeValidator < ValueValidator
|
|
7
|
-
|
|
8
7
|
KEY = :min_size
|
|
9
8
|
|
|
10
9
|
def initialize(name, definition, parameter)
|
|
@@ -18,18 +17,18 @@ module StackMaster
|
|
|
18
17
|
def check_is_valid
|
|
19
18
|
return true unless @definition[:type] == :number
|
|
20
19
|
return true unless @definition.key?(KEY)
|
|
20
|
+
|
|
21
21
|
invalid_values.empty?
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
def invalid_values
|
|
25
25
|
values = build_values(@definition, @parameter)
|
|
26
|
-
values.select { |value| value.to_f < @definition[KEY].to_f}
|
|
26
|
+
values.select { |value| value.to_f < @definition[KEY].to_f }
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
def create_error
|
|
30
30
|
"#{@name}:#{invalid_values} must not be lesser than #{KEY}:#{@definition[KEY]}"
|
|
31
31
|
end
|
|
32
|
-
|
|
33
32
|
end
|
|
34
33
|
end
|
|
35
34
|
end
|
|
@@ -4,7 +4,6 @@ module StackMaster
|
|
|
4
4
|
module SparkleFormation
|
|
5
5
|
module CompileTime
|
|
6
6
|
class NumberValidator < ValueValidator
|
|
7
|
-
|
|
8
7
|
def initialize(name, definition, parameter)
|
|
9
8
|
@name = name
|
|
10
9
|
@definition = definition
|
|
@@ -15,6 +14,7 @@ module StackMaster
|
|
|
15
14
|
|
|
16
15
|
def check_is_valid
|
|
17
16
|
return true unless @definition[:type] == :number
|
|
17
|
+
|
|
18
18
|
invalid_values.empty?
|
|
19
19
|
end
|
|
20
20
|
|
|
@@ -28,7 +28,6 @@ module StackMaster
|
|
|
28
28
|
def create_error
|
|
29
29
|
"#{@name}:#{invalid_values} are not Numbers"
|
|
30
30
|
end
|
|
31
|
-
|
|
32
31
|
end
|
|
33
32
|
end
|
|
34
33
|
end
|
|
@@ -4,7 +4,6 @@ module StackMaster
|
|
|
4
4
|
module SparkleFormation
|
|
5
5
|
module CompileTime
|
|
6
6
|
class StateBuilder
|
|
7
|
-
|
|
8
7
|
def initialize(definitions, parameters)
|
|
9
8
|
@definitions = definitions
|
|
10
9
|
@parameters = parameters
|
|
@@ -25,7 +24,6 @@ module StackMaster
|
|
|
25
24
|
def create_value(definition, parameter)
|
|
26
25
|
ValueBuilder.new(definition, parameter).build
|
|
27
26
|
end
|
|
28
|
-
|
|
29
27
|
end
|
|
30
28
|
end
|
|
31
29
|
end
|
|
@@ -4,7 +4,6 @@ module StackMaster
|
|
|
4
4
|
module SparkleFormation
|
|
5
5
|
module CompileTime
|
|
6
6
|
class StringValidator < ValueValidator
|
|
7
|
-
|
|
8
7
|
def initialize(name, definition, parameter)
|
|
9
8
|
@name = name
|
|
10
9
|
@definition = definition
|
|
@@ -15,18 +14,18 @@ module StackMaster
|
|
|
15
14
|
|
|
16
15
|
def check_is_valid
|
|
17
16
|
return true unless @definition[:type] == :string
|
|
17
|
+
|
|
18
18
|
invalid_values.empty?
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
def invalid_values
|
|
22
22
|
values = build_values(@definition, @parameter)
|
|
23
|
-
values.reject { |value| value.is_a?(String)}
|
|
23
|
+
values.reject { |value| value.is_a?(String) }
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
def create_error
|
|
27
27
|
"#{@name}:#{invalid_values} are not Strings"
|
|
28
28
|
end
|
|
29
|
-
|
|
30
29
|
end
|
|
31
30
|
end
|
|
32
31
|
end
|
|
@@ -2,7 +2,6 @@ module StackMaster
|
|
|
2
2
|
module SparkleFormation
|
|
3
3
|
module CompileTime
|
|
4
4
|
class ValueBuilder
|
|
5
|
-
|
|
6
5
|
def initialize(definition, parameter)
|
|
7
6
|
@definition = definition
|
|
8
7
|
@parameter = parameter
|
|
@@ -33,7 +32,6 @@ module StackMaster
|
|
|
33
32
|
@value = @value.map { |item| item.is_a?(String) ? item.to_f : item } if @value.is_a?(Array)
|
|
34
33
|
end
|
|
35
34
|
end
|
|
36
|
-
|
|
37
35
|
end
|
|
38
36
|
end
|
|
39
37
|
end
|
|
@@ -2,7 +2,6 @@ module StackMaster
|
|
|
2
2
|
module SparkleFormation
|
|
3
3
|
module CompileTime
|
|
4
4
|
class ValueValidator
|
|
5
|
-
|
|
6
5
|
attr_reader :is_valid, :error
|
|
7
6
|
|
|
8
7
|
def validate
|
|
@@ -31,10 +30,10 @@ module StackMaster
|
|
|
31
30
|
if definition[:multiple] && parameter.is_a?(String)
|
|
32
31
|
return parameter.split(',').map(&:strip)
|
|
33
32
|
end
|
|
33
|
+
|
|
34
34
|
parameter.is_a?(Array) ? parameter : [parameter]
|
|
35
35
|
end
|
|
36
|
-
|
|
37
36
|
end
|
|
38
37
|
end
|
|
39
38
|
end
|
|
40
|
-
end
|
|
39
|
+
end
|
|
@@ -12,17 +12,16 @@ module StackMaster
|
|
|
12
12
|
module SparkleFormation
|
|
13
13
|
module CompileTime
|
|
14
14
|
class ValueValidatorFactory
|
|
15
|
-
|
|
16
15
|
VALIDATORS_TYPES = [
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
16
|
+
EmptyValidator,
|
|
17
|
+
StringValidator,
|
|
18
|
+
NumberValidator,
|
|
19
|
+
AllowedValuesValidator,
|
|
20
|
+
AllowedPatternValidator,
|
|
21
|
+
MaxLengthValidator,
|
|
22
|
+
MinLengthValidator,
|
|
23
|
+
MaxSizeValidator,
|
|
24
|
+
MinSizeValidator
|
|
26
25
|
]
|
|
27
26
|
|
|
28
27
|
def initialize(name, definition, parameter)
|
|
@@ -32,10 +31,9 @@ module StackMaster
|
|
|
32
31
|
end
|
|
33
32
|
|
|
34
33
|
def build
|
|
35
|
-
VALIDATORS_TYPES.map { |validator| validator.new(@name, @definition, @parameter)}
|
|
34
|
+
VALIDATORS_TYPES.map { |validator| validator.new(@name, @definition, @parameter) }
|
|
36
35
|
end
|
|
37
|
-
|
|
38
36
|
end
|
|
39
37
|
end
|
|
40
38
|
end
|
|
41
|
-
end
|
|
39
|
+
end
|
|
@@ -17,7 +17,6 @@ module StackMaster
|
|
|
17
17
|
value
|
|
18
18
|
end
|
|
19
19
|
end
|
|
20
|
-
|
|
21
20
|
end.new(vars, prefix)
|
|
22
21
|
end
|
|
23
22
|
|
|
@@ -64,4 +63,3 @@ end
|
|
|
64
63
|
|
|
65
64
|
SparkleFormation::SparkleAttribute::Aws.send(:include, StackMaster::SparkleFormation::UserDataFile)
|
|
66
65
|
SparkleFormation::SparkleAttribute::Aws.send(:include, StackMaster::SparkleFormation::JoinedFile)
|
|
67
|
-
|
|
@@ -6,28 +6,31 @@ module StackMaster
|
|
|
6
6
|
output_regex = %r{(?:(?<region>[^:]+):)?(?<identity_store_id>[^:/]+)/(?<group_name>.+)}
|
|
7
7
|
|
|
8
8
|
if !reference.is_a?(String) || !(match = output_regex.match(reference))
|
|
9
|
-
|
|
9
|
+
raise ArgumentError, 'Sso group lookup parameter must be in the form of [region:]identity-store-id/group_name'
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
region = match[:region] || StackMaster.cloud_formation_driver.region
|
|
13
13
|
client = Aws::IdentityStore::Client.new({ region: region })
|
|
14
14
|
|
|
15
15
|
begin
|
|
16
|
-
response = client.get_group_id(
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
16
|
+
response = client.get_group_id(
|
|
17
|
+
{
|
|
18
|
+
identity_store_id: match[:identity_store_id],
|
|
19
|
+
alternate_identifier: {
|
|
20
|
+
unique_attribute: {
|
|
21
|
+
attribute_path: 'displayName',
|
|
22
|
+
attribute_value: match[:group_name],
|
|
23
|
+
},
|
|
22
24
|
},
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
+
}
|
|
26
|
+
)
|
|
25
27
|
return response.group_id
|
|
26
28
|
rescue Aws::IdentityStore::Errors::ServiceError => e
|
|
27
|
-
|
|
29
|
+
puts "Error calling GetGroupId: #{e.message}"
|
|
28
30
|
end
|
|
29
31
|
|
|
30
|
-
raise SsoGroupNotFound,
|
|
32
|
+
raise SsoGroupNotFound,
|
|
33
|
+
"No group with name #{match[:group_name]} found in identity store #{match[:identity_store_id]} in #{region}"
|
|
31
34
|
end
|
|
32
35
|
end
|
|
33
36
|
end
|