sparkle_formation 0.2.10 → 0.2.12

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 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