sparkle_formation 3.0.26 → 3.0.28
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 +5 -5
- data/CHANGELOG.md +6 -0
- data/lib/sparkle_formation/composition.rb +17 -17
- data/lib/sparkle_formation/error.rb +2 -5
- data/lib/sparkle_formation/function_struct.rb +27 -31
- data/lib/sparkle_formation/provider/aws.rb +32 -31
- data/lib/sparkle_formation/provider/azure.rb +18 -19
- data/lib/sparkle_formation/provider/google.rb +20 -22
- data/lib/sparkle_formation/provider/heat.rb +17 -17
- data/lib/sparkle_formation/provider/terraform.rb +14 -15
- data/lib/sparkle_formation/provider.rb +0 -2
- data/lib/sparkle_formation/resources/aws.rb +129 -149
- data/lib/sparkle_formation/resources/aws_resources.json +9208 -5542
- data/lib/sparkle_formation/resources/azure.rb +2 -5
- data/lib/sparkle_formation/resources/azure_resources.json +12367 -2901
- data/lib/sparkle_formation/resources/google.rb +1 -4
- data/lib/sparkle_formation/resources/heat.rb +0 -4
- data/lib/sparkle_formation/resources/heat_resources.json +2616 -2062
- data/lib/sparkle_formation/resources/rackspace.rb +0 -4
- data/lib/sparkle_formation/resources/terraform.rb +2 -6
- data/lib/sparkle_formation/resources.rb +20 -24
- data/lib/sparkle_formation/sparkle.rb +56 -66
- data/lib/sparkle_formation/sparkle_attribute/aws.rb +61 -34
- data/lib/sparkle_formation/sparkle_attribute/azure.rb +12 -8
- data/lib/sparkle_formation/sparkle_attribute/google.rb +18 -15
- data/lib/sparkle_formation/sparkle_attribute/heat.rb +22 -7
- data/lib/sparkle_formation/sparkle_attribute/rackspace.rb +0 -2
- data/lib/sparkle_formation/sparkle_attribute/terraform.rb +11 -5
- data/lib/sparkle_formation/sparkle_attribute.rb +13 -7
- data/lib/sparkle_formation/sparkle_collection/rainbow.rb +5 -7
- data/lib/sparkle_formation/sparkle_collection.rb +13 -15
- data/lib/sparkle_formation/sparkle_formation.rb +116 -112
- data/lib/sparkle_formation/sparkle_struct.rb +30 -24
- data/lib/sparkle_formation/translation/heat.rb +57 -58
- data/lib/sparkle_formation/translation/rackspace.rb +48 -49
- data/lib/sparkle_formation/translation.rb +34 -37
- data/lib/sparkle_formation/utils.rb +6 -13
- data/lib/sparkle_formation/version.rb +1 -1
- data/sparkle_formation.gemspec +1 -1
- metadata +9 -9
@@ -7,9 +7,7 @@ class SparkleFormation
|
|
7
7
|
|
8
8
|
# Rackspace specific resources collection
|
9
9
|
class Rackspace < Resources
|
10
|
-
|
11
10
|
class << self
|
12
|
-
|
13
11
|
include Bogo::Memoization
|
14
12
|
|
15
13
|
# Load the builtin AWS resources
|
@@ -31,9 +29,7 @@ class SparkleFormation
|
|
31
29
|
def included(_klass)
|
32
30
|
load!
|
33
31
|
end
|
34
|
-
|
35
32
|
end
|
36
|
-
|
37
33
|
end
|
38
34
|
end
|
39
35
|
end
|
@@ -12,7 +12,6 @@ class SparkleFormation
|
|
12
12
|
RESOURCE_TYPE_NAMESPACE_SPLITTER = ['_']
|
13
13
|
|
14
14
|
class << self
|
15
|
-
|
16
15
|
include Bogo::Memoization
|
17
16
|
|
18
17
|
# Load the builtin Terraform resources
|
@@ -28,9 +27,8 @@ class SparkleFormation
|
|
28
27
|
)
|
29
28
|
# NOTE: Internal resource type used for nesting
|
30
29
|
register('module',
|
31
|
-
|
32
|
-
|
33
|
-
)
|
30
|
+
'properties' => [],
|
31
|
+
'full_properties' => {})
|
34
32
|
true
|
35
33
|
end
|
36
34
|
end
|
@@ -39,9 +37,7 @@ class SparkleFormation
|
|
39
37
|
def included(_klass)
|
40
38
|
load!
|
41
39
|
end
|
42
|
-
|
43
40
|
end
|
44
|
-
|
45
41
|
end
|
46
42
|
end
|
47
43
|
end
|
@@ -3,7 +3,6 @@ require 'sparkle_formation'
|
|
3
3
|
class SparkleFormation
|
4
4
|
# Resources helper
|
5
5
|
class Resources
|
6
|
-
|
7
6
|
autoload :Aws, 'sparkle_formation/resources/aws'
|
8
7
|
autoload :Azure, 'sparkle_formation/resources/azure'
|
9
8
|
autoload :Google, 'sparkle_formation/resources/google'
|
@@ -56,14 +55,14 @@ class SparkleFormation
|
|
56
55
|
#
|
57
56
|
# @param final_resource [Hash] desired resource structure containing this property
|
58
57
|
# @return ['replacement', 'interrupt', 'unknown', 'none']
|
59
|
-
def update_causes(final_resource=nil, original_resource=nil)
|
60
|
-
if
|
58
|
+
def update_causes(final_resource = nil, original_resource = nil)
|
59
|
+
if conditionals && final_resource
|
61
60
|
final_resource = final_resource.to_smash
|
62
61
|
original_resource = original_resource.to_smash
|
63
62
|
result = conditionals.detect do |p_cond|
|
64
63
|
p_cond.conditional == true || p_cond.conditional.call(final_resource, original_resource)
|
65
64
|
end
|
66
|
-
if
|
65
|
+
if result
|
67
66
|
result.update_causes
|
68
67
|
else
|
69
68
|
'unknown'
|
@@ -75,7 +74,6 @@ class SparkleFormation
|
|
75
74
|
end
|
76
75
|
|
77
76
|
class << self
|
78
|
-
|
79
77
|
include SparkleFormation::Utils::AnimalStrings
|
80
78
|
# @!parse include SparkleFormation::Utils::AnimalStrings
|
81
79
|
|
@@ -90,10 +88,10 @@ class SparkleFormation
|
|
90
88
|
# @param hash [Hash] metadata information
|
91
89
|
# @return [TrueClass]
|
92
90
|
def register(type, hash)
|
93
|
-
unless
|
91
|
+
unless hash.is_a?(Hash)
|
94
92
|
raise TypeError.new("Expecting `Hash` type but received `#{hash.class}`")
|
95
93
|
end
|
96
|
-
unless
|
94
|
+
unless class_variable_defined?(:@@registry)
|
97
95
|
@@registry = AttributeStruct.hashish.new
|
98
96
|
end
|
99
97
|
@@registry[base_key] ||= AttributeStruct.hashish.new
|
@@ -106,9 +104,9 @@ class SparkleFormation
|
|
106
104
|
# @param identifier [String, Symbol] resource identifier
|
107
105
|
# @param key [String, Symbol] specific data
|
108
106
|
# @return [Hashish, NilClass]
|
109
|
-
def resource(identifier, key=nil)
|
107
|
+
def resource(identifier, key = nil)
|
110
108
|
res = lookup(identifier)
|
111
|
-
if
|
109
|
+
if key && res
|
112
110
|
res[key.to_sym]
|
113
111
|
else
|
114
112
|
res
|
@@ -146,7 +144,7 @@ class SparkleFormation
|
|
146
144
|
# @param key [String, Symbol]
|
147
145
|
# @return [String, NilClass]
|
148
146
|
def registry_key(key)
|
149
|
-
if
|
147
|
+
if registry[key]
|
150
148
|
result = key
|
151
149
|
else
|
152
150
|
o_key = key
|
@@ -155,21 +153,21 @@ class SparkleFormation
|
|
155
153
|
result = @@registry[base_key].keys.detect do |ref|
|
156
154
|
ref = ref.downcase
|
157
155
|
snake_parts = ref.split(resource_type_splitter)
|
158
|
-
until
|
156
|
+
until snake_parts.empty?
|
159
157
|
break if snake_parts.join('') == key
|
160
158
|
snake_parts.shift
|
161
159
|
end
|
162
160
|
!snake_parts.empty?
|
163
161
|
end
|
164
|
-
if
|
162
|
+
if result
|
165
163
|
collisions = @@registry[base_key].keys.find_all do |ref|
|
166
164
|
split_ref = ref.downcase.split(resource_type_splitter)
|
167
165
|
ref = Array(split_ref.slice(split_ref.size - snake_parts.size, split_ref.size)).join('')
|
168
166
|
key == ref
|
169
167
|
end
|
170
|
-
if
|
168
|
+
if collisions.size > 1
|
171
169
|
raise ArgumentError.new 'Ambiguous dynamic name returned multiple matches! ' \
|
172
|
-
|
170
|
+
"`#{o_key.inspect}` -> #{collisions.sort.join(', ')}"
|
173
171
|
end
|
174
172
|
end
|
175
173
|
end
|
@@ -180,7 +178,7 @@ class SparkleFormation
|
|
180
178
|
# rubocop:disable Style/RedundantSelf
|
181
179
|
def resource_type_splitter
|
182
180
|
Regexp.new(
|
183
|
-
[self.const_get(:RESOURCE_TYPE_NAMESPACE_SPLITTER)].flatten.compact.map{|value|
|
181
|
+
[self.const_get(:RESOURCE_TYPE_NAMESPACE_SPLITTER)].flatten.compact.map { |value|
|
184
182
|
Regexp.escape(value)
|
185
183
|
}.join('|')
|
186
184
|
)
|
@@ -196,7 +194,7 @@ class SparkleFormation
|
|
196
194
|
|
197
195
|
# @return [Hashish] currently loaded AWS registry
|
198
196
|
def registry
|
199
|
-
unless
|
197
|
+
unless class_variable_defined?(:@@registry)
|
200
198
|
@@registry = AttributeStruct.hashish.new
|
201
199
|
end
|
202
200
|
@@registry[base_key]
|
@@ -218,22 +216,20 @@ class SparkleFormation
|
|
218
216
|
# @return [Resource]
|
219
217
|
def resource_lookup(type)
|
220
218
|
result = registry[type]
|
221
|
-
if
|
219
|
+
if result
|
222
220
|
properties = result.fetch('full_properties', {}).map do |p_name, p_info|
|
223
221
|
Property.new(p_name,
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
)
|
222
|
+
p_info[:description],
|
223
|
+
p_info[:type],
|
224
|
+
p_info[:required],
|
225
|
+
p_info[:update_causes],
|
226
|
+
self.const_get(:PROPERTY_UPDATE_CONDITIONALS).get(type, p_name))
|
230
227
|
end
|
231
228
|
Resource.new(type, properties, result)
|
232
229
|
else
|
233
230
|
raise KeyError.new "Failed to locate requested resource type: `#{type}`"
|
234
231
|
end
|
235
232
|
end
|
236
|
-
|
237
233
|
end
|
238
234
|
end
|
239
235
|
end
|
@@ -15,24 +15,22 @@ class SparkleFormation
|
|
15
15
|
|
16
16
|
# @!visibility private
|
17
17
|
class SparkleFormation
|
18
|
-
|
19
18
|
attr_accessor :sparkle_path
|
20
19
|
|
21
20
|
class << self
|
22
|
-
|
23
21
|
def insert(*args, &block)
|
24
22
|
::SparkleFormation.insert(*args, &block)
|
25
23
|
end
|
26
24
|
|
27
|
-
def part_data(data=nil)
|
28
|
-
if
|
25
|
+
def part_data(data = nil)
|
26
|
+
if data
|
29
27
|
@data = data
|
30
28
|
else
|
31
29
|
@data
|
32
30
|
end
|
33
31
|
end
|
34
32
|
|
35
|
-
def dynamic(name, args={}, &block)
|
33
|
+
def dynamic(name, args = {}, &block)
|
36
34
|
part_data[:dynamic].push(
|
37
35
|
::Smash.new(
|
38
36
|
:name => name,
|
@@ -40,7 +38,7 @@ class SparkleFormation
|
|
40
38
|
:args => ::Smash[
|
41
39
|
args.map(&:to_a)
|
42
40
|
],
|
43
|
-
:type => :dynamic
|
41
|
+
:type => :dynamic,
|
44
42
|
)
|
45
43
|
).last
|
46
44
|
end
|
@@ -49,12 +47,12 @@ class SparkleFormation
|
|
49
47
|
part_data[:component].push(
|
50
48
|
::Smash.new(
|
51
49
|
:block => block,
|
52
|
-
:type => :component
|
50
|
+
:type => :component,
|
53
51
|
)
|
54
52
|
).last
|
55
53
|
end
|
56
54
|
|
57
|
-
def component(name, args={}, &block)
|
55
|
+
def component(name, args = {}, &block)
|
58
56
|
part_data[:component].push(
|
59
57
|
::Smash.new(
|
60
58
|
:name => name,
|
@@ -62,7 +60,7 @@ class SparkleFormation
|
|
62
60
|
:args => ::Smash[
|
63
61
|
args.map(&:to_a)
|
64
62
|
],
|
65
|
-
:type => :component
|
63
|
+
:type => :component,
|
66
64
|
)
|
67
65
|
).last
|
68
66
|
end
|
@@ -70,15 +68,14 @@ class SparkleFormation
|
|
70
68
|
def dynamic_info(*args)
|
71
69
|
::Smash.new(:metadata => {}, :args => {})
|
72
70
|
end
|
73
|
-
|
74
71
|
end
|
75
72
|
|
76
73
|
def initialize(*args)
|
77
|
-
opts = args.detect{|a| a.is_a?(Hash)} || {}
|
74
|
+
opts = args.detect { |a| a.is_a?(Hash) } || {}
|
78
75
|
SparkleFormation.part_data[:template].push(
|
79
76
|
::Smash.new(
|
80
77
|
:name => args.first,
|
81
|
-
:args => opts
|
78
|
+
:args => opts,
|
82
79
|
)
|
83
80
|
)
|
84
81
|
raise ::TypeError
|
@@ -86,8 +83,7 @@ class SparkleFormation
|
|
86
83
|
|
87
84
|
# @!visibility private
|
88
85
|
class Registry
|
89
|
-
|
90
|
-
def self.register(name, args={}, &block)
|
86
|
+
def self.register(name, args = {}, &block)
|
91
87
|
SparkleFormation.part_data[:registry].push(
|
92
88
|
::Smash.new(
|
93
89
|
:name => name,
|
@@ -95,11 +91,10 @@ class SparkleFormation
|
|
95
91
|
:args => ::Smash[
|
96
92
|
args.map(&:to_a)
|
97
93
|
],
|
98
|
-
:type => :registry
|
94
|
+
:type => :registry,
|
99
95
|
)
|
100
96
|
).last
|
101
97
|
end
|
102
|
-
|
103
98
|
end
|
104
99
|
end
|
105
100
|
|
@@ -109,16 +104,17 @@ class SparkleFormation
|
|
109
104
|
# NOTE: Enable access to top level constants but do not
|
110
105
|
# include deprecated constants to prevent warning outputs
|
111
106
|
deprecated_constants = [
|
107
|
+
:Data,
|
112
108
|
:Config,
|
113
109
|
:TimeoutError,
|
114
110
|
:Fixnum,
|
115
111
|
:Bignum,
|
116
112
|
:NIL,
|
117
113
|
:TRUE,
|
118
|
-
:FALSE
|
114
|
+
:FALSE,
|
119
115
|
]
|
120
116
|
::Object.constants.each do |const|
|
121
|
-
unless(self.const_defined?(const)) # rubocop:disable Style/RedundantSelf
|
117
|
+
unless (self.const_defined?(const)) # rubocop:disable Style/RedundantSelf
|
122
118
|
next if deprecated_constants.include?(const)
|
123
119
|
self.const_set(const, ::Object.const_get(const)) # rubocop:disable Style/RedundantSelf
|
124
120
|
end
|
@@ -128,11 +124,9 @@ class SparkleFormation
|
|
128
124
|
def part_data(arg)
|
129
125
|
SparkleFormation.part_data(arg)
|
130
126
|
end
|
131
|
-
|
132
127
|
end
|
133
128
|
|
134
129
|
class << self
|
135
|
-
|
136
130
|
@@_pack_registry = Smash.new
|
137
131
|
|
138
132
|
# Register a SparklePack for short name access
|
@@ -140,8 +134,8 @@ class SparkleFormation
|
|
140
134
|
# @param name [String, Symbol] name of pack
|
141
135
|
# @param path [String] path to pack
|
142
136
|
# @return [Array<String:name, String:path>]
|
143
|
-
def register!(name=nil, path=nil)
|
144
|
-
unless
|
137
|
+
def register!(name = nil, path = nil)
|
138
|
+
unless path
|
145
139
|
idx = caller.index do |item|
|
146
140
|
item.end_with?("`register!'")
|
147
141
|
end
|
@@ -150,23 +144,23 @@ class SparkleFormation
|
|
150
144
|
# to not be improperly truncated
|
151
145
|
file = caller[idx].split(':').reverse.drop(2).reverse.join(':')
|
152
146
|
path = File.join(File.dirname(file), 'sparkleformation')
|
153
|
-
unless
|
147
|
+
unless File.directory?(path)
|
154
148
|
path = nil
|
155
149
|
end
|
156
|
-
unless
|
150
|
+
unless name
|
157
151
|
name = File.basename(file)
|
158
152
|
name.sub!(File.extname(name), '')
|
159
153
|
end
|
160
154
|
end
|
161
|
-
unless
|
162
|
-
if
|
155
|
+
unless name
|
156
|
+
if path
|
163
157
|
name = path.split(File::PATH_SEPARATOR)[-3].to_s
|
164
158
|
end
|
165
159
|
end
|
166
|
-
unless
|
160
|
+
unless path
|
167
161
|
raise ArgumentError.new('No SparklePack path provided and failed to auto-detect!')
|
168
162
|
end
|
169
|
-
unless
|
163
|
+
unless name
|
170
164
|
raise ArgumentError.new('No SparklePack name provided and failed to auto-detect!')
|
171
165
|
end
|
172
166
|
@@_pack_registry[name] = path
|
@@ -179,13 +173,12 @@ class SparkleFormation
|
|
179
173
|
# @param name [String, Symbol] name of pack
|
180
174
|
# @return [String] path
|
181
175
|
def path(name)
|
182
|
-
if
|
176
|
+
if @@_pack_registry[name]
|
183
177
|
@@_pack_registry[name]
|
184
178
|
else
|
185
179
|
raise KeyError.new "No pack registered with requested name: #{name}!"
|
186
180
|
end
|
187
181
|
end
|
188
|
-
|
189
182
|
end
|
190
183
|
|
191
184
|
# Wrapper for evaluating sfn files to store within sparkle
|
@@ -202,14 +195,14 @@ class SparkleFormation
|
|
202
195
|
'sfn',
|
203
196
|
'cloudformation',
|
204
197
|
'cfn',
|
205
|
-
'.'
|
198
|
+
'.',
|
206
199
|
]
|
207
200
|
|
208
201
|
# Reserved directories
|
209
202
|
DIRS = [
|
210
203
|
'components',
|
211
204
|
'registry',
|
212
|
-
'dynamics'
|
205
|
+
'dynamics',
|
213
206
|
]
|
214
207
|
|
215
208
|
# Valid types
|
@@ -217,7 +210,7 @@ class SparkleFormation
|
|
217
210
|
'component' => 'components',
|
218
211
|
'registry' => 'registries',
|
219
212
|
'dynamic' => 'dynamics',
|
220
|
-
'template' => 'templates'
|
213
|
+
'template' => 'templates',
|
221
214
|
)
|
222
215
|
|
223
216
|
# @return [String] path to sparkle directories
|
@@ -234,20 +227,20 @@ class SparkleFormation
|
|
234
227
|
# @option args [String, Symbol] :name registered pack name
|
235
228
|
# @option args [String, Symbol] :provider name of default provider
|
236
229
|
# @return [self]
|
237
|
-
def initialize(args={})
|
238
|
-
if
|
230
|
+
def initialize(args = {})
|
231
|
+
if args[:name]
|
239
232
|
@root = self.class.path(args[:name])
|
240
233
|
else
|
241
234
|
@root = args.fetch(:root, locate_root)
|
242
235
|
end
|
243
|
-
if
|
236
|
+
if @root != :none && !File.directory?(@root)
|
244
237
|
raise Errno::ENOENT.new("No such directory - #{@root}")
|
245
238
|
end
|
246
239
|
@raw_data = Smash.new(
|
247
240
|
:dynamic => [],
|
248
241
|
:component => [],
|
249
242
|
:registry => [],
|
250
|
-
:template => []
|
243
|
+
:template => [],
|
251
244
|
)
|
252
245
|
@provider = Bogo::Utility.snake(args.fetch(:provider, 'aws').to_s).to_sym
|
253
246
|
@wrapper = eval_wrapper.new
|
@@ -290,27 +283,25 @@ class SparkleFormation
|
|
290
283
|
# @param target_provider [String, Symbol] restrict to provider
|
291
284
|
# @return [Smash] requested item
|
292
285
|
# @raises [NameError, Error::NotFound]
|
293
|
-
def get(type, name, target_provider=nil)
|
294
|
-
unless
|
286
|
+
def get(type, name, target_provider = nil)
|
287
|
+
unless TYPES.keys.include?(type.to_s)
|
295
288
|
raise NameError.new "Invalid type requested (#{type})! Valid types: #{TYPES.keys.join(', ')}"
|
296
289
|
end
|
297
|
-
unless
|
290
|
+
unless target_provider
|
298
291
|
target_provider = provider
|
299
292
|
end
|
300
293
|
result = send(TYPES[type]).get(target_provider, name)
|
301
|
-
if
|
302
|
-
result = (
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
} || []
|
311
|
-
).last
|
294
|
+
if result.nil? && TYPES[type] == 'templates'
|
295
|
+
result = (send(TYPES[type]).fetch(target_provider, Smash.new).detect { |_, v|
|
296
|
+
name = name.to_s
|
297
|
+
short_name = v[:path].sub(%r{#{Regexp.escape(root)}/?}, '')
|
298
|
+
v[:path] == name ||
|
299
|
+
short_name == name ||
|
300
|
+
short_name.sub('.rb', '').gsub(File::SEPARATOR, '__').tr('-', '_') == name ||
|
301
|
+
v[:path].end_with?(name)
|
302
|
+
} || []).last
|
312
303
|
end
|
313
|
-
unless
|
304
|
+
unless result
|
314
305
|
klass = Error::NotFound.const_get(type.capitalize)
|
315
306
|
raise klass.new("No #{type} registered with requested name (#{name})!", :name => name)
|
316
307
|
end
|
@@ -333,7 +324,7 @@ class SparkleFormation
|
|
333
324
|
def locate_root
|
334
325
|
VALID_ROOT_DIRS.map do |part|
|
335
326
|
path = File.expand_path(File.join(Dir.pwd, part))
|
336
|
-
if
|
327
|
+
if File.exist?(path)
|
337
328
|
path
|
338
329
|
end
|
339
330
|
end.compact.first
|
@@ -344,33 +335,32 @@ class SparkleFormation
|
|
344
335
|
memoize(:load_parts) do
|
345
336
|
Dir.glob(File.join(root, '**', '**', '*.{json,rb}')).each do |file|
|
346
337
|
slim_path = file.sub("#{root}/", '')
|
347
|
-
if
|
338
|
+
if file.end_with?('.rb')
|
348
339
|
begin
|
349
340
|
wrapper.instance_eval(IO.read(file), file, 1)
|
350
341
|
rescue TypeError
|
351
342
|
end
|
352
343
|
end
|
353
|
-
if
|
344
|
+
if file.end_with?('.json') || raw_data[:template].first
|
354
345
|
data = raw_data[:template].pop || Smash.new
|
355
|
-
unless
|
346
|
+
unless data[:name]
|
356
347
|
data[:name] = slim_path.tr('/', '__').sub(/\.(rb|json)$/, '')
|
357
348
|
end
|
358
349
|
t_provider = data.fetch(:args, :provider, :aws)
|
359
|
-
if
|
350
|
+
if templates.get(t_provider, data[:name])
|
360
351
|
raise KeyError.new "Template name is already in use within pack! (`#{data[:name]}` -> `#{t_provider}`)"
|
361
352
|
end
|
362
353
|
templates.set(t_provider, data[:name],
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
)
|
354
|
+
data.merge(
|
355
|
+
:type => :template,
|
356
|
+
:path => file,
|
357
|
+
:serialized => !file.end_with?('.rb'),
|
358
|
+
))
|
369
359
|
end
|
370
360
|
end
|
371
361
|
raw_data.each do |key, items|
|
372
362
|
items.each do |item|
|
373
|
-
if
|
363
|
+
if item[:name]
|
374
364
|
collection = send(TYPES[key])
|
375
365
|
name = item.delete(:name)
|
376
366
|
else
|
@@ -379,7 +369,7 @@ class SparkleFormation
|
|
379
369
|
collection = send(type)
|
380
370
|
end
|
381
371
|
i_provider = item.fetch(:args, :provider, :aws)
|
382
|
-
if
|
372
|
+
if collection.get(i_provider, name)
|
383
373
|
raise KeyError.new "#{key.capitalize} name is already in use within pack! (`#{name}` -> #{i_provider})"
|
384
374
|
end
|
385
375
|
collection.set(i_provider, name, item)
|
@@ -387,8 +377,8 @@ class SparkleFormation
|
|
387
377
|
end
|
388
378
|
end
|
389
379
|
end
|
390
|
-
|
391
380
|
end
|
381
|
+
|
392
382
|
# Alias for interfacing naming
|
393
383
|
SparklePack = Sparkle
|
394
384
|
end
|