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