terrafying 1.6.4 → 1.7.0

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