class Rubble::Tool

Attributes

environments[RW]
resources[RW]
servers[RW]

Public Class Methods

new() click to toggle source
# File lib/rubble/tool.rb, line 16
def initialize
    @log = Logging.logger[self]
    @resources = {}
    @servers = {}
    @environments = {}
end

Public Instance Methods

configure(config, file_name = nil) click to toggle source
# File lib/rubble/tool.rb, line 118
def configure(config, file_name = nil)
    self.instance_eval(config, file_name)
end
configure_resource(type, name, *params, &block) click to toggle source
# File lib/rubble/tool.rb, line 102
def configure_resource(type, name, *params, &block)
    resource = provide_resource(type, name) do
        create_resource(type, name, params)
    end
    if not block.nil? then
        Docile.dsl_eval(resource, &block)
    end
end
create_plan(type, env, server, *params, &block) click to toggle source
# File lib/rubble/tool.rb, line 83
def create_plan(type, env, server, *params, &block)
    Plan.const_get(type.to_s.capitalize).new(env, server, *params)
end
create_resource(type, name, *params, &block) click to toggle source
# File lib/rubble/tool.rb, line 75
def create_resource(type, name, *params, &block)
    Resource.const_get(type.to_s.capitalize).new(name, *params)
end
create_target(type, name, *params, &block) click to toggle source
# File lib/rubble/tool.rb, line 79
def create_target(type, name, *params, &block)
    Target.const_get(type.to_s.capitalize).new(name, *params)
end
environment(name, &block) click to toggle source
# File lib/rubble/tool.rb, line 42
def environment(name, &block)
    environment = @environments.fetch(name) do |k|
        @environments[name] = Environment.new(self, name)
    end
    if not block.nil? then
        Docile.dsl_eval(environment, &block)
    end
end
execute(environment_names) { |plan, context| ... } click to toggle source
# File lib/rubble/tool.rb, line 23
def execute(environment_names)
    context = Context.new(self)
    begin
        environment_names.each do |environment_name|
            environment = @environments[environment_name]

            if environment.nil? then
                raise ArgumentError, "Undefined environment '#{environment_name}'."
            end

            environment.execute(context) do |plan|
                yield(plan, context)
            end
        end
    ensure
        context.close
    end
end
is_plan?(symbol) click to toggle source
# File lib/rubble/tool.rb, line 70
def is_plan?(symbol)
    name = symbol.to_s
    name =~ /^[a-z_]+$/i and Plan.const_defined?(name.capitalize)
end
is_resource?(symbol) click to toggle source
# File lib/rubble/tool.rb, line 65
def is_resource?(symbol)
    name = symbol.to_s
    name =~ /^[a-z_]+$/i and Resource.const_defined?(name.capitalize)
end
is_target?(symbol) click to toggle source
# File lib/rubble/tool.rb, line 60
def is_target?(symbol)
    name = symbol.to_s
    name =~ /^[a-z_]+$/i and Target.const_defined?(name.capitalize)
end
method_missing(symbol, *arguments, &block) click to toggle source
Calls superclass method
# File lib/rubble/tool.rb, line 122
def method_missing(symbol, *arguments, &block)
    if is_resource?(symbol) then
        configure_resource(symbol, arguments[0], *arguments[1..-1], &block)
    else
        super
    end
end
provide_resource(type, name) { |: create_resource(type, name)| ... } click to toggle source
# File lib/rubble/tool.rb, line 93
def provide_resource(type, name)
    group = @resources.fetch(type) do |k|
        @resources[k] = {}
    end
    group.fetch(name) do |k|
        group[name] = block_given? ? yield : create_resource(type, name)
    end
end
provide_server(name) { |: server| ... } click to toggle source
# File lib/rubble/tool.rb, line 87
def provide_server(name)
    @servers.fetch(name) do |k|
        @servers[name] = block_given? ? yield : Server.new(self, name)
    end
end
read_config(file_name) click to toggle source
# File lib/rubble/tool.rb, line 111
def read_config(file_name)
    if File.exists?(file_name) then
        @log.info("Reading configuration from '#{file_name}'.")
        configure(File.read(file_name), file_name)
    end
end
respond_to?(symbol, include_private = false) click to toggle source
Calls superclass method
# File lib/rubble/tool.rb, line 130
def respond_to?(symbol, include_private = false)
    if is_target?(symbol) then
        true
    else
        super
    end
end
server(name, &block) click to toggle source
# File lib/rubble/tool.rb, line 51
def server(name, &block)
    server = @servers.fetch(name) do |k|
        @servers[name] = Server.new(self, name)
    end
    if not block.nil? then
        Docile.dsl_eval(server, &block)
    end
end