sfn 3.0.30 → 3.0.32

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 (84) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -0
  3. data/bin/sfn +16 -14
  4. data/lib/chef/knife/knife_plugin_seed.rb +12 -12
  5. data/lib/sfn.rb +17 -17
  6. data/lib/sfn/api_provider.rb +3 -3
  7. data/lib/sfn/api_provider/google.rb +2 -2
  8. data/lib/sfn/api_provider/terraform.rb +2 -2
  9. data/lib/sfn/cache.rb +9 -9
  10. data/lib/sfn/callback.rb +6 -6
  11. data/lib/sfn/callback/aws_assume_role.rb +5 -5
  12. data/lib/sfn/callback/aws_mfa.rb +8 -6
  13. data/lib/sfn/callback/stack_policy.rb +15 -15
  14. data/lib/sfn/command.rb +37 -36
  15. data/lib/sfn/command/conf.rb +12 -12
  16. data/lib/sfn/command/create.rb +9 -9
  17. data/lib/sfn/command/describe.rb +6 -6
  18. data/lib/sfn/command/destroy.rb +8 -8
  19. data/lib/sfn/command/diff.rb +31 -31
  20. data/lib/sfn/command/events.rb +6 -6
  21. data/lib/sfn/command/export.rb +8 -8
  22. data/lib/sfn/command/graph.rb +21 -21
  23. data/lib/sfn/command/graph/aws.rb +34 -34
  24. data/lib/sfn/command/graph/provider.rb +1 -1
  25. data/lib/sfn/command/graph/terraform.rb +41 -41
  26. data/lib/sfn/command/import.rb +17 -17
  27. data/lib/sfn/command/init.rb +15 -15
  28. data/lib/sfn/command/inspect.rb +16 -16
  29. data/lib/sfn/command/lint.rb +6 -6
  30. data/lib/sfn/command/list.rb +2 -2
  31. data/lib/sfn/command/plan.rb +227 -0
  32. data/lib/sfn/command/print.rb +4 -4
  33. data/lib/sfn/command/promote.rb +2 -2
  34. data/lib/sfn/command/update.rb +19 -144
  35. data/lib/sfn/command/validate.rb +17 -13
  36. data/lib/sfn/command_module.rb +6 -5
  37. data/lib/sfn/command_module/base.rb +8 -8
  38. data/lib/sfn/command_module/callbacks.rb +5 -5
  39. data/lib/sfn/command_module/planning.rb +151 -0
  40. data/lib/sfn/command_module/stack.rb +34 -34
  41. data/lib/sfn/command_module/template.rb +50 -50
  42. data/lib/sfn/config.rb +46 -44
  43. data/lib/sfn/config/conf.rb +3 -3
  44. data/lib/sfn/config/create.rb +9 -9
  45. data/lib/sfn/config/describe.rb +7 -7
  46. data/lib/sfn/config/destroy.rb +1 -1
  47. data/lib/sfn/config/diff.rb +3 -3
  48. data/lib/sfn/config/events.rb +9 -9
  49. data/lib/sfn/config/export.rb +5 -5
  50. data/lib/sfn/config/graph.rb +10 -10
  51. data/lib/sfn/config/import.rb +4 -4
  52. data/lib/sfn/config/init.rb +1 -1
  53. data/lib/sfn/config/inspect.rb +16 -16
  54. data/lib/sfn/config/lint.rb +5 -5
  55. data/lib/sfn/config/list.rb +6 -6
  56. data/lib/sfn/config/plan.rb +28 -0
  57. data/lib/sfn/config/print.rb +5 -5
  58. data/lib/sfn/config/promote.rb +4 -4
  59. data/lib/sfn/config/update.rb +18 -18
  60. data/lib/sfn/config/validate.rb +30 -30
  61. data/lib/sfn/lint.rb +5 -5
  62. data/lib/sfn/lint/definition.rb +3 -3
  63. data/lib/sfn/lint/rule.rb +3 -3
  64. data/lib/sfn/lint/rule_set.rb +2 -2
  65. data/lib/sfn/monkey_patch.rb +2 -2
  66. data/lib/sfn/monkey_patch/stack.rb +27 -27
  67. data/lib/sfn/monkey_patch/stack/azure.rb +1 -1
  68. data/lib/sfn/monkey_patch/stack/google.rb +5 -5
  69. data/lib/sfn/planner.rb +4 -4
  70. data/lib/sfn/planner/aws.rb +114 -70
  71. data/lib/sfn/provider.rb +13 -13
  72. data/lib/sfn/utils.rb +10 -10
  73. data/lib/sfn/utils/debug.rb +2 -2
  74. data/lib/sfn/utils/json.rb +1 -1
  75. data/lib/sfn/utils/object_storage.rb +3 -3
  76. data/lib/sfn/utils/output.rb +4 -4
  77. data/lib/sfn/utils/path_selector.rb +15 -15
  78. data/lib/sfn/utils/ssher.rb +4 -4
  79. data/lib/sfn/utils/stack_exporter.rb +16 -16
  80. data/lib/sfn/utils/stack_parameter_scrubber.rb +6 -6
  81. data/lib/sfn/utils/stack_parameter_validator.rb +22 -22
  82. data/lib/sfn/version.rb +1 -1
  83. data/sfn.gemspec +32 -32
  84. metadata +16 -13
