terrafying 1.6.4 → 1.7.0

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
  SHA256:
3
- metadata.gz: 5e1cf9104f84f628cffa6d3f21ca8499d71656da8a009eec4513f065b8e1e94f
4
- data.tar.gz: 698b1c1e06d88272895e989f6bb0080f030fe241e4678729ba0eeac10c35ca92
3
+ metadata.gz: a509b0bbe3300b3eaae6b0e96b76c06324665436ee34db2ab774b03fb1c98d8c
4
+ data.tar.gz: 9ced8e28714340b035ff5c45073e6a6f6ec37882dec03ee3b423774f84e73de5
5
5
  SHA512:
6
- metadata.gz: b4c0ca294effdd7b80deb593413cb2e9b1f46b92da1d1715e1a22aa8dd6592c909137958ad46d9da1a9b221c49d212658525a805a2b11695f37773e3f14c3f0f
7
- data.tar.gz: 8c910312687617ac95d2068ea91fa81e5dbc477a8793ed16ad3a4e9bef6d8a580d34c32e3a75b4c2497d6de85393ae98aa39cb59bb2317cbf0a8b88b5d1bea35
6
+ metadata.gz: 40e724f5449740072f33cad7607468c622fab5960297da09802455fbd0b767a86bb0e759267bbd4c9ff47a2961175de26931fb6bf8e78361201dedbc12c14b31
7
+ data.tar.gz: 21ea84b4da168023f1e8c588cb8f8d768e4f704917ccff33c497f4e883e4deddeb58a2bbf4f6f4ed096af18a7e9bd84bbf0b77a54323201128f8a2385e03ecfe
@@ -40,6 +40,10 @@ module Terrafying
40
40
  @account_id_cache ||= @sts_client.get_caller_identity.account
41
41
  end
42
42
 
43
+ def all_regions
44
+ @all_regions ||= @ec2_client.describe_regions.regions.map(&:region_name)
45
+ end
46
+
43
47
  def all_security_groups
44
48
  @all_security_groups ||= @ec2_resource.security_groups.to_a
45
49
  end
@@ -69,5 +69,8 @@ module Terrafying
69
69
  exit Config.new(path, options).import(addr, id)
70
70
  end
71
71
 
72
+ def method_missing(*args)
73
+ json(args[0].to_s)
74
+ end
72
75
  end
73
76
  end
@@ -9,20 +9,53 @@ module Terrafying
9
9
 
10
10
  class Ref
11
11
 
12
- def initialize(var)
13
- @var = var
12
+ def initialize(
13
+ kind: :resource,
14
+ type: "",
15
+ name:,
16
+ key: nil,
17
+ fns: []
18
+ )
19
+ @kind = kind
20
+ @type = type
21
+ @name = name
22
+ @key = key
23
+ @fns = Array(fns)
24
+ end
25
+
26
+ def resource?
27
+ @kind == :resource
28
+ end
29
+
30
+ def fn_call(fn)
31
+ Ref.new(kind: @kind, type: @type, name: @name, key: @key, fns: Array(fn) + @fns)
14
32
  end
15
33
 
16
34
  def downcase
17
- Ref.new("lower(#{@var})")
35
+ fn_call("lower")
18
36
  end
19
37
 
20
38
  def strip
21
- Ref.new("trimspace(#{@var})")
39
+ fn_call("trimspace")
22
40
  end
23
41
 
24
42
  def to_s
25
- "${#{@var}}"
43
+ closing_parens = ")" * @fns.count
44
+ calls = @fns.reduce("") { |m, v| m << "#{v}(" }
45
+
46
+ type = @type
47
+ if ! resource?
48
+ type = [@kind.to_s, @type]
49
+ end
50
+
51
+ key = @key
52
+ if resource? && key == nil
53
+ key = "id"
54
+ end
55
+
56
+ var = [type, @name, key].flatten.compact.reject { |s| s.empty? }.join('.')
57
+
58
+ "${#{calls}#{var}#{closing_parens}}"
26
59
  end
27
60
 
28
61
  def to_str
@@ -37,6 +70,17 @@ module Terrafying
37
70
  self.to_s == other.to_s
38
71
  end
39
72
 
73
+ def [](key)
74
+ new_key = [@key, key].compact.join('.')
75
+
76
+ Ref.new(kind: @kind, type: @type, name: @name, key: new_key, fns: @fns)
77
+ end
78
+
79
+ def []=(k, v)
80
+ raise "You can't set a value this way"
81
+ end
82
+
83
+
40
84
  end
41
85
 
42
86
  class Context
@@ -47,6 +91,12 @@ module Terrafying
47
91
  aws: { region: REGION }
48
92
  }
49
93
 
94
+ def self.bundle(&block)
95
+ ctx = Context.new
96
+ ctx.instance_eval(&block)
97
+ ctx
98
+ end
99
+
50
100
  attr_reader :output
51
101
 
52
102
  def initialize
@@ -79,7 +129,7 @@ module Terrafying
79
129
 
80
130
  raise "Data already exists #{type.to_s}.#{name.to_s}" if @output["data"][type.to_s].has_key? name.to_s
81
131
  @output["data"][type.to_s][name.to_s] = spec
82
- id_of(type, name)
132
+ Ref.new(kind: :data, type: type, name: name)
83
133
  end
84
134
 
85
135
  def resource(type, name, attributes)
@@ -87,7 +137,7 @@ module Terrafying
87
137
 
88
138
  raise "Resource already exists #{type.to_s}.#{name.to_s}" if @output["resource"][type.to_s].has_key? name.to_s
89
139
  @output["resource"][type.to_s][name.to_s] = attributes
90
- id_of(type, name)
140
+ Ref.new(kind: :resource, type: type, name: name)
91
141
  end
92
142
 
93
143
  def template(relative_path, params = {})
@@ -106,8 +156,8 @@ module Terrafying
106
156
  output_of(type, name, "id")
107
157
  end
108
158
 
109
- def output_of(type, name, value)
110
- Ref.new("#{type}.#{name}.#{value}")
159
+ def output_of(type, name, key)
160
+ Ref.new(kind: :resource, type: type, name: name, key: key)
111
161
  end
112
162
 
113
163
  def pretty_generate
@@ -175,4 +225,25 @@ module Terrafying
175
225
 
176
226
  Generator = RootContext.new
177
227
 
228
+ module DSL
229
+
230
+ %w[
231
+ add!
232
+ aws
233
+ backend
234
+ provider
235
+ resource
236
+ data
237
+ template
238
+ tf_safe
239
+ id_of
240
+ output_of
241
+ ].each { |name|
242
+ define_method(name) { |*args|
243
+ Generator.send(name, *args)
244
+ }
245
+ }
246
+
247
+ end
248
+
178
249
  end
@@ -1,4 +1,4 @@
1
1
  module Terrafying
2
- VERSION = "1.6.4" # will be inserted by Drone
2
+ VERSION = "1.7.0" # will be inserted by Drone
3
3
  CLI_VERSION = "0.11.7"
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: terrafying
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.4
4
+ version: 1.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - uSwitch Limited
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-21 00:00:00.000000000 Z
11
+ date: 2019-02-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -274,8 +274,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
274
274
  - !ruby/object:Gem::Version
275
275
  version: '0'
276
276
  requirements: []
277
- rubyforge_project:
278
- rubygems_version: 2.7.8
277
+ rubygems_version: 3.0.1
279
278
  signing_key:
280
279
  specification_version: 4
281
280
  summary: No.