class Stacco::Template

Constants

AttachmentTypes

Public Class Methods

new() click to toggle source
# File lib/stacco/template.rb, line 28
def initialize
  @parameters = []
  @resources = []
end

Public Instance Methods

attach(resource_a, resource_b, opts = {}) click to toggle source
# File lib/stacco/template.rb, line 122
def attach(resource_a, resource_b, opts = {})
end
export_for_json(o, is_key = false) click to toggle source
# File lib/stacco/template.rb, line 163
def export_for_json(o, is_key = false)
  case o
  when Numeric
    o.to_s
  when TrueClass, FalseClass
    o.to_s
  when NilClass
    raise ArgumentError, o
  when Var
    if is_key
      o.to_s
    else
      {"Ref" => o.to_s}
    end
  when Symbol
    ConcatenatedPath[o].to_s
  when Path
    o.to_s
  when Array
    o.map{ |el| export_for_json(el) }
  when Hash
    nh = {}
    o.each{ |k, v| nh[ export_for_json(k, true) ] = export_for_json(v) }
    nh
  when Regexp
    o.source
  else
    o
  end
end
mapping(name, hsh) click to toggle source
# File lib/stacco/template.rb, line 118
def mapping(name, hsh)
  @mappings.push [name, hsh]
end
parameter(name, type, opts = {}) click to toggle source
# File lib/stacco/template.rb, line 108
def parameter(name, type, opts = {})
  @parameters.push [name, type, opts]
end
render() click to toggle source
# File lib/stacco/template.rb, line 125
def render
  tpl = {AWSTemplateFormatVersion: "2010-09-09"}
  tpl[:description] = "Stacco stack"

  tpl[:Mappings] = {}

  @mappings.each do |(name, hsh)|
    name = [name] if name.kind_of?(String) or name.kind_of?(Symbol)
    tpl[:Mappings][Mapping[*name]] = hsh
  end

  tpl[:Parameters] = {}

  @parameters.each do |(name, type, args)|
    name = [name] if name.kind_of?(String) or name.kind_of?(Symbol)
    constraints = {}
    args.merge(type: type.camelize).each do |k,v|
      constraints[k.camelize] = v
    end

    tpl[:Parameters][name] = constraints
  end

  tpl[:Resources] = {}

  @resources.each do |(name, type, args)|
    name = [name] if name.kind_of?(String) or name.kind_of?(Symbol)
    properties = {}
    args.each do |k,v|
      properties[k.camelize] = v
    end

    tpl[:Resources][name] = {"Type" => type, "DependsOn" => [], "Properties" => properties}
  end

  tpl
end
resource(type, opts = {}) click to toggle source
# File lib/stacco/template.rb, line 112
def resource(type, opts = {})
  name = type.resource(opts.delete(:name))
  @resources.push [name, type, opts]
  name
end
to_json(opts = {}) click to toggle source
# File lib/stacco/template.rb, line 194
def to_json(opts = {})
  self.export_for_json(self.render).to_json
end
udscript(roles, vars) click to toggle source
# File lib/stacco/template.rb, line 33
def udscript(roles, vars)
  roles = roles.map{ |role| role.intern }

  unless roles.include? :backend
    vars = vars.dup
    vars.delete 'wallet_data'
  end

  lns = []
  lns.concat(vars.map do |k, v|
    var_val = v.include?("\0") ? Base64.encode64(v) : v
    "export #{k.to_s.upcase}=#{Shellwords.escape(var_val)}\n"
  end)
  lns.concat Stacco::Resources::CloudInit::CommonScript
  roles.each{ |role| lns.concat Stacco::Resources::CloudInit::RoleScripts[role] }
  lns
end