yutani 0.1.19 → 0.1.20

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: 19392ae5e18da8ace5f0da1b75df60195b02344e
4
- data.tar.gz: 58d4d3605b5364954891c45c7bd6b4db756e248d
3
+ metadata.gz: e4fa37a2e778f35ef0e294cac1ad3690ad0ad45a
4
+ data.tar.gz: a67ca09140825e7fe8278bed7fa53695399b1331
5
5
  SHA512:
6
- metadata.gz: 192cea6e367fbb41488479646ae933eb7931825566adb7ec9b654e4f40f0c045f6093f3068d597cd4ba4bd7b8949c0b691f5d0aaf2b56e4ef1dd2b4c287269a4
7
- data.tar.gz: 8154a43329154a3466949852de0ba4d7bc20f6ad3fe79f7a248d34989ac5a889bd1789fe638299a5523fb9dc1f5b6802bc49b1c5b29983148cdc925dcce176ef
6
+ metadata.gz: 984fcf53399b10e98854f0b5f2c9b452841dcd76710fd08db36d94594fdaaa81fc8062f07cf4ea1f7a2d0b7df9f9b5f715c314af38ad52786c3027545ec2d5f3
7
+ data.tar.gz: c39349aaf5d39a62f4514fd055917dab14edf2ce92cced5c2395e3c3ab26ebc887d83c6e167d623ec917c664b463b92732cbc6162471d4d9e7210f290769916a
data/lib/yutani.rb CHANGED
@@ -9,6 +9,7 @@ require 'yutani/hiera'
9
9
  require 'yutani/cli'
10
10
  require 'yutani/stack'
11
11
  require 'yutani/resource'
12
+ require 'yutani/data'
12
13
  require 'yutani/remote_config'
13
14
  require 'yutani/provider'
14
15
  require 'yutani/template'
@@ -0,0 +1,60 @@
1
+ module Yutani
2
+ class Data
3
+ include Hiera
4
+
5
+ attr_accessor :data_type, :namespace, :fields
6
+
7
+ def initialize(data_type, *namespace, &block)
8
+ @data_type = data_type
9
+ @namespace = namespace
10
+ @fields = {}
11
+
12
+ Docile.dsl_eval(self, &block) if block_given?
13
+ end
14
+
15
+ def data_name
16
+ @namespace.to_underscored_string
17
+ end
18
+
19
+ def to_h
20
+ {
21
+ @data_type => {
22
+ data_name => @fields
23
+ }
24
+ }
25
+ end
26
+
27
+ def ref(resource_type, *namespace, attr)
28
+ "${%s}" % [resource_type, namespace.to_underscored_string, attr].
29
+ join('.')
30
+ end
31
+
32
+ def template(path, **kv)
33
+ Template.new(kv).render(path)
34
+ end
35
+
36
+ def respond_to_missing?(method_name, include_private = false)
37
+ true
38
+ end
39
+
40
+ def method_missing(name, *args, &block)
41
+ if name =~ /ref_(.*)/
42
+ # redirect ref_id, ref_name, etc, to ref()
43
+ ref(*args, $1)
44
+ elsif block_given?
45
+ # handle sub datas, like tags, listener, etc
46
+ sub = SubData.new
47
+ sub.instance_exec(&block)
48
+ @fields[name] = sub.fields
49
+ else
50
+ @fields[name] = args.first
51
+ end
52
+ end
53
+ end
54
+
55
+ class SubData < Data
56
+ def initialize
57
+ @fields = {}
58
+ end
59
+ end
60
+ end
data/lib/yutani/stack.rb CHANGED
@@ -9,6 +9,7 @@ module Yutani
9
9
 
10
10
  def initialize(*namespace, &block)
11
11
  @resources = []
12
+ @data = []
12
13
  @providers = []
13
14
  @remote_config = nil
14
15
  @outputs = {}
@@ -27,6 +28,11 @@ module Yutani
27
28
  Resource.new(resource_type, *namespace, &block)
28
29
  end
29
30
 
31
+ def data(data_type, *namespace, &block)
32
+ @data <<
33
+ Data.new(data_type, *namespace, &block)
34
+ end
35
+
30
36
  def provider(name, &block)
31
37
  @providers <<
32
38
  Provider.new(name, &block)
@@ -57,6 +63,9 @@ module Yutani
57
63
  resource: @resources.inject(DeepMergeHash.new){|resources,r|
58
64
  resources.deep_merge!(r.to_h)
59
65
  },
66
+ data: @data.inject(DeepMergeHash.new){|data,d|
67
+ data.deep_merge!(d.to_h)
68
+ },
60
69
  provider: @providers.inject(DeepMergeHash.new){|providers,r|
61
70
  providers.deep_merge(r.to_h)
62
71
  },
@@ -1,3 +1,3 @@
1
1
  module Yutani
2
- VERSION = '0.1.19'
2
+ VERSION = '0.1.20'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yutani
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.19
4
+ version: 0.1.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - Louis Garman
@@ -172,6 +172,7 @@ files:
172
172
  - lib/yutani.rb
173
173
  - lib/yutani/cli.rb
174
174
  - lib/yutani/config.rb
175
+ - lib/yutani/data.rb
175
176
  - lib/yutani/hiera.rb
176
177
  - lib/yutani/provider.rb
177
178
  - lib/yutani/remote_config.rb