@@ -1,4 +1,4 @@
1
- require 'sfn'
1
+ require "sfn"
2
2
 
3
3
  module Sfn
4
4
  class Config
@@ -6,22 +6,22 @@ module Sfn
6
6
  class Lint < Validate
7
7
  attribute(
8
8
  :lint_directory, String,
9
- :description => 'Directory containing lint rule sets',
9
+ :description => "Directory containing lint rule sets",
10
10
  :multiple => true,
11
11
  )
12
12
  attribute(
13
13
  :disabled_rule_set, String,
14
- :description => 'Disable rule set from being applied',
14
+ :description => "Disable rule set from being applied",
15
15
  :multiple => true,
16
16
  )
17
17
  attribute(
18
18
  :enabled_rule_set, String,
19
- :description => 'Only apply this rule set',
19
+ :description => "Only apply this rule set",
20
20
  :multiple => true,
21
21
  )
22
22
  attribute(
23
23
  :local_rule_sets_only, [TrueClass, FalseClass],
24
- :description => 'Only apply rule sets provided by lint directory',
24
+ :description => "Only apply rule sets provided by lint directory",
25
25
  :default => false,
26
26
  )
27
27
  end
@@ -1,4 +1,4 @@
1
- require 'sfn'
1
+ require "sfn"
2
2
 
3
3
  module Sfn
4
4
  class Config
@@ -7,19 +7,19 @@ module Sfn
7
7
  attribute(
8
8
  :attribute, String,
9
9
  :multiple => true,
10
- :description => 'Attribute of stack to print',
11
- :short_flag => 'a',
10
+ :description => "Attribute of stack to print",
11
+ :short_flag => "a",
12
12
  )
13
13
  attribute(
14
14
  :all_attributes, [TrueClass, FalseClass],
15
- :description => 'Print all available attributes',
16
- :short_flag => 'A',
15
+ :description => "Print all available attributes",
16
+ :short_flag => "A",
17
17
  )
18
18
  attribute(
19
19
  :status, String,
20
20
  :multiple => true,
21
21
  :description => 'Match stacks with given status. Use "none" to disable.',
22
- :short_flag => 's',
22
+ :short_flag => "s",
23
23
  )
24
24
  end
25
25
  end
@@ -0,0 +1,28 @@
1
+ require "sfn"
2
+
3
+ module Sfn
4
+ class Config
5
+ # Plan command configuration
6
+ class Plan < Create
7
+ # Remove the plan option. Command specific options will
8
+ # cause a conflict if same option name as command is used.
9
+ # Also, since this is a plan command, we are always running
10
+ # a plan, because that's the command.
11
+ attributes.delete(:plan)
12
+ # Default diffs to be enabled
13
+ attributes.set(:diffs, :default, true)
14
+
15
+ attribute(
16
+ :plan_name, String,
17
+ :description => "Custom plan name or ID (not applicable to all providers)",
18
+ )
19
+
20
+ attribute(
21
+ :list, BOOLEAN,
22
+ :description => "List all available plans for stack",
23
+ :default => false,
24
+ :short_flag => "l",
25
+ )
26
+ end
27
+ end
28
+ end
@@ -1,4 +1,4 @@
1
- require 'sfn'
1
+ require "sfn"
2
2
 
