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
- #required_provider(name, spec) ⇒ Object
- #required_version(version) ⇒ 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
314 315 316 317 |
# File 'lib/terrafying/generator.rb', line 314 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
239 240 241 242 243 244 245 246 247 |
# File 'lib/terrafying/generator.rb', line 239 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
280 281 282 |
# File 'lib/terrafying/generator.rb', line 280 def id_of(type, name) output_of(type, name, 'id') end |
#key_exists_spec_differs(key, name, spec) ⇒ Object
217 218 219 |
# File 'lib/terrafying/generator.rb', line 217 def key_exists_spec_differs(key, name, spec) @providers.key?(key) && spec != @providers[key][name.to_s] end |
#local(name, value) ⇒ Object
221 222 223 224 225 226 227 228 |
# File 'lib/terrafying/generator.rb', line 221 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
284 285 286 |
# File 'lib/terrafying/generator.rb', line 284 def output_of(type, name, key) RootRef.new(kind: :resource, type: type, name: name)[key] end |
#output_with_children ⇒ Object
276 277 278 |
# File 'lib/terrafying/generator.rb', line 276 def output_with_children @children.inject(@output) { |out, c| out.deep_merge(c.output_with_children) } end |
#pretty_generate ⇒ Object
288 289 290 |
# File 'lib/terrafying/generator.rb', line 288 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 |
#required_provider(name, spec) ⇒ Object
202 203 204 205 206 207 208 |
# File 'lib/terrafying/generator.rb', line 202 def required_provider(name, spec) @output['terraform'] ||= {} @output['terraform']['required_providers'] ||= {} raise "Duplicate required_provider configuration detected for #{name}" if @output['terraform']['required_providers'].key? name.to_s @output['terraform']['required_providers'][name.to_s] = spec end |
#required_version(version) ⇒ Object
210 211 212 213 214 215 |
# File 'lib/terrafying/generator.rb', line 210 def required_version(version) @output['terraform'] ||= {} raise "required_version already configure" if @output['terraform']['required_version'] @output['terraform']['required_version'] = "#{version}" end |
#resource(type, name, attributes) ⇒ Object
249 250 251 252 253 254 255 256 |
# File 'lib/terrafying/generator.rb', line 249 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
292 293 294 295 296 297 298 299 300 301 |
# File 'lib/terrafying/generator.rb', line 292 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
303 304 305 306 307 308 309 310 311 312 |
# File 'lib/terrafying/generator.rb', line 303 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
268 269 270 271 272 273 274 |
# File 'lib/terrafying/generator.rb', line 268 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
258 259 260 261 262 263 264 265 266 |
# File 'lib/terrafying/generator.rb', line 258 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
319 320 321 |
# File 'lib/terrafying/generator.rb', line 319 def tf_safe(str) str.gsub(%r{[\.\s/\?]}, '-').gsub(%r{\*}, "star") end |
#var(name, spec) ⇒ Object
230 231 232 233 234 235 236 237 |
# File 'lib/terrafying/generator.rb', line 230 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 |