Sha256: d8ead4b80c7d1a7f8cdc181807ef8ec0338ec626e17846316bc9edc7d5b091f6

Contents?: true

Size: 1.91 KB

Versions: 5

Compression:

Stored size: 1.91 KB

Contents

class TestLab

  # Node Error Class
  class NodeError < TestLabError; end

  # Node Class
  #
  # @author Zachary Patten <zachary AT jovelabs DOT com>
  class Node < ZTK::DSL::Base
    STATUS_KEYS   = %w(id instance_id ok state user ip port provider provisioners).map(&:to_sym)

    # Sub-Modules
    autoload :Actions,       'testlab/node/actions'
    autoload :ClassMethods,  'testlab/node/class_methods'
    autoload :LXC,           'testlab/node/lxc'
    autoload :MethodMissing, 'testlab/node/method_missing'
    autoload :Provision,     'testlab/node/provision'
    autoload :SSH,           'testlab/node/ssh'
    autoload :Status,        'testlab/node/status'

    include TestLab::Node::Actions
    include TestLab::Node::LXC
    include TestLab::Node::MethodMissing
    include TestLab::Node::Provision
    include TestLab::Node::SSH
    include TestLab::Node::Status

    extend  TestLab::Node::ClassMethods

    include TestLab::Support::Execution
    include TestLab::Support::Lifecycle

    include TestLab::Utility::Misc

    # Associations and Attributes
    belongs_to :labfile,       :class_name => 'TestLab::Labfile'

    has_many   :containers,    :class_name => 'TestLab::Container'
    has_many   :networks,      :class_name => 'TestLab::Network'

    attribute  :provider
    attribute  :provisioners,  :default => Array.new
    attribute  :config,        :default => Hash.new


    def initialize(*args)
      @ui = TestLab.ui

      @ui.logger.debug { "Loading Node" }

      super(*args)

      @provider = self.provider.new(self.config, @ui)

      raise NodeError, "You must specify a provider class!" if self.provider.nil?

      @ui.logger.debug { "Node '#{self.id}' Loaded" }
    end

    def config_dir
      self.labfile.config_dir
    end

    def repo_dir
      self.labfile.repo_dir
    end

    def domain
      self.config[:bind] ||= Hash.new
      self.config[:bind][:domain] ||= 'tld.invalid'
    end

  end

end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
testlab-1.13.0 lib/testlab/node.rb
testlab-1.12.0 lib/testlab/node.rb
testlab-1.11.7 lib/testlab/node.rb
testlab-1.11.6 lib/testlab/node.rb
testlab-1.11.5 lib/testlab/node.rb