sparkle_formation 0.2.10 → 0.2.12

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b479d29d2362b0b07927cc975a6908b1600df820
4
- data.tar.gz: 8d0477f4ac1aedb6cb7fd471711194a0a93b50a2
3
+ metadata.gz: 46a1c4f04178bc15ec4ebce5da8046a7187bf9cb
4
+ data.tar.gz: 74608ee05fd93fdcbe70762a0c6702d5a0f2aeb0
5
5
  SHA512:
6
- metadata.gz: 56d720122b2bcd063c6a2fb7ab369d9497794aa182ef5763dd9266389f9799c018f406ec786ad728f8bcf42c005ec41e2e07bc17832d9ad4989be4eb700247ff
7
- data.tar.gz: 1df868daea61d465381fd2b934c32257013bd8f914814be7b365b7bf08bedeb5842a5074bf632d3298b7907279f0acd290f7570ba2222c5c40cc2a92bf10552a
6
+ metadata.gz: 33caa72fa07477b8c4bd48c6d2da66817fc292bd22f2d6817234673f17b95abd3532d3c6e29a6d4b2776c46e47557b17c33ba6647f2985e97dd8add9b14b3ad2
7
+ data.tar.gz: 51bf91bef24f3618847f31815be27964aa858203c5e964bee9b66aee32e77e76d290b405b545ac40e7e16d53a7ff37f34819601096ddbb35af6fd07294a67bb5
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## v0.2.12
2
+ * Stubs for template generation parameters
3
+ * Add `no_value!` helper method
4
+ * Force path resets with `sparkle_path` is set
5
+ * Include all missing pseudo parameter helpers
6
+ * Provide more control on dynamic naming
7
+
1
8
  ## v0.2.10
2
9
  * Add helper for generating no value
