Class: Terrafying::Context
- Inherits:
-
Object
- Object
- Terrafying::Context
- Defined in:
- lib/terrafying/generator.rb
Direct Known Subclasses
Constant Summary collapse
- REGION =
ENV.fetch('AWS_REGION', 'eu-west-1')
- PROVIDER_DEFAULTS =
{ aws: { region: REGION } }.freeze
Instance Attribute Summary collapse
-
#output ⇒ Object
readonly
Returns the value of attribute output.
Class Method Summary collapse
Instance Method Summary collapse
- #add!(*c) ⇒ Object
- #aws ⇒ Object
- #data(type, name, spec) ⇒ Object
- #id_of(type, name) ⇒ Object
-
#initialize ⇒ Context
constructor
A new instance of Context.
- #key_exists_spec_differs(key, name, spec) ⇒ Object
- #local(name, value) ⇒ Object
- #output_of(type, name, key) ⇒ Object
- #output_with_children ⇒ Object
- #pretty_generate ⇒ Object
- #provider(name, spec) ⇒ Object
- #provider_key(name, spec) ⇒ Object
- #resource(type, name, attributes) ⇒ Object
- #resource_names ⇒ Object
- #resources ⇒ Object
- #template(relative_path, params = {}) ⇒ Object
- #tf_module(name, spec) ⇒ Object
- #tf_safe(str) ⇒ Object
- #var(name, spec) ⇒ Object
Constructor Details
#initialize ⇒ Context
Returns a new instance of Context.
177 178 179 180 181 182 |
# File 'lib/terrafying/generator.rb', line 177 def initialize @output = { 'resource' => {} } @children = [] end |
Instance Attribute Details
#output ⇒ Object (readonly)
Returns the value of attribute output.
175 176 177 |
# File 'lib/terrafying/generator.rb', line 175 def output @output end |
Class Method Details
Instance Method Details
#add!(*c) ⇒ Object
299 300 301 302 |
# File 'lib/terrafying/generator.rb', line 299 def add!(*c) @children.push(*c) c[0] end |
#aws ⇒ Object
184 185 186 |
# File 'lib/terrafying/generator.rb', line 184 def aws @@aws ||= Terrafying::Aws::Ops.new REGION end |
#data(type, name, spec) ⇒ Object
224 225 226 227 228 229 230 231 232 |
# File 'lib/terrafying/generator.rb', line 224 def data(type, name, spec) @output['data'] ||= {} @output['data'][type.to_s] ||= {} raise "Data already exists #{type}.#{name}" if @output['data'][type.to_s].key? name.to_s @output['data'][type.to_s][name.to_s] = spec RootRef.new(kind: :data, type: type, name: name) end |
#id_of(type, name) ⇒ Object
265 266 267 |
# File 'lib/terrafying/generator.rb', line 265 def id_of(type, name) output_of(type, name, 'id') end |
#key_exists_spec_differs(key, name, spec) ⇒ Object
202 203 204 |
# File 'lib/terrafying/generator.rb', line 202 def key_exists_spec_differs(key, name, spec) @providers.key?(key) && spec != @providers[key][name.to_s] end |
#local(name, value) ⇒ Object
206 207 208 209 210 211 212 213 |
# File 'lib/terrafying/generator.rb', line 206 def local(name, value) @output['locals'] ||= {} raise "Local already exists #{name}" if @output['locals'].key? name.to_s @output['locals'][name.to_s] = value RootRef.new(kind: :local, name: name) end |
#output_of(type, name, key) ⇒ Object
269 270 271 |
# File 'lib/terrafying/generator.rb', line 269 def output_of(type, name, key) RootRef.new(kind: :resource, type: type, name: name)[key] end |
#output_with_children ⇒ Object
261 262 263 |
# File 'lib/terrafying/generator.rb', line 261 def output_with_children @children.inject(@output) { |out, c| out.deep_merge(c.output_with_children) } end |
#pretty_generate ⇒ Object
273 274 275 |
# File 'lib/terrafying/generator.rb', line 273 def pretty_generate JSON.pretty_generate(output_with_children) end |
#provider(name, spec) ⇒ Object
188 189 190 191 192 193 194 195 196 |
# File 'lib/terrafying/generator.rb', line 188 def provider(name, spec) key = provider_key(name, spec) @providers ||= {} raise "Duplicate provider configuration detected for #{key}" if key_exists_spec_differs(key, name, spec) @providers[key] = { name.to_s => spec } @output['provider'] = @providers.values key end |
#provider_key(name, spec) ⇒ Object
198 199 200 |
# File 'lib/terrafying/generator.rb', line 198 def provider_key(name, spec) [name, spec[:alias]].compact.join('.') end |
#resource(type, name, attributes) ⇒ Object
234 235 236 237 238 239 240 241 |
# File 'lib/terrafying/generator.rb', line 234 def resource(type, name, attributes) @output['resource'][type.to_s] ||= {} raise "Resource already exists #{type}.#{name}" if @output['resource'][type.to_s].key? name.to_s @output['resource'][type.to_s][name.to_s] = attributes RootRef.new(kind: :resource, type: type, name: name) end |
#resource_names ⇒ Object
277 278 279 280 281 282 283 284 285 286 |
# File 'lib/terrafying/generator.rb', line 277 def resource_names out = output_with_children ret = [] out['resource'].keys.each do |type| out['resource'][type].keys.each do |id| ret << "#{type}.#{id}" end end ret end |
#resources ⇒ Object
288 289 290 291 292 293 294 295 296 297 |
# File 'lib/terrafying/generator.rb', line 288 def resources out = output_with_children ret = [] out['resource'].keys.each do |type| out['resource'][type].keys.each do |id| ret << "${#{type}.#{id}.id}" end end ret end |
#template(relative_path, params = {}) ⇒ Object
253 254 255 256 257 258 259 |
# File 'lib/terrafying/generator.rb', line 253 def template(relative_path, params = {}) dir = caller_locations[0].path filename = File.join(File.dirname(dir), relative_path) erb = ERB.new(IO.read(filename)) erb.filename = filename erb.result(OpenStruct.new(params).instance_eval { binding }) end |
#tf_module(name, spec) ⇒ Object
243 244 245 246 247 248 249 250 251 |
# File 'lib/terrafying/generator.rb', line 243 def tf_module(name, spec) @output['module'] ||= {} raise "Module already exists #{name}" if @output['module'].key? name.to_s @output['module'][name.to_s] = spec RootRef.new(kind: :module, name: name) end |
#tf_safe(str) ⇒ Object
304 305 306 |
# File 'lib/terrafying/generator.rb', line 304 def tf_safe(str) str.gsub(%r{[\.\s/\?]}, '-').gsub(%r{\*}, "star") end |
#var(name, spec) ⇒ Object
215 216 217 218 219 220 221 222 |
# File 'lib/terrafying/generator.rb', line 215 def var(name, spec) @output['variable'] ||= {} raise "Var already exists #{name}" if @output['variable'].key? name.to_s @output['variable'][name.to_s] = spec RootRef.new(kind: :var, name: name) end |