Class: TestLab::Provisioner::Chef::OmniBus

Inherits:
Object
  • Object
show all
Defined in:
lib/testlab/provisioners/chef/omni_bus.rb

Overview

OmniBus Provisioner Class

Author:

  • Zachary Patten <zachary AT jovelabs DOT com>

Instance Method Summary collapse

Constructor Details

#initialize(config = {}, ui = nil) ⇒ OmniBus

Returns a new instance of OmniBus.



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/testlab/provisioners/chef/omni_bus.rb', line 13

def initialize(config={}, ui=nil)
  @config = (config || Hash.new)
  @ui     = (ui || TestLab.ui)

  @config[:chef] ||= Hash.new
  @config[:chef][:client] ||= Hash.new
  @config[:chef][:client][:attach_to_container] ||= %(chef-server)
  @config[:chef][:client][:version]             ||= %(latest)
  @config[:chef][:client][:log_level]           ||= :info
  @config[:chef][:client][:attributes]          ||= Hash.new

  @chef_server = TestLab::Container.first(@config[:chef][:client][:attach_to_container])

  @config[:chef][:client][:server_url] ||= %(https://#{@chef_server.ip})

  @ui.logger.debug { "config(#{@config.inspect})" }
end

Instance Method Details

#on_container_deprovision(container) ⇒ Boolean

OmniBus: Container Deprovision

Returns:

  • (Boolean)

    True if successful.



62
63
64
65
66
67
68
69
# File 'lib/testlab/provisioners/chef/omni_bus.rb', line 62

def on_container_deprovision(container)
  if @chef_server.state == :running
    @chef_server.exec(%(knife node delete #{container.id} --yes), :ignore_exit_status => true)
    @chef_server.exec(%(knife client delete #{container.id} --yes), :ignore_exit_status => true)
  end

  true
end

#on_container_provision(container) ⇒ Boolean

OmniBus: Container Provision

Renders the defined script to a temporary file on the target container and proceeds to execute said script as root via lxc-attach.

Parameters:

Returns:

  • (Boolean)

    True if successful.



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/testlab/provisioners/chef/omni_bus.rb', line 39

def on_container_provision(container)
  @config[:chef][:client][:node_name] ||= container.id

  omnibus_template = File.join(TestLab::Provisioner::Chef.template_dir, 'omni_bus.erb')

  config = {}.merge!({
    :chef_client_cli => chef_client_cli(container),
    :chef_client_rb => chef_client_rb(container),
    :validation_pem => validation_pem,
    :sudo_user => container.primary_user.username,
    :sudo_uid => container.primary_user.uid,
    :sudo_gid => container.primary_user.gid,
    :home_dir => container.primary_user.home_dir
  }).merge!(@config)

  container.bootstrap(ZTK::Template.render(omnibus_template, config))

  true
end