class CloudFormer::Template

Attributes

conditions[R]
mappings[R]
outputs[R]
parameters[R]
resources[R]

Public Class Methods

new() click to toggle source
# File lib/cloud_former/template.rb, line 9
def initialize
  @resources = []
  @parameters = []
  @outputs = []
  @conditions = []
  @mappings = {}
end

Public Instance Methods

add_condition(condition) click to toggle source
# File lib/cloud_former/template.rb, line 53
def add_condition(condition)
  raise "Overwriting condition with name #{condition.get_name}" if @conditions.any? { |c| c.get_name == condition.get_name }
  @conditions << condition
end
add_mapping(name, hash) click to toggle source
# File lib/cloud_former/template.rb, line 64
def add_mapping(name, hash)
  @mappings[name] = hash
end
add_output(key, value) click to toggle source
# File lib/cloud_former/template.rb, line 49
def add_output(key, value)
  @outputs << { key: key, value: value }
end
add_parameter(parameter) click to toggle source
# File lib/cloud_former/template.rb, line 17
def add_parameter(parameter)
  raise "Overwriting parameter with name #{parameter.get_name}" if @parameters.any? { |p| p.get_name == parameter.get_name }
  @parameters << parameter
end
add_resource(*args, &block) click to toggle source
# File lib/cloud_former/template.rb, line 28
def add_resource(*args, &block)
  if args.size == 1
    resource = args.first
  elsif args.size == 2
    type, name = *args
    klass = CloudFormer.type_to_class(type)
    resource = klass.new(name, &block)
  else
    raise ArgumentErrror, "wrong number of args (#{args.size} for 1..2)"
  end
  raise "Overwriting resource with name #{resource.get_name}" if @resources.any? { |r| r.get_name == resource.get_name }
  @resources << resource
  resource
end
condition(name) click to toggle source
# File lib/cloud_former/template.rb, line 58
def condition(name)
  cond = @conditions.find { |c| c.get_name == name }
  raise "Condition #{name} not found" unless cond
  cond
end
dump_json() click to toggle source
# File lib/cloud_former/template.rb, line 68
def dump_json
  res = { 'AWSTemplateFormatVersion' => '2010-09-09' }

  if @parameters.any?
    parameter_res = {}
    @parameters.each do |param|
      parameter_res[param.get_name] = param.dump_json
    end
    res['Parameters'] = parameter_res
  end

  if @conditions.any?
    condition_res = {}
    @conditions.each do |condition|
      condition_res[condition.get_name] = condition.dump_json
    end
    res['Conditions'] = condition_res
  end

  if @mappings.any?
    res['Mappings'] = @mappings
  end

  if @resources.any?
    resource_res = {}
    @resources.each do |resource|
      resource.resource_tree.flatten.each do |r|
        resource_res[r.get_name] = r.dump_json
      end
    end
    res['Resources'] = resource_res
  end

  if @outputs.any?
    output_res = {}
    @outputs.each do |output|
      if output[:value].is_a?(Resource) || output[:value].is_a?(Parameter)
        output_res[output[:key]] = { 'Value' => { 'Ref' => output[:value].get_name } }
      elsif output[:value].is_a?(Function)
        output_res[output[:key]] = { 'Value' => output[:value].dump_json }
      else
        output_res[output[:key]] = { 'Value' => output[:value] }
      end
    end
    res['Outputs'] = output_res
  end

  res
end
parameter(name) click to toggle source
# File lib/cloud_former/template.rb, line 22
def parameter(name)
  param = @parameters.find { |p| p.get_name == name }
  raise "Parameter #{name} not found" unless param
  param
end
resource(name) click to toggle source
# File lib/cloud_former/template.rb, line 43
def resource(name)
  res = @resources.find { |r| r.get_name == name }
  raise "Resource #{name} not found" unless res
  res
end