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.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +0 -5
  3. data/lib/stack_master/aws_driver/cloud_formation.rb +21 -19
  4. data/lib/stack_master/aws_driver/s3.rb +18 -11
  5. data/lib/stack_master/change_set.rb +5 -5
  6. data/lib/stack_master/cli.rb +24 -9
  7. data/lib/stack_master/commands/apply.rb +5 -1
  8. data/lib/stack_master/commands/delete.rb +2 -3
  9. data/lib/stack_master/commands/drift.rb +6 -3
  10. data/lib/stack_master/commands/init.rb +6 -5
  11. data/lib/stack_master/commands/nag.rb +0 -1
  12. data/lib/stack_master/commands/resources.rb +9 -1
  13. data/lib/stack_master/commands/tidy.rb +4 -1
  14. data/lib/stack_master/config.rb +16 -11
  15. data/lib/stack_master/identity.rb +2 -1
  16. data/lib/stack_master/parameter_loader.rb +3 -4
  17. data/lib/stack_master/parameter_resolver.rb +4 -1
  18. data/lib/stack_master/parameter_resolvers/acm_certificate.rb +4 -1
  19. data/lib/stack_master/parameter_resolvers/ami_finder.rb +1 -1
  20. data/lib/stack_master/parameter_resolvers/ejson.rb +7 -4
  21. data/lib/stack_master/parameter_resolvers/env.rb +1 -2
  22. data/lib/stack_master/parameter_resolvers/latest_container.rb +6 -4
  23. data/lib/stack_master/parameter_resolvers/one_password.rb +7 -3
  24. data/lib/stack_master/parameter_resolvers/parameter_store.rb +1 -5
  25. data/lib/stack_master/parameter_resolvers/security_group.rb +1 -1
  26. data/lib/stack_master/parameter_resolvers/sso_group_id.rb +2 -1
  27. data/lib/stack_master/parameter_resolvers/stack_output.rb +3 -1
  28. data/lib/stack_master/parameter_validator.rb +1 -0
  29. data/lib/stack_master/prompter.rb +11 -10
  30. data/lib/stack_master/resolver_array.rb +0 -1
  31. data/lib/stack_master/role_assumer.rb +7 -5
  32. data/lib/stack_master/security_group_finder.rb +3 -1
  33. data/lib/stack_master/sns_topic_finder.rb +3 -2
  34. data/lib/stack_master/sparkle_formation/compile_time/allowed_pattern_validator.rb +1 -2
  35. data/lib/stack_master/sparkle_formation/compile_time/allowed_values_validator.rb +2 -3
  36. data/lib/stack_master/sparkle_formation/compile_time/definitions_validator.rb +5 -5
  37. data/lib/stack_master/sparkle_formation/compile_time/empty_validator.rb +0 -2
  38. data/lib/stack_master/sparkle_formation/compile_time/max_length_validator.rb +1 -2
  39. data/lib/stack_master/sparkle_formation/compile_time/max_size_validator.rb +1 -2
  40. data/lib/stack_master/sparkle_formation/compile_time/min_length_validator.rb +2 -3
  41. data/lib/stack_master/sparkle_formation/compile_time/min_size_validator.rb +2 -3
  42. data/lib/stack_master/sparkle_formation/compile_time/number_validator.rb +1 -2
  43. data/lib/stack_master/sparkle_formation/compile_time/parameters_validator.rb +0 -1
  44. data/lib/stack_master/sparkle_formation/compile_time/state_builder.rb +0 -2
  45. data/lib/stack_master/sparkle_formation/compile_time/string_validator.rb +2 -3
  46. data/lib/stack_master/sparkle_formation/compile_time/value_builder.rb +0 -2
  47. data/lib/stack_master/sparkle_formation/compile_time/value_validator.rb +2 -3
  48. data/lib/stack_master/sparkle_formation/compile_time/value_validator_factory.rb +11 -13
  49. data/lib/stack_master/sparkle_formation/template_file.rb +0 -2
  50. data/lib/stack_master/sso_group_id_finder.rb +14 -11
  51. data/lib/stack_master/stack.rb +47 -16
  52. data/lib/stack_master/stack_definition.rb +3 -1
  53. data/lib/stack_master/stack_differ.rb +4 -0
  54. data/lib/stack_master/stack_events/fetcher.rb +3 -1
  55. data/lib/stack_master/stack_events/presenter.rb +6 -1
  56. data/lib/stack_master/stack_events/streamer.rb +3 -1
  57. data/lib/stack_master/stack_status.rb +1 -0
  58. data/lib/stack_master/template_compilers/sparkle_formation.rb +10 -7
  59. data/lib/stack_master/template_utils.rb +6 -2
  60. data/lib/stack_master/test_driver/cloud_formation.rb +27 -10
  61. data/lib/stack_master/utils.rb +1 -0
  62. data/lib/stack_master/validator.rb +6 -5
  63. data/lib/stack_master/version.rb +1 -1
  64. data/lib/stack_master.rb +2 -0
  65. metadata +19 -9
  66. 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