3
10
  * Fix Fn::If generator (#35 thanks @yhuang !)
@@ -234,6 +234,31 @@ class SparkleFormation
234
234
  end
235
235
  alias_method :no_value!, :_no_value
236
236
 
237
+ def _region
238
+ _ref('AWS::Region')
239
+ end
240
+ alias_method :region!, :_region
241
+
242
+ def _notification_arns
243
+ _ref('AWS::NotificationARNs')
244
+ end
245
+ alias_method :notification_arns!, :_notification_arns
246
+
247
+ def _account_id
248
+ _ref('AWS::AccountId')
249
+ end
250
+ alias_method :account_id!, :_account_id
251
+
252
+ def _stack_id
253
+ _ref('AWS::StackId')
254
+ end
255
+ alias_method :stack_id!, :_stack_id
256
+
257
+ def _stack_name
258
+ _ref('AWS::StackName')
259
+ end
260
+ alias_method :stack_name!, :_stack_name
261
+
237
262
  # Execute system command
238
263
  #
239
264
  # @param command [String]
@@ -243,6 +268,20 @@ class SparkleFormation
243
268
  end
244
269
  alias_method :system!, :_system
245
270
 
271
+ # @return [TrueClass, FalseClass] resource can be tagged
272
+ def taggable?
273
+ if(defined?(SfnAws))
274
+ if(self[:type])
275
+ resource = SfnAws.lookup(self[:type].gsub('::', '_').downcase)
276
+ resource && resource[:properties].include?('Tags')
277
+ else
278
+ if(self._parent)
279
+ self._parent.taggable?
280
+ end
281
+ end
282
+ end
283
+ end
284
+
246
285
  # @return [TrueClass, FalseClass]
247
286
  def rhel?
248
287
  !!@platform[:rhel]
@@ -55,9 +55,9 @@ class SparkleFormation
55
55
  def sparkle_path=(path=nil)
56
56
  if(path)
57
57
  custom_paths[:sparkle_path] = path
58
- custom_paths[:components_directory] ||= File.join(path, 'components')
59
- custom_paths[:dynamics_directory] ||= File.join(path, 'dynamics')
60
- custom_paths[:registry_directory] ||= File.join(path, 'registry')
58
+ custom_paths[:components_directory] = File.join(path, 'components')
59
+ custom_paths[:dynamics_directory] = File.join(path, 'dynamics')
60
+ custom_paths[:registry_directory] = File.join(path, 'registry')
61
61
  end
62
62
  custom_paths[:sparkle_path]
63
63
  end
@@ -102,11 +102,17 @@ class SparkleFormation
102
102
  # Compile file
103
103
  #
104
104
  # @param path [String] path to file
105
- # @param args [Object] use :sparkle to return struct
105
+ # @param args [Object] use :sparkle to return struct. provide Hash
106
+ # to pass through when compiling ({:state => {}})
106
107
  # @return [Hashish, SparkleStruct]
107
108
  def compile(path, *args)
108
109
  formation = self.instance_eval(IO.read(path), path, 1)
109
- args.include?(:sparkle) ? formation : formation.compile._dump
110
+ if(args.delete(:sparkle))
111
+ formation
112
+ else
113
+ comp_arg = args.detect{|i| i.is_a?(Hash) }
114
+ (comp_arg ? formation.compile(comp_arg) : formation.compile)._dump
115
+ end
110
116
  end
111
117
 
112
118
  # Execute given block within struct context
@@ -252,7 +258,8 @@ class SparkleFormation
252
258
  _name, _config = *args
253
259
  _config ||= {}
254
260
  return unless _name
255
- new_resource = struct.resources.__send__("#{_name}_#{dynamic_name}".to_sym)
261
+ resource_name = "#{_name}_#{_config.delete(:resource_name_suffix) || dynamic_name}".to_sym
262
+ new_resource = struct.resources.__send__(resource_name)
256
263
  new_resource.type lookup_key
257
264
  properties = new_resource.properties
258
265
  SfnAws.resource(dynamic_name, :properties).each do |prop_name|
@@ -300,6 +307,8 @@ class SparkleFormation
300
307
  attr_reader :components
301
308
  # @return [Array] order of loading
302
309
  attr_reader :load_order
310
+ # @return [Hash] parameters for stack generation
311
+ attr_reader :parameters
303
312
 
304
313
  # Create new instance
305
314
  #
@@ -309,6 +318,7 @@ class SparkleFormation
309
318
  # @option options [String] :components_directory custom components path
310
319
  # @option options [String] :dynamics_directory custom dynamics path
311
320
  # @option options [String] :registry_directory custom registry path
321
+ # @option options [Hash] :parameters parameters for stack generation
312
322
  # @option options [Truthy, Falsey] :disable_aws_builtins do not load builtins
313
323
  # @yield base context
314
324
  def initialize(name, options={}, &block)
@@ -331,6 +341,7 @@ class SparkleFormation
331
341
  require 'sparkle_formation/aws'
332
342
  SfnAws.load!
333
343
  end
344
+ @parameters = set_generation_parameters!(options.fetch(:parameters, {}))
334
345
  @components = SparkleStruct.hashish.new
335
346
  @load_order = []
336
347
  @overrides = []
@@ -340,6 +351,27 @@ class SparkleFormation
340
351
  @compiled = nil
341
352
  end
342
353
 
354
+ ALLOWED_GENERATION_PARAMETERS = ['type', 'default']
355
+ VALID_GENERATION_PARAMETER_TYPES = ['String', 'Number']
356
+
357
+ # Validation parameters used for template generation to ensure they
358
+ # are in the expected format
359
+ #
360
+ # @param params [Hash] parameter set
361
+ # @return [Hash] parameter set
362
+ # @raises [ArgumentError]
363
+ def set_generation_parameters!(params)
364
+ params.each do |name, value|
365
+ unless(value.is_a?(Hash))
366
+ raise TypeError.new("Expecting `Hash` type. Received `#{value.class}`")
367
+ end
368
+ if(key = value.keys.detect{|k| !ALLOWED_GENERATION_PARAMETERS.include?(k.to_s) })
369
+ raise ArgumentError.new("Invalid generation parameter key provided `#{key}`")
370
+ end
371
+ end
372
+ params
373
+ end
374
+
343
375
  # Add block to load order
344
376
  #
345
377
  # @param block [Proc]
@@ -380,10 +412,15 @@ class SparkleFormation
380
412
 
381
413
  # Compile the formation
382
414
  #
415
+ # @param args [Hash]
416
+ # @option args [Hash] :state local state parameters
383
417
  # @return [SparkleStruct]
384
- def compile
418
+ def compile(args={})
385
419
  unless(@compiled)
386
420
  compiled = SparkleStruct.new
421
+ if(args[:state])
422
+ compiled.set_state!(args[:state])
423
+ end
387
424
  @load_order.each do |key|
388
425
  compiled._merge!(components[key])
389
426
  end
@@ -429,7 +466,7 @@ class SparkleFormation
429
466
  # @yieldparam template [Hash] nested stack template
430
467
  # @yieldreturn [String] remote URL
431
468
  # @return [Hash] dumped template hash
432
- def apply_nesting
469
+ def apply_nesting(*args)
433
470
  hash = compile.dump!
434
471
  stacks = Hash[
435
472
  hash['Resources'].find_all do |r_name, resource|
@@ -448,6 +485,18 @@ class SparkleFormation
448
485
  resource['Properties']['TemplateURL'] = yield(resource_name, stack)
449
486
  end
450
487
  end
488
+ if(args.include?(:collect_outputs))
489
+ outputs_hash = Hash[
490
+ output_map do |name, value|
491
+ [name, {'Value' => {'Fn::GetAtt' => value}}]
492
+ end
493
+ ]
494
+ if(hash['Outputs'])
495
+ hash['Outputs'].merge!(outputs_hash)
496
+ else
497
+ hash['Outputs'] = outputs_hash
498
+ end
499
+ end
451
500
  hash
452
501
  end
453
502
 
@@ -18,5 +18,5 @@
18
18
 
19
19
  class SparkleFormation
20
20
  # Current library version
21
- VERSION = Gem::Version.new('0.2.10')
21
+ VERSION = Gem::Version.new('0.2.12')
22
22
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sparkle_formation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.10
4
+ version: 0.2.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Roberts
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-13 00:00:00.000000000 Z
11
+ date: 2015-03-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: attribute_struct