Class: Stacco::Template

Inherits:
Object
  • Object
show all
Defined in:
lib/stacco.rb

Defined Under Namespace

Classes: RenderContext

Instance Method Summary collapse

Constructor Details

#initialize(stack, template_body) ⇒ Template

Returns a new instance of Template.



392
393
394
395
396
# File 'lib/stacco.rb', line 392

def initialize(stack, template_body)
  @stack = stack
  template_body = template_body.read if template_body.respond_to?(:read)
  @template_body = template_body
end

Instance Method Details

#result(vars) ⇒ Object



398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
# File 'lib/stacco.rb', line 398

def result(vars)
  cloudformation_vars = {}
  cloudformation_vars.update vars
  cloudformation_vars.update vars['cloudformation']

  cloudinit_vars = {}
  cloudinit_vars.update vars
  cloudinit_vars.update vars['cloud-init']
  cloudinit_vars.each do |k, v|
    cloudinit_vars.delete(k) if v.kind_of?(Hash) or v.kind_of?(Array)
  end

  cloudformation_vars['userdata'] = {}
  cloudformation_vars['roles'].each do |host_name, host_roles|
    cloudformation_vars['userdata'][host_name] = udscript(host_roles, cloudinit_vars)
  end

  b = RenderContext.new(@stack, vars, cloudformation_vars).instance_eval{ binding }
  ERB.new(@template_body).result(b)
end

#udscript(roles, vars) ⇒ Object



373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
# File 'lib/stacco.rb', line 373

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::CommonScripts[:before]
  roles.each{ |role| lns.concat Stacco::Resources::CloudInit::RoleScripts[role] }
  lns.concat Stacco::Resources::CloudInit::CommonScripts[:after]
  lns
end