3
3
  module Sfn
4
4
  class Config
@@ -6,18 +6,18 @@ module Sfn
6
6
  class Print < Validate
7
7
  attribute(
8
8
  :write_to_file, String,
9
- :description => 'Write compiled SparkleFormation template to path provided',
10
- :short_flag => 'w',
9
+ :description => "Write compiled SparkleFormation template to path provided",
10
+ :short_flag => "w",
11
11
  )
12
12
 
13
13
  attribute(
14
14
  :sparkle_dump, [TrueClass, FalseClass],
15
- :description => 'Do not use provider customized dump behavior',
15
+ :description => "Do not use provider customized dump behavior",
16
16
  )
17
17
 
18
18
  attribute(
19
19
  :yaml, [TrueClass, FalseClass],
20
- :description => 'Output template content in YAML format',
20
+ :description => "Output template content in YAML format",
21
21
  )
22
22
  end
23
23
  end
@@ -1,4 +1,4 @@
1
- require 'sfn'
1
+ require "sfn"
2
2
 
3
3
  module Sfn
4
4
  class Config
@@ -6,15 +6,15 @@ module Sfn
6
6
  class Promote < Config
7
7
  attribute(
8
8
  :accounts, String,
9
- :description => 'JSON accounts file path',
9
+ :description => "JSON accounts file path",
10
10
  )
11
11
  attribute(
12
12
  :bucket, String,
13
- :description => 'Bucket name containing the exports',
13
+ :description => "Bucket name containing the exports",
14
14
  )
15
15
  attribute(
16
16
  :bucket_prefix, String,
17
- :description => 'Key prefix within remote bucket',
17
+ :description => "Key prefix within remote bucket",
18
18
  )
19
19
  end
20
20
  end
@@ -1,4 +1,4 @@
1
- require 'sfn'
1
+ require "sfn"
2
2
 
3
3
  module Sfn
4
4
  class Config
@@ -7,22 +7,22 @@ module Sfn
7
7
  attribute(
8
8
  :apply_stack, String,
9
9
  :multiple => true,
10
- :description => 'Apply outputs from stack to input parameters',
11
- :short_flag => 'A',
10
+ :description => "Apply outputs from stack to input parameters",
11
+ :short_flag => "A",
12
12
  )
13
13
  attribute(
14
14
  :apply_mapping, Smash,
15
- :description => 'Customize apply stack mapping as [StackName__]OutputName:ParameterName',
15
+ :description => "Customize apply stack mapping as [StackName__]OutputName:ParameterName",
16
16
  )
17
17
  attribute(
18
18
  :parameter, Smash,
19
19
  :multiple => true,
20
- :description => '[DEPRECATED - use `parameters`] Pass template parameters directly (ParamName:ParamValue)',
20
+ :description => "[DEPRECATED - use `parameters`] Pass template parameters directly (ParamName:ParamValue)",
21
21
  :coerce => lambda { |v, inst|
22
22
  result = inst.data[:parameter] || Array.new
23
23
  case v
24
24
  when String
25
- v.split(',').each do |item|
25
+ v.split(",").each do |item|
26
26
  result.push(Smash[*item.split(/[=:]/, 2)])
27
27
  end
28
28
  else
@@ -30,39 +30,39 @@ module Sfn
30
30
  end
31
31
  {:bogo_multiple => result}
32
32
  },
33
- :short_flag => 'R',
33
+ :short_flag => "R",
34
34
  )
35
35
  attribute(
36
36
  :parameters, Smash,
37
- :description => 'Pass template parameters directly',
38
- :short_flag => 'm',
37
+ :description => "Pass template parameters directly",
38
+ :short_flag => "m",
39
39
  )
