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