class Terraform::StackElement

Defines a single terraform stack element, subclass for any element defined in terraform DSL

Attributes

fields[R]

Public Class Methods

new(stack_module, &block) click to toggle source
# File lib/terraform_dsl/stack_element.rb, line 9
def initialize(stack_module, &block)
  @module = stack_module
  @fields = {}
  instance_eval(&block)
end

Private Instance Methods

add_field(symbol, value) click to toggle source
# File lib/terraform_dsl/stack_element.rb, line 51
def add_field(symbol, value)
  existing = @fields[symbol]
  if existing
    # If it's already an array, just push to it
    @fields[symbol] = [existing] unless existing.is_a?(Array)
    @fields[symbol] << value
  else
    @fields[symbol] = value
  end
end
get(variable_name) click to toggle source

Get the runtime value of a variable

# File lib/terraform_dsl/stack_element.rb, line 32
def get(variable_name)
  @module.get(variable_name)
end
id_of(resource_type, resource_name) click to toggle source

Shorthand to interpolate the ID of another resource

# File lib/terraform_dsl/stack_element.rb, line 47
def id_of(resource_type, resource_name)
  value_of(resource_type, resource_name, :id)
end
method_missing(method_name, *args, &block) click to toggle source

Allows resource attributes to be specified with a nice syntax If the method is implemented, it will be treated as a nested resource

# File lib/terraform_dsl/stack_element.rb, line 19
def method_missing(method_name, *args, &block)
  symbol = method_name.to_sym
  if args.length == 1
    if args[0].nil?
      fail "Passed nil to '#{method_name}'. Generally disallowed, subclass StackElement if you need this."
    end
    add_field(symbol, args[0])
  else
    add_field(symbol, Terraform::StackElement.new(@module, &block).fields)
  end
end
value_of(resource_type, resource_name, value_type) click to toggle source

Syntax to handle interpolation of resource variables

# File lib/terraform_dsl/stack_element.rb, line 42
def value_of(resource_type, resource_name, value_type)
  "${#{resource_type}.#{resource_name}.#{value_type}}"
end
var(variable_name) click to toggle source

Reference a variable

# File lib/terraform_dsl/stack_element.rb, line 37
def var(variable_name)
  "${var.#{variable_name}}"
end