40
40
  attribute(
41
41
  :plan, [TrueClass, FalseClass],
42
42
  :default => true,
43
- :description => 'Provide planning information prior to update',
44
- :short_flag => 'l',
43
+ :description => "Provide planning information prior to update",
44
+ :short_flag => "l",
45
45
  )
46
46
  attribute(
47
47
  :plan_only, [TrueClass, FalseClass],
48
48
  :default => false,
49
- :description => 'Exit after plan display',
49
+ :description => "Exit after plan display",
50
50
  )
51
51
  attribute(
52
52
  :diffs, [TrueClass, FalseClass],
53
- :description => 'Show planner content diff',
54
- :short_flag => 'D',
53
+ :description => "Show planner content diff",
54
+ :short_flag => "D",
55
55
  )
56
56
  attribute(
57
57
  :merge_api_options, [TrueClass, FalseClass],
58
- :description => 'Merge API options defined within configuration on update',
58
+ :description => "Merge API options defined within configuration on update",
59
59
  :default => false,
60
60
  )
61
61
  attribute(
62
62
  :parameter_validation, String,
63
- :allowed => ['default', 'none', 'current', 'expected'],
64
- :description => 'Stack parameter validation behavior',
65
- :default => 'default',
63
+ :allowed => ["default", "none", "current", "expected"],
64
+ :description => "Stack parameter validation behavior",
65
+ :default => "default",
66
66
  )
67
67
  end
68
68
  end
@@ -1,4 +1,4 @@
1
- require 'sfn'
1
+ require "sfn"
2
2
 
3
3
  module Sfn
4
4
  class Config
@@ -6,80 +6,80 @@ module Sfn
6
6
  class Validate < Config
7
7
  attribute(
8
8
  :processing, [TrueClass, FalseClass],
9
- :description => 'Call the unicorns and explode the glitter bombs',
9
+ :description => "Call the unicorns and explode the glitter bombs",
10
10
  :default => true,
11
- :short_flag => 'P',
11
+ :short_flag => "P",
12
12
  )
13
13
  attribute(
14
14
  :file, String,
15
- :description => 'Path to template file',
15
+ :description => "Path to template file",
16
16
  :default => nil,
17
- :short_flag => 'f',
17
+ :short_flag => "f",
18
18
  )
19
19
  attribute(
20
20
  :file_path_prompt, [TrueClass, FalseClass],
21
21
  :default => true,
22
- :description => 'Enable interactive prompt for template path discovery',
23
- :short_flag => 'F',
22
+ :description => "Enable interactive prompt for template path discovery",
23
+ :short_flag => "F",
24
24
  )
25
25
  attribute(
26
26
  :base_directory, String,
27
- :description => 'Path to root of of templates directory',
28
- :short_flag => 'b',
27
+ :description => "Path to root of of templates directory",
28
+ :short_flag => "b",
29
29
  )
30
30
  attribute(
31
31
  :no_base_directory, [TrueClass, FalseClass],
32
- :description => 'Unset any value used for the template root directory path',
33
- :short_flag => 'n',
32
+ :description => "Unset any value used for the template root directory path",
33
+ :short_flag => "n",
34
34
  )
35
35
  attribute(
36
36
  :translate, String,
37
- :description => 'Translate generated template to given provider',
38
- :short_flag => 't',
37
+ :description => "Translate generated template to given provider",
38
+ :short_flag => "t",
39
39
  )
40
40
  attribute(
41
41
  :translate_chunk, Integer,
42
- :description => 'Chunk length for serialization',
42
+ :description => "Chunk length for serialization",
43
43
  :coerce => lambda { |v| v.to_i },
44
- :short_flag => 'T',
44
+ :short_flag => "T",
45
45
  )
46
46
  attribute(
47
47
  :apply_nesting, [String, Symbol],
48
- :default => 'deep',
49
- :description => 'Apply stack nesting',
50
- :short_flag => 'a',
48
+ :default => "deep",
49
+ :description => "Apply stack nesting",
50
+ :short_flag => "a",
51
51
  )