@@ -12,7 +12,7 @@ module StackMaster
12
12
  security_group_finder.find(value)
13
13
  end
14
14
 
15
- private
15
+ private
16
16
 
17
17
  def security_group_finder
18
18
  StackMaster::SecurityGroupFinder.new(@stack_definition.region)
@@ -12,7 +12,8 @@ module StackMaster
12
12
  sso_group_id_finder.find(value)
13
13
  end
14
14
 
15
- private
15
+ private
16
+
16
17
  def sso_group_id_finder
17
18
  StackMaster::SsoGroupIdFinder.new()
18
19
  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 { |stack_output| stack_output.output_key == output_name.camelize || stack_output.output_key == output_name }
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 = if StackMaster.interactive?
8
- if StackMaster.stdin.tty? && StackMaster.stdout.tty?
9
- StackMaster.stdin.getch.chomp
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.stdout.puts
12
- StackMaster.stdout.puts "STDOUT or STDIN was not a TTY. Defaulting to no. To force yes use -y"
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
@@ -32,4 +32,3 @@ module StackMaster
32
32
  end
33
33
  end
34
34
  end
35
-
@@ -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
- region: StackMaster.cloud_formation_driver.region,
49
- role_arn: "arn:aws:iam::#{account}:role/#{role}",
50
- role_session_name: "stack-master-role-assumer"
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
- raise ArgumentError, 'Security group references must be non-empty strings' unless reference.is_a?(String) && !reference.empty?
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
- raise ArgumentError, 'SNS topic references must be non-empty strings' unless reference.is_a?(String) && !reference.empty?
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
- raise ArgumentError.new "Unknown compile time parameter type: #{create_error(name, type)}" unless is_valid(type)
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 ParametersValidator
7
-
8
7
  def initialize(definitions, parameters)
9
8
  @definitions = definitions
10
9
  @parameters = parameters
@@ -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
- EmptyValidator,
18
- StringValidator,
19
- NumberValidator,
20
- AllowedValuesValidator,
21
- AllowedPatternValidator,
22
- MaxLengthValidator,
23
- MinLengthValidator,
24
- MaxSizeValidator,
25
- MinSizeValidator
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
- raise ArgumentError, 'Sso group lookup parameter must be in the form of [region:]identity-store-id/group_name'
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
- identity_store_id: match[:identity_store_id],
18
- alternate_identifier: {
19
- unique_attribute: {
20
- attribute_path: 'displayName',
21
- attribute_value: match[:group_name],
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
- puts "Error calling GetGroupId: #{e.message}"
29
+ puts "Error calling GetGroupId: #{e.message}"
28
30
  end
29
31
 
30
- raise SsoGroupNotFound, "No group with name #{match[:group_name]} found in identity store #{match[:identity_store_id]} in #{region}"
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