class TestLab::Container

Container Class

This class represents the TestLab Container DSL object.

@example A simple container definition with a single interface:

container "server-west-1" do
  domain        "west.zone"

  distro  "ubuntu"
  release "precise"

  user do
    username "deployer"
    password "deployer"
    uid      2600
    gid      2600
  end

  interface do
    network_id 'west'
    name       :eth0
    address    '10.11.0.254/16'
    mac        '00:00:5e:48:e9:6f'
  end
end

@example Multiple interfaces can be defined as well:

container "dual-nic" do
  distro  "ubuntu"
  release "precise"

  user do
    username "deployer"
    password "deployer"
    uid      2600
    gid      2600
  end

  interface do
    network_id 'east'
    name       :eth0
    address    '10.10.0.200/16'
    mac        '00:00:5e:63:b5:9f'
  end

  interface do
    network_id 'west'
    primary    true
    name       :eth1
    address    '10.11.0.200/16'
    mac        '00:00:5e:08:63:df'
  end
end

The operating system is determined by the distro and release attributes. The hostname (container ID) is passed as a parameter to the container call. A domain may additionally be specified (overriding the global domain, if set). If the domain attributes is omited, then the global domain is use, again only if it is set. The hostname (container ID) and the domain will be joined together to form the FQDN of the container.

@see TestLab::Interface

@author Zachary Patten <zachary AT jovelabs DOT com>

Constants

STATUS_KEYS

An array of symbols of the various keys in our status hash.

@see TestLab::Container::Status

Public Class Methods

by_priority(priority) click to toggle source
# File lib/testlab/container.rb, line 209
def by_priority(priority)
  self.all.delete_if{|c| (c.template == true) }.select{ |c| c.priority == priority }
end
new(*args) click to toggle source
Calls superclass method
# File lib/testlab/container.rb, line 154
def initialize(*args)
  @ui = TestLab.ui

  @ui.logger.debug { "Loading Container" }
  super(*args)
  @ui.logger.debug { "Container '#{self.id}' Loaded" }

  if self.priority.nil? && (self.template == false)
    $priority_counter ||= 0
    self.priority     = (1000 - $priority_counter)
    $priority_counter += 1
  end

  self.tags ||= [ self.id ]

  if !self.inherit.nil?
    @ui.logger.debug { "INHERIT: #{self.inherit}" }

    parent = TestLab::Container.first(self.inherit)
    if parent.nil?
      raise ContainerError, "Could not find the container you specified to inherit attributes from! (#{self.inherit.inspect})"
    end

    # Inherit the containers attributes
    parent.attributes.reject{ |k,v| [:id, :node_id, :inherit, :template, :priority].include?(k) }.each do |key, value|
      self.send("#{key}=", (value.dup rescue value))
    end

    # Inherit the containers users
    parent.users.each do |user|
      inherited_user = TestLab::User.new
      inherited_user.container_id = self.id

      user.attributes.reject{ |k,v| [:id, :container_id].include?(k) }.each do |key, value|
        inherited_user.send("#{key}=", (value.dup rescue value))
      end
    end

  end
end
priority_groups() click to toggle source
# File lib/testlab/container.rb, line 205
def priority_groups
  self.all.delete_if{|c| (c.template == true) }.map(&:priority).sort.uniq.reverse
end

Public Instance Methods

config_dir() click to toggle source
# File lib/testlab/container.rb, line 195
def config_dir
  self.node.config_dir
end
repo_dir() click to toggle source
# File lib/testlab/container.rb, line 199
def repo_dir
  self.node.repo_dir
end