class TestLab::Provisioner::Chef::OmniTruck

OmniTruck Provisioner Class

@author Zachary Patten <zachary AT jovelabs DOT com>

Public Class Methods

new(config={}, ui=nil) click to toggle source
# File lib/testlab/provisioners/chef/omni_truck.rb, line 14
def initialize(config={}, ui=nil)
  @config = (config || Hash.new)
  @ui     = (ui || TestLab.ui)

  @config[:chef] ||= Hash.new
  @config[:chef][:server] ||= Hash.new
  @config[:chef][:server][:version]     ||= %(latest)
  @config[:chef][:server][:prereleases] ||= false
  @config[:chef][:server][:nightlies]   ||= false
  @config[:chef][:server][:server_url]  ||= "https://127.0.0.1"

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

Public Instance Methods

on_container_provision(container) click to toggle source

OmniTruck: 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.

@param [TestLab::Container] container The container which we want to

provision.

@return [Boolean] True if successful.

# File lib/testlab/provisioners/chef/omni_truck.rb, line 36
def on_container_provision(container)
  omnitruck_template = File.join(TestLab::Provisioner::Chef.template_dir, 'omni_truck.erb')

  config = {}.merge!({
    :server_name => container.ip,
    :chef_solo_attributes => build_omni_truck_attributes(container),
    :chef_validator => '/etc/chef-server/chef-validator.pem',
    :chef_webui => '/etc/chef-server/chef-webui.pem',
    :chef_admin => '/etc/chef-server/admin.pem',
    :local_user => ENV['USER'],
    :default_password => "p@ssw01d",
    :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(omnitruck_template, config))

  true
end

Private Instance Methods

build_omni_truck_attributes(container) click to toggle source
# File lib/testlab/provisioners/chef/omni_truck.rb, line 60
def build_omni_truck_attributes(container)
  {
    "chef-server" => {
      "api_fqdn" => container.ip,
      "nginx" => {
        "enable_non_ssl" => true,
        "server_name" => container.ip,
        "url" => @config[:chef][:server][:server_url]
      },
      "lb" => {
        "fqdn" => container.ip
      },
      "bookshelf" => {
        "vip" => container.ip
      },
      "chef_server_webui" => {
        "enable" => true
      },
      "version" => @config[:chef][:server][:version],
      "prereleases" => @config[:chef][:server][:prereleases],
      "nightlies" => @config[:chef][:server][:nightlies]
    },
    "run_list" => %w(recipe[chef-server::default])
  }
end