52
52
  attribute(
53
53
  :nesting_bucket, String,
54
- :description => 'Bucket to use for storing nested stack templates',
55
- :short_flag => 'N',
54
+ :description => "Bucket to use for storing nested stack templates",
55
+ :short_flag => "N",
56
56
  )
57
57
  attribute(
58
58
  :nesting_prefix, String,
59
- :description => 'File name prefix for storing template in bucket',
60
- :short_flag => 'Y',
59
+ :description => "File name prefix for storing template in bucket",
60
+ :short_flag => "Y",
61
61
  )
62
62
  attribute(
63
63
  :print_only, [TrueClass, FalseClass],
64
- :description => 'Print the resulting stack template',
65
- :short_flag => 'r',
64
+ :description => "Print the resulting stack template",
65
+ :short_flag => "r",
66
66
  )
67
67
  attribute(
68
68
  :sparkle_pack, String,
69
69
  :multiple => true,
70
- :description => 'Load SparklePack gem',
70
+ :description => "Load SparklePack gem",
71
71
  :coerce => lambda { |s| s.to_s },
72
- :short_flag => 's',
72
+ :short_flag => "s",
73
73
  )
74
74
  attribute(
75
75
  :compile_parameters, Smash,
76
- :description => 'Pass template compile time parameters directly',
77
- :short_flag => 'o',
76
+ :description => "Pass template compile time parameters directly",
77
+ :short_flag => "o",
78
78
  :coerce => lambda { |v|
79
79
  case v
80
80
  when String
81
81
  result = Smash.new
82
- v.split(',').each do |item_pair|
82
+ v.split(",").each do |item_pair|
83
83
  key, value = item_pair.split(/[=:]/, 2)
84
84
  result[key] = value
85
85
  end
@@ -104,7 +104,7 @@ module Sfn
104
104
  )
105
105
  attribute(
106
106
  :upload_root_template, [TrueClass, FalseClass],
107
- :description => 'Upload root template to storage bucket',
107
+ :description => "Upload root template to storage bucket",
108
108
  )
109
109
  end
110
110
  end
@@ -1,10 +1,10 @@
1
- require 'sfn'
2
- require 'jmespath'
1
+ require "sfn"
2
+ require "jmespath"
3
3
 
4
4
  module Sfn
5
5
  module Lint
6
- autoload :Definition, 'sfn/lint/definition'
7
- autoload :Rule, 'sfn/lint/rule'
8
- autoload :RuleSet, 'sfn/lint/rule_set'
6
+ autoload :Definition, "sfn/lint/definition"
7
+ autoload :Rule, "sfn/lint/rule"
8
+ autoload :RuleSet, "sfn/lint/rule_set"
9
9
  end
10
10
  end
@@ -1,4 +1,4 @@
1
- require 'sfn'
1
+ require "sfn"
2
2
 
3
3
  module Sfn
4
4
  module Lint
@@ -20,7 +20,7 @@ module Sfn
20
20
  # @return [self]
21
21
  def initialize(expr, provider = :aws, evaluator = nil, &block)
22
22
  if evaluator && block
23
- raise ArgumentError.new 'Only evaluator or block can be provided, not both.'
23
+ raise ArgumentError.new "Only evaluator or block can be provided, not both."
24
24
  end
25
25
  @provider = Bogo::Utility.snake(provider).to_sym
26
26
  @search_expression = expr
@@ -46,7 +46,7 @@ module Sfn
46
46
  # @note override this method when subclassing
47
47
  def run(result, template)
48
48
  unless evaluator
49
- raise NotImplementedError.new 'No evaluator has been defined for this definition!'
49
+ raise NotImplementedError.new "No evaluator has been defined for this definition!"
50
50
  end
51
51
  evaluator.call(result, template)
52
52
  end
@@ -1,4 +1,4 @@
1
- require 'sfn'
1
+ require "sfn"
2
2
 
3
3
  module Sfn
4
4
  module Lint
@@ -40,7 +40,7 @@ module Sfn
40
40
  f_item
41
41
  end.flatten.compact.map(&:to_s)
42
42
  unless failed_items.empty?
43
- msg = "#{msg} (failures: `#{failed_items.join('`, `')}`)"
43
+ msg = "#{msg} (failures: `#{failed_items.join("`, `")}`)"
44
44
  end
45
45
  end
46
46
  msg
@@ -109,7 +109,7 @@ module Sfn
109
109
  end
110
110
  unless non_match.empty?
111
111
  raise ArgumentError.new "Rule defines `#{provider}` as provider but includes definitions for " \
112
- "non matching providers. (#{non_match.map(&:provider).map(&:to_s).uniq.sort.join(', ')})"
112
+ "non matching providers. (#{non_match.map(&:provider).map(&:to_s).uniq.sort.join(", ")})"
113
113
  end
114
114
  end
115
115
  end
@@ -1,4 +1,4 @@
1
- require 'sfn'
1
+ require "sfn"
2
2
 
3
3
  module Sfn
4
4
  module Lint
@@ -160,7 +160,7 @@ module Sfn
160
160
  end
161
161
  unless non_match.empty?
162
162
  raise ArgumentError.new "Rule set defines `#{provider}` as provider but includes rules for " \
163
- "non matching providers. (#{non_match.map(&:provider).map(&:to_s).uniq.sort.join(', ')})"
163
+ "non matching providers. (#{non_match.map(&:provider).map(&:to_s).uniq.sort.join(", ")})"
164
164
  end
165
165
  end
166
166
  end
@@ -1,8 +1,8 @@
1
- require 'sfn'
1
+ require "sfn"
2
2
 
3
3
  module Sfn
4
4
  # Container for monkey patches
5
5
  module MonkeyPatch
6
- autoload :Stack, 'sfn/monkey_patch/stack'
6
+ autoload :Stack, "sfn/monkey_patch/stack"
7
7
  end
8
8
  end
@@ -1,13 +1,13 @@
1
- require 'base64'
2
- require 'sfn'
1
+ require "base64"
2
+ require "sfn"
3
3
 
4
4
  module Sfn
5
5
  module MonkeyPatch
6
6
 
7
7
  # Expand stack model functionality
8
8
  module Stack
9
- autoload :Azure, 'sfn/monkey_patch/stack/azure'
10
- autoload :Google, 'sfn/monkey_patch/stack/google'
9
+ autoload :Azure, "sfn/monkey_patch/stack/azure"
10
+ autoload :Google, "sfn/monkey_patch/stack/google"
11
11
 
12
12
  include Bogo::AnimalStrings
13
13
  include Azure
@@ -92,7 +92,7 @@ module Sfn
92
92
  # @return [String] action currently being performed
93
93
  def performing
94
94
  if in_progress?
95
- status.to_s.downcase.split('_').first.to_sym
95
+ status.to_s.downcase.split("_").first.to_sym
96
96
  end
97
97
  end
98
98
 
@@ -143,9 +143,9 @@ module Sfn
143
143
  self.send("percent_complete_#{api.provider}", min)
144
144
  else
145
145
  if in_progress?
146
- total_resources = template.fetch('Resources', []).size
146
+ total_resources = template.fetch("Resources", []).size
147
147
  total_complete = resources.all.find_all do |resource|
148
- resource.status.downcase.end_with?('complete')
148
+ resource.status.downcase.end_with?("complete")
149
149
  end.size
150
150
  result = ((total_complete.to_f / total_resources) * 100).to_i
151
151
  result > min.to_i ? result : min
@@ -176,20 +176,20 @@ module Sfn
176
176
  stack_parameters = template[opts[:parameter_key]]
177
177
  default_key = opts.fetch(
178
178
  :default_key,
179
- opts[:parameter_key].to_s[0, 1].match(/[a-z]/) ? 'default' : 'Default'
179
+ opts[:parameter_key].to_s[0, 1].match(/[a-z]/) ? "default" : "Default"
180
180
  )
181
181
  else
182
- if template['Parameters']
183
- default_key = 'Default'
184
- stack_parameters = template['Parameters']
182
+ if template["Parameters"]
183
+ default_key = "Default"
184
+ stack_parameters = template["Parameters"]
185
185
  else
186
- default_key = 'default'
187
- stack_parameters = template['parameters']
186
+ default_key = "default"
187
+ stack_parameters = template["parameters"]
188
188
  end
189
189
  end
190
190
  if stack_parameters
191
191
  valid_parameters = stack_parameters.find_all do |key, val|
192
- !val['DisableApply'] && !val['disable_apply']
192
+ !val["DisableApply"] && !val["disable_apply"]
193
193
  end.map(&:first)
194
194
  if ignore_params
195
195
  valid_parameters.reject! do |key|
@@ -197,17 +197,17 @@ module Sfn
197
197
  end
198
198
  end
199
199
  remote_stack.outputs.each do |output|
200
- o_key = output.key.downcase.tr('_', '')
200
+ o_key = output.key.downcase.tr("_", "")
201
201
  p_key = valid_parameters.detect do |v_param|
202
- v_param.downcase.tr('_', '') == o_key
202
+ v_param.downcase.tr("_", "") == o_key
203
203
  end
204
204
  unless p_key
205
205
  map_key = opts[:mapping].keys.detect do |map_key|
206
- map_key.downcase.tr('_', '') == o_key
206
+ map_key.downcase.tr("_", "") == o_key
207
207
  end
208
208
  if map_key
209
209
  p_key = valid_parameters.detect do |v_param|
210
- v_param.downcase.tr('_', '') == opts[:mapping][map_key].downcase.tr('_', '')
210
+ v_param.downcase.tr("_", "") == opts[:mapping][map_key].downcase.tr("_", "")
211
211
  end
212
212
  end
213
213
  end
@@ -231,8 +231,8 @@ module Sfn
231
231
  resources.reload.all.map do |resource|
232
232
  if api.data.fetch(:stack_types, []).include?(resource.type)
233
233
  # Custom remote load support
234
- if resource.type == 'Custom::JackalStack'
235
- location, stack_id = resource.id.to_s.split('-', 2)
234
+ if resource.type == "Custom::JackalStack"
235
+ location, stack_id = resource.id.to_s.split("-", 2)
236
236
  if l_conf = api.data[:locations][location]
237
237
  n_stack = Miasma.api(
238
238
  :type => :orchestration,
@@ -279,13 +279,13 @@ module Sfn
279
279
  if (self.api.provider == :aws) # cause this is the only one
280
280
  begin
281
281
  result = self.api.request(
282
- :path => '/',
282
+ :path => "/",
283
283
  :form => Smash.new(
284
- 'Action' => 'GetStackPolicy',
285
- 'StackName' => self.id,
284
+ "Action" => "GetStackPolicy",
285
+ "StackName" => self.id,
286
286
  ),
287
287
  )
288
- serialized_policy = result.get(:body, 'GetStackPolicyResult', 'StackPolicyBody')
288
+ serialized_policy = result.get(:body, "GetStackPolicyResult", "StackPolicyBody")
289
289
  MultiJson.load(serialized_policy).to_smash
290
290
  rescue Miasma::Error::ApiError::RequestError => e
291
291
  if e.response.code == 404
@@ -310,10 +310,10 @@ module Sfn
310
310
  self.send("nesting_style_#{api.provider}")
311
311
  else
312
312
  if nested?
313
- self.template['Resources'].find_all do |t_resource|
314
- t_resource['Type'] == self.api.class.const_get(:RESOURCE_MAPPING).key(self.class)
313
+ self.template["Resources"].find_all do |t_resource|
314
+ t_resource["Type"] == self.api.class.const_get(:RESOURCE_MAPPING).key(self.class)
315
315
  end.detect do |t_resource|
316
- t_resource['Properties'].fetch('Parameters', {}).values.detect do |t_value|
316
+ t_resource["Properties"].fetch("Parameters", {}).values.detect do |t_value|
317
317
  !t_value.is_a?(Hash)
318
318
  end
319
319
  end ? :deep : :shallow