class Terraform::StackModule

Attributes

secrets[RW]

Public Class Methods

define(name, &block) click to toggle source
# File lib/terraform_dsl/stack_module.rb, line 16
def define(name, &block)
  template = self.new(name, &block)
  StackModules.register(name, template)
end
flatten_variable_arrays(variables) click to toggle source
# File lib/terraform_dsl/stack_module.rb, line 21
def flatten_variable_arrays(variables)
  variables.map do |k,v|
    if v.is_a?(Hash) && v.key?(:default) && v[:default].is_a?(Array)
      v[:default] = v[:default].join(',')
    elsif v.is_a?(Array)
      v = v.join(',')
    end
    [k, v]
  end.to_h
end
new(name, &block) click to toggle source
# File lib/terraform_dsl/stack_module.rb, line 36
def initialize(name, &block)
  @stack_elements = { resource: {}, provider: {}, variable: {}, output: {}, module: {} }
  @secrets = {}
  @block = block
  variable(:terraform_stack_id) {}
end

Public Instance Methods

build(**kwargs) click to toggle source
# File lib/terraform_dsl/stack_module.rb, line 48
def build(**kwargs)
  vars = kwargs.map{ |k, v| [k, {default: v}] }.to_h
  @stack_elements[:variable].merge!(vars)
  b = @block
  instance_eval(&b)
end
clone() click to toggle source
# File lib/terraform_dsl/stack_module.rb, line 43
def clone
  b = @block
  StackModule.new(@name, &b)
end
elements() click to toggle source
# File lib/terraform_dsl/stack_module.rb, line 71
def elements
  elements = @stack_elements.clone
  variables = StackModule.flatten_variable_arrays(@stack_elements[:variable])
  @stack_elements[:module].each do |mod, data|
    elements[:module][mod] = StackModule.flatten_variable_arrays(data)
  end
  elements[:variable] = variables
  elements
end
generate() click to toggle source
# File lib/terraform_dsl/stack_module.rb, line 55
def generate
  JSON.pretty_generate(elements)
end
get(variable) click to toggle source
# File lib/terraform_dsl/stack_module.rb, line 67
def get(variable)
  @stack_elements[:variable].fetch(variable)[:default]
end
id() click to toggle source
# File lib/terraform_dsl/stack_module.rb, line 81
def id
  get(:terraform_stack_id)
end
outputs() click to toggle source
# File lib/terraform_dsl/stack_module.rb, line 63
def outputs
  @stack_elements[:output]
end
variables() click to toggle source
# File lib/terraform_dsl/stack_module.rb, line 59
def variables
  elements[:variable]
end

Private Instance Methods

output(name, &block)
Alias for: register_output
provider(name, &block)
Alias for: register_provider
register_module(name, &block) click to toggle source
# File lib/terraform_dsl/stack_module.rb, line 105
def register_module(name, &block)
  new_module = Terraform::Module.new(self, name, &block).fields
  @stack_elements[:module][name.to_sym] = new_module
end
Also aliased as: submodule
register_output(name, &block) click to toggle source
# File lib/terraform_dsl/stack_module.rb, line 100
def register_output(name, &block)
  new_output = Terraform::Output.new(self, &block).fields
  @stack_elements[:output][name.to_sym] = new_output
end
Also aliased as: output
register_provider(name, &block) click to toggle source
# File lib/terraform_dsl/stack_module.rb, line 110
def register_provider(name, &block)
  provider = Terraform::Provider.new(self, &block)
  @secrets.merge!(provider.load_secrets(name))
  @stack_elements[:provider][name.to_sym] = provider.fields
end
Also aliased as: provider
register_resource(resource_type, name, &block) click to toggle source
# File lib/terraform_dsl/stack_module.rb, line 87
def register_resource(resource_type, name, &block)
  @stack_elements[:resource] ||= {}
  @stack_elements[:resource][resource_type.to_sym] ||= {}
  @stack_elements[:resource][resource_type.to_sym][name.to_sym] = Terraform::Resource.new(self, name, resource_type, &block).fields
end
Also aliased as: resource
register_variable(name, &block) click to toggle source
# File lib/terraform_dsl/stack_module.rb, line 93
def register_variable(name, &block)
  new_variable = Terraform::Variable.new(self, &block).fields
  unless @stack_elements[:variable].key?(name.to_sym)
    @stack_elements[:variable][name.to_sym] = { default: new_variable[:default] || '' }
  end
end
Also aliased as: variable
resource(resource_type, name, &block)
Alias for: register_resource
submodule(name, &block)
Alias for: register_module
variable(name, &block)
Alias for: register_variable