From bcb8564ae9aa70a9ff4f897310256c940d978ec2 Mon Sep 17 00:00:00 2001 From: Ken Robertson Date: Wed, 31 Aug 2011 14:58:30 -0700 Subject: [PATCH] Rehashing to work as an NRPE replacement --- lib/metis.rb | 30 +++-------- lib/metis/agent_context.rb | 39 -------------- lib/metis/application.rb | 10 ---- lib/metis/check_definition.rb | 39 ++++++++++++++ lib/metis/check_definition_list.rb | 20 +++++++ lib/metis/configuration_definition.rb | 17 ++++++ lib/metis/context.rb | 32 +++++++++++ lib/metis/dsl/check_dsl.rb | 32 ----------- lib/metis/dsl/host_role_dsl.rb | 28 ---------- lib/metis/host.rb | 2 - lib/metis/mixin/convert_to_class_name.rb | 22 -------- lib/metis/mixin/from_file.rb | 31 +++++++++++ lib/metis/mixin/params_validate.rb | 7 ++- lib/metis/nrpe_packet.rb | 68 ++++++++++++++++++++++++ lib/metis/provider.rb | 55 ++++++++++++------- lib/metis/provider/check.rb | 5 -- lib/metis/provider/check_http.rb | 22 -------- lib/metis/provider/check_port.rb | 16 ------ lib/metis/provider/check_true.rb | 6 --- lib/metis/resource.rb | 46 ---------------- lib/metis/resource/check.rb | 7 --- lib/metis/resource/check_http.rb | 61 --------------------- lib/metis/resource/check_port.rb | 34 ------------ lib/metis/resource/check_snmp.rb | 17 ------ lib/metis/resource/check_true.rb | 7 --- lib/metis/solo_context.rb | 31 ----------- lib/metis/system_context.rb | 66 ----------------------- lib/metis/version.rb | 2 +- metis.gemspec | 1 - 29 files changed, 252 insertions(+), 501 deletions(-) delete mode 100644 lib/metis/agent_context.rb delete mode 100644 lib/metis/application.rb create mode 100644 lib/metis/check_definition.rb create mode 100644 lib/metis/check_definition_list.rb create mode 100644 lib/metis/configuration_definition.rb create mode 100644 lib/metis/context.rb delete mode 100644 lib/metis/dsl/check_dsl.rb delete mode 100644 lib/metis/dsl/host_role_dsl.rb delete mode 100644 lib/metis/host.rb delete mode 100644 lib/metis/mixin/convert_to_class_name.rb create mode 100644 lib/metis/mixin/from_file.rb create mode 100644 lib/metis/nrpe_packet.rb delete mode 100644 lib/metis/provider/check.rb delete mode 100644 lib/metis/provider/check_http.rb delete mode 100644 lib/metis/provider/check_port.rb delete mode 100644 lib/metis/provider/check_true.rb delete mode 100644 lib/metis/resource.rb delete mode 100644 lib/metis/resource/check.rb delete mode 100644 lib/metis/resource/check_http.rb delete mode 100644 lib/metis/resource/check_port.rb delete mode 100644 lib/metis/resource/check_snmp.rb delete mode 100644 lib/metis/resource/check_true.rb delete mode 100644 lib/metis/solo_context.rb delete mode 100644 lib/metis/system_context.rb diff --git a/lib/metis.rb b/lib/metis.rb index 20a3b5d..631d101 100644 --- a/lib/metis.rb +++ b/lib/metis.rb @@ -1,30 +1,12 @@ -require 'clockwork' -require 'ohai' - class Metis end require 'metis/version' - +require 'metis/mixin/from_file' require 'metis/mixin/params_validate' -require 'metis/mixin/convert_to_class_name' - -require 'metis/host' - -require 'metis/dsl/check_dsl' -require 'metis/dsl/host_role_dsl' - +require 'metis/context' +require 'metis/check_definition' +require 'metis/check_definition_list' +require 'metis/configuration_definition' require 'metis/provider' -require 'metis/provider/check' -require 'metis/provider/check_true' -require 'metis/provider/check_http' -require 'metis/provider/check_port' - -require 'metis/resource' -require 'metis/resource/check' -require 'metis/resource/check_true' -require 'metis/resource/check_http' -require 'metis/resource/check_port' - -require 'metis/solo_context' -require 'metis/agent_context' +require 'metis/nrpe_packet' \ No newline at end of file diff --git a/lib/metis/agent_context.rb b/lib/metis/agent_context.rb deleted file mode 100644 index 763af11..0000000 --- a/lib/metis/agent_context.rb +++ /dev/null @@ -1,39 +0,0 @@ -class Metis::AgentContext - include Clockwork - - attr_reader :host, :checks, :alerts - - def initialize - @host = Metis::Host.new - @host.all_plugins - @checks = {} - @alerts = [] - end - - def read_file(filename) - if File.exists?(filename) && File.readable?(filename) - dsl = Metis::Dsl::CheckDsl.new(self) - dsl.instance_eval(IO.read(filename), filename, 1) - @checks.merge!(dsl.checks) - else - raise IOError, "Cannot open or read #{filename}!" - end - end - - def start - handler do |job| - check = @checks[job] - provider = check.class.provider_base.new(check, self) - provider.execute if provider.prepare - puts "WARNING! HOST #{host.name} HAS ALERTS:\n#{@alerts.join("\n")}\n\n" unless @alerts.empty? - @alerts.clear - end - - @checks.values.each do |check| - every check.every, check.name - end - - run - end - -end diff --git a/lib/metis/application.rb b/lib/metis/application.rb deleted file mode 100644 index a3fba23..0000000 --- a/lib/metis/application.rb +++ /dev/null @@ -1,10 +0,0 @@ -class Metis::Application - def initialize(options={}) - @context = options[:context_class].new - @context.read_file(options[:config_file]) - end - - def run - @context.start - end -end diff --git a/lib/metis/check_definition.rb b/lib/metis/check_definition.rb new file mode 100644 index 0000000..bd7da6b --- /dev/null +++ b/lib/metis/check_definition.rb @@ -0,0 +1,39 @@ +require 'metis/mixin/params_validate' + +class Metis + class CheckDefinition + include Metis::Mixin::ParamsValidate + + attr_accessor :name, :params + + def initialize + @name = nil + @params = {} + @requires = [] + end + + def attribute(attr_name, validation_opts={}) + shim_method=<<-SHIM + def #{attr_name}(arg=nil) + set_or_return(:#{attr_name.to_s}, arg, #{validation_opts.inspect}) + end + SHIM + set_or_return(attr_name.to_sym, nil, validation_opts) + self.instance_eval(shim_method) + end + + def require_gem(*libs) + @requires << libs + @requires.flatten! + end + + def execute(&block) + set_or_return(:execute, block, :kind_of => [Proc]) + end + + def _requires + @requires + end + + end +end diff --git a/lib/metis/check_definition_list.rb b/lib/metis/check_definition_list.rb new file mode 100644 index 0000000..07c3554 --- /dev/null +++ b/lib/metis/check_definition_list.rb @@ -0,0 +1,20 @@ +require 'metis/mixin/from_file' +require 'metis/check_definition' + +class Metis + class CheckDefinitionList + include Metis::Mixin::FromFile + + attr_accessor :defines + + def initialize + @defines = Hash.new + end + + def define(check_name, &block) + @defines[check_name] = CheckDefinition.new + @defines[check_name].instance_eval(&block) + true + end + end +end diff --git a/lib/metis/configuration_definition.rb b/lib/metis/configuration_definition.rb new file mode 100644 index 0000000..4bf3e3e --- /dev/null +++ b/lib/metis/configuration_definition.rb @@ -0,0 +1,17 @@ +require 'metis/mixin/from_file' + +class Metis + class ConfigurationDefinition + include Metis::Mixin::FromFile + + def initialize(context) + @context = context + end + + def configure(check_name, &block) + raise "Unknown check definition: #{check_name}" unless @context.definitions[check_name] + @context.definitions[check_name].instance_eval(&block) + true + end + end +end diff --git a/lib/metis/context.rb b/lib/metis/context.rb new file mode 100644 index 0000000..d59be91 --- /dev/null +++ b/lib/metis/context.rb @@ -0,0 +1,32 @@ +class Metis + class Context + + attr_reader :definitions + + def initialize + @definitions = Hash.new + end + + def load + load_checks + load_configs + true + end + + def load_checks + Dir.glob("checks/*.rb").each do |filename| + checklist = Metis::CheckDefinitionList.new + checklist.from_file(filename) + definitions.merge!(checklist.defines) do |key, oldval, newval| + puts "Overriding duplicate definition #{key}, new definition found in #{filename}" + newval + end + end + end + + def load_configs + configdefinition = ConfigurationDefinition.new(self) + configdefinition.from_file("config.rb") + end + end +end \ No newline at end of file diff --git a/lib/metis/dsl/check_dsl.rb b/lib/metis/dsl/check_dsl.rb deleted file mode 100644 index 4cf7e64..0000000 --- a/lib/metis/dsl/check_dsl.rb +++ /dev/null @@ -1,32 +0,0 @@ -class Metis - module Dsl - class CheckDsl - include Metis::Mixin::ConvertToClassName - - attr_reader :context, :checks - - def initialize(context) - @context = context - @checks = {} - end - - def host - @context.host - end - - def method_missing(method_name, *args, &block) - name = args.first - @checks[name] = load_check(method_name, name, block) - end - - private - - def load_check(type, name, block) - check_class = Metis::Resource.const_get(convert_to_class_name(type.to_s)) - resource = check_class.new(name, context) - resource.instance_eval(&block) - resource - end - end - end -end diff --git a/lib/metis/dsl/host_role_dsl.rb b/lib/metis/dsl/host_role_dsl.rb deleted file mode 100644 index 5523d9a..0000000 --- a/lib/metis/dsl/host_role_dsl.rb +++ /dev/null @@ -1,28 +0,0 @@ -class Metis - module Dsl - class HostRoleDsl - - attr_reader :context, :checks, :roles - - def initialize(context) - @context = context - @checks = {} - @roles = [] - end - - def host - @context.host - end - - def include_role(name) - @roles << name unless @roles.include?(name) - end - - def include_check(name, *args) - check_params = args.pop || {} - @checks << { :name => name, :type => args.first, :params => check_params } - end - - end - end -end diff --git a/lib/metis/host.rb b/lib/metis/host.rb deleted file mode 100644 index 950226a..0000000 --- a/lib/metis/host.rb +++ /dev/null @@ -1,2 +0,0 @@ -class Metis::Host < Ohai::System -end diff --git a/lib/metis/mixin/convert_to_class_name.rb b/lib/metis/mixin/convert_to_class_name.rb deleted file mode 100644 index 322dc41..0000000 --- a/lib/metis/mixin/convert_to_class_name.rb +++ /dev/null @@ -1,22 +0,0 @@ -class Metis - module Mixin - module ConvertToClassName - def convert_to_class_name(str) - rname = nil - regexp = %r{^(.+?)(_(.+))?$} - - mn = str.match(regexp) - if mn - rname = mn[1].capitalize - - while mn && mn[3] - mn = mn[3].match(regexp) - rname << mn[1].capitalize if mn - end - end - - rname - end - end - end -end diff --git a/lib/metis/mixin/from_file.rb b/lib/metis/mixin/from_file.rb new file mode 100644 index 0000000..5413196 --- /dev/null +++ b/lib/metis/mixin/from_file.rb @@ -0,0 +1,31 @@ +class Metis + module Mixin + module FromFile + + # Loads a given ruby file, and runs instance_eval against it in the context of the current + # object. + # + # Raises an IOError if the file cannot be found, or is not readable. + def from_file(filename) + if File.exists?(filename) && File.readable?(filename) + self.instance_eval(IO.read(filename), filename, 1) + else + raise IOError, "Cannot open or read #{filename}!" + end + end + + # Loads a given ruby file, and runs class_eval against it in the context of the current + # object. + # + # Raises an IOError if the file cannot be found, or is not readable. + def class_from_file(filename) + if File.exists?(filename) && File.readable?(filename) + self.class_eval(IO.read(filename), filename, 1) + else + raise IOError, "Cannot open or read #{filename}!" + end + end + + end + end +end diff --git a/lib/metis/mixin/params_validate.rb b/lib/metis/mixin/params_validate.rb index 815059e..272778c 100644 --- a/lib/metis/mixin/params_validate.rb +++ b/lib/metis/mixin/params_validate.rb @@ -59,16 +59,15 @@ def validate(opts, map) end def set_or_return(symbol, arg, validation) - iv_symbol = "@#{symbol.to_s}".to_sym map = { symbol => validation } - if arg == nil && self.instance_variable_defined?(iv_symbol) == true - self.instance_variable_get(iv_symbol) + if arg == nil && self.params[symbol] + self.params[symbol] else opts = validate({ symbol => arg }, { symbol => validation }) - self.instance_variable_set(iv_symbol, opts[symbol]) + self.params[symbol] = opts[symbol] end end diff --git a/lib/metis/nrpe_packet.rb b/lib/metis/nrpe_packet.rb new file mode 100644 index 0000000..49f36c8 --- /dev/null +++ b/lib/metis/nrpe_packet.rb @@ -0,0 +1,68 @@ +require 'zlib' + +class Metis + class NrpePacket + NRPE_PACKET_VERSION_3 = 3 + NRPE_PACKET_VERSION_2 = 2 + NRPE_PACKET_VERSION_1 = 1 + + QUERY_PACKET = 1 + RESPONSE_PACKET = 2 + + MAX_PACKETBUFFER_LENGTH = 1024 + + MAX_PACKET_SIZE = 12 + 1024 + + attr_accessor :packet_version, :crc32, :result_code, :buffer + + def initialize(unpacked=nil) + @packet_version = NRPE_PACKET_VERSION_2 + @random = 1 + + if unpacked + @packet_version = unpacked[0] + @packet_type = unpacked[1] + @crc32 = unpacked[2] + @result_code = unpacked[3] + @buffer = unpacked[4] + @random = unpacked[5] + end + end + + def packet_type + case @packet_type + when QUERY_PACKET then :query + when RESPONSE_PACKET then :response + end + end + + def packet_type=(type) + case type + when :query then @packet_type = QUERY_PACKET + when :response then @packet_type = RESPONSE_PACKET + else + raise "Invalid packet type" + end + end + + def calculate_crc32 + Zlib::crc32(self.to_bytes(0)) + end + + def validate_crc32 + raise 'Invalid CRC32' unless @crc32 == self.calculate_crc32 + end + + def to_bytes(use_crc32=self.calculate_crc32) + [ @packet_version, @packet_type, use_crc32, @result_code, @buffer, @random].pack("nnNna#{MAX_PACKETBUFFER_LENGTH}n") + end + + def self.read(io) + bytes = io.read(MAX_PACKET_SIZE) + values = bytes.unpack("nnNnA#{MAX_PACKETBUFFER_LENGTH}n") + packet = self.new(values) + packet.validate_crc32 + packet + end + end +end diff --git a/lib/metis/provider.rb b/lib/metis/provider.rb index 0b43bae..d0d82a1 100644 --- a/lib/metis/provider.rb +++ b/lib/metis/provider.rb @@ -1,25 +1,40 @@ -class Metis::Provider - attr_accessor :resource, :context +class Metis + class Provider + attr_reader :definition + + def initialize(definition) + @definition = definition + end - def initialize(resource, context) - @resource = resource - @context = context - end + def params + definition.params + end - def host - @context.host - end + def warn(msg) + puts msg + end + + def critical(msg) + puts msg + end + + def ok(msg=nil) + puts msg + end - def add_alert(message) - @context.alerts << message - end + def run + self.instance_eval(&definition.execute) if prepare + end + + private - def prepare - f = nil - resource._requires.each { |r| f = r ; require r } - true - rescue LoadError - add_alert("Failed to load: #{f}") - false + def prepare + f = nil + definition._requires.each { |r| f = r ; require r } + true + rescue LoadError + critical("Failed to load: #{f}") + false + end end -end +end \ No newline at end of file diff --git a/lib/metis/provider/check.rb b/lib/metis/provider/check.rb deleted file mode 100644 index b03c9d2..0000000 --- a/lib/metis/provider/check.rb +++ /dev/null @@ -1,5 +0,0 @@ -class Metis::Provider::Check < Metis::Provider - def execute - resource.execute.call - end -end diff --git a/lib/metis/provider/check_http.rb b/lib/metis/provider/check_http.rb deleted file mode 100644 index e989a94..0000000 --- a/lib/metis/provider/check_http.rb +++ /dev/null @@ -1,22 +0,0 @@ -require 'net/http' - -class Metis::Provider::CheckHttp < Metis::Provider - def execute - http = Net::HTTP.new(host[:ip_address], resource.port) - http.open_timeout = resource.timeout - http.read_timeout = resource.timeout - - request = Net::HTTP.const_get(convert_to_class_name(resource.method.to_s)).new(resource.path) - response = http.start {|http| http.request(request) } - - add_alert("Expected status #{resource.status}, received #{response.code}") if resource.status != response.code.to_i - - if resource.value - if resource.value.is_a?(Regexp) - add_alert("Expected regex was not met") unless resource.value.match(response.body) - else - add_alert("Expected value not received") if response.body.chomp != resource.value.to_s.chomp - end - end - end -end diff --git a/lib/metis/provider/check_port.rb b/lib/metis/provider/check_port.rb deleted file mode 100644 index 03b3ad1..0000000 --- a/lib/metis/provider/check_port.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'socket' -require 'timeout' - -class Metis::Provider::CheckPort < Metis::Provider - def execute - Timeout::timeout(resource.timeout) do - if resource.type == :tcp - socket = TCPSocket.open(host[:ip_address], resource.port) - socket.close - elsif resource.type == :udp - udp = UDPSocket.new - udp.connect(host[:ip_address], resource.port) - end - end - end -end diff --git a/lib/metis/provider/check_true.rb b/lib/metis/provider/check_true.rb deleted file mode 100644 index e047321..0000000 --- a/lib/metis/provider/check_true.rb +++ /dev/null @@ -1,6 +0,0 @@ -class Metis::Provider::CheckTrue < Metis::Provider - def execute - result = resource.execute.call - add_alert("Returned #{result.inspect}") unless result - end -end diff --git a/lib/metis/resource.rb b/lib/metis/resource.rb deleted file mode 100644 index 57c3c0b..0000000 --- a/lib/metis/resource.rb +++ /dev/null @@ -1,46 +0,0 @@ -class Metis::Resource - include Metis::Mixin::ParamsValidate - - attr_reader :name - attr_reader :context - - def initialize(name, context=nil) - @name = name - @context = context - @requires = [] - @every = 5.minutes - end - - def host - @context.host - end - - def include_require(*libs) - @requires << libs - @requires.flatten! - end - - def add_alert(message) - @context.alerts << message - end - - def every(arg=nil) - set_or_return( - :every, - arg, - :kind_of => [ Fixnum ] - ) - end - - def _requires - @requires - end - - class << self - def provider_base(arg=nil) - @provider_base ||= arg - @provider_base ||= Metis::Provider - end - end - -end \ No newline at end of file diff --git a/lib/metis/resource/check.rb b/lib/metis/resource/check.rb deleted file mode 100644 index 505d568..0000000 --- a/lib/metis/resource/check.rb +++ /dev/null @@ -1,7 +0,0 @@ -class Metis::Resource::Check < Metis::Resource - provider_base Metis::Provider::Check - - def execute(&block) - set_or_return(:execute, block, :kind_of => [Proc]) - end -end diff --git a/lib/metis/resource/check_http.rb b/lib/metis/resource/check_http.rb deleted file mode 100644 index dff45c0..0000000 --- a/lib/metis/resource/check_http.rb +++ /dev/null @@ -1,61 +0,0 @@ -class Metis::Resource::CheckHttp < Metis::Resource - provider_base Metis::Provider::CheckHttp - - def initialize(name, context=nil) - super - @timeout = 10 - @method = :get - @path = '/' - @port = 80 - @status = 200 - end - - def timeout(arg=nil) - set_or_return( - :timeout, - arg, - :kind_of => [ Fixnum ] - ) - end - - def method(arg=nil) - set_or_return( - :method, - arg, - :kind_of => [ Symbol, String ] - ) - end - - def path(arg=nil) - set_or_return( - :path, - arg, - :kind_of => [ String ] - ) - end - - def port(arg=nil) - set_or_return( - :port, - arg, - :kind_of => [ Fixnum ] - ) - end - - def status(arg=nil) - set_or_return( - :status, - arg, - :kind_of => [ Fixnum ] - ) - end - - def value(arg=nil) - set_or_return( - :value, - arg, - :kind_of => [ String, Regexp ] - ) - end - -end diff --git a/lib/metis/resource/check_port.rb b/lib/metis/resource/check_port.rb deleted file mode 100644 index a6e44e3..0000000 --- a/lib/metis/resource/check_port.rb +++ /dev/null @@ -1,34 +0,0 @@ -class Metis::Resource::CheckPort < Metis::Resource - provider_base Metis::Provider::CheckPort - - def initialize(name, context=nil) - super - @timeout = 10 - @type = :tcp - end - - def timeout(arg=nil) - set_or_return( - :timeout, - arg, - :kind_of => [ Fixnum ] - ) - end - - def type(arg=nil) - set_or_return( - :type, - arg, - :kind_of => [ Symbol ] - ) - end - - def port(arg=nil) - set_or_return( - :port, - arg, - :kind_of => [ Fixnum ] - ) - end - -end diff --git a/lib/metis/resource/check_snmp.rb b/lib/metis/resource/check_snmp.rb deleted file mode 100644 index e0ac6c4..0000000 --- a/lib/metis/resource/check_snmp.rb +++ /dev/null @@ -1,17 +0,0 @@ -require 'net_snmp' - -class Metis::Runner::CheckPort < Metis::Runner - def execute - timeout = @params[:timeout] || 3 - version = @params[:version] || :SNMPv1 - community @params[:community] || 'public' - - manager = NetSNMP::Manager.new(:host => host[:ip_address], :version => version, :community => community, :timeout => timeout) - response = manager.get(@params[:oid]) - if response.error_status == NetSNMP::SUCCESS - response.each_varbind {|vb| puts "#{vb.name}: #{vb.value}"} - else - puts response.error_description - end - end -end diff --git a/lib/metis/resource/check_true.rb b/lib/metis/resource/check_true.rb deleted file mode 100644 index 1d4f05d..0000000 --- a/lib/metis/resource/check_true.rb +++ /dev/null @@ -1,7 +0,0 @@ -class Metis::Resource::CheckTrue < Metis::Resource - provider_base Metis::Provider::CheckTrue - - def execute(&block) - set_or_return(:execute, block, :kind_of => [Proc]) - end -end diff --git a/lib/metis/solo_context.rb b/lib/metis/solo_context.rb deleted file mode 100644 index 55b7f45..0000000 --- a/lib/metis/solo_context.rb +++ /dev/null @@ -1,31 +0,0 @@ -class Metis::SoloContext - - attr_reader :host, :checks, :alerts - - def initialize - @host = Metis::Host.new - @host.all_plugins - @checks = {} - @alerts = [] - end - - def read_file(filename) - if File.exists?(filename) && File.readable?(filename) - dsl = Metis::Dsl::CheckDsl.new(self) - dsl.instance_eval(IO.read(filename), filename, 1) - @checks.merge!(dsl.checks) - else - raise IOError, "Cannot open or read #{filename}!" - end - end - - def start - @checks.values.each do |check| - provider = check.class.provider_base.new(check, self) - provider.execute if provider.prepare - puts "WARNING! HOST #{host.name} HAS ALERTS:\n#{@alerts.join("\n")}\n\n" unless @alerts.empty? - @alerts.clear - end - end - -end diff --git a/lib/metis/system_context.rb b/lib/metis/system_context.rb deleted file mode 100644 index 1d51bba..0000000 --- a/lib/metis/system_context.rb +++ /dev/null @@ -1,66 +0,0 @@ -class Metis::SystemContext - - include Metis::Mixin::ConvertToClassName - - attr_reader :hosts - attr_reader :roles - attr_reader :checks - - def initialize - @hosts = {} - @roles = {} - @checks = {} - end - - def converge - @hosts.values.each do |host| - host.checks.each do |c| - host.checks.replace(c, load_check(host, c)) - end - - host.checks << host.roles.flatten.collect do |role| - r = @roles[role] - next unless r - r.checks.flatten.collect { |c| load_check(host, c) } - end - - host.checks.flatten!.compact! - end - end - - def monitor - @hosts.values.each do |host| - host.checks.each do |check| - provider = check.class.provider_base.new(check, Metis::HostContext.new(host)) - provider.execute if provider.prepare - end - puts "WARNING! HOST #{host.name} HAS ALERTS:\n#{host.alerts.join("\n")}\n\n" unless host.alerts.empty? - end - end - - private - - def load_check(host, params) - check_context = @checks[params[:name]] || {} - - check_class = find_class_or_symbol(params[:type] || check_context[:type]) - #raise "Invalid check defined: #{params.inspect}" - return nil unless check_class - - check_params = (check_context[:params] || {}) - context = Metis::HostContext.new(host) - - check = check_class.new(params[:name], context) # TODO , check_params) - check.instance_eval(&check_context[:block]) if check_context[:block] - check - end - - def find_class_or_symbol(sym) - return nil unless sym - return sym if sym.is_a?(Class) - - class_name = convert_to_class_name(sym.to_s) - Metis::Resource.const_get(class_name) - end - -end \ No newline at end of file diff --git a/lib/metis/version.rb b/lib/metis/version.rb index b98b28e..e8f5f22 100644 --- a/lib/metis/version.rb +++ b/lib/metis/version.rb @@ -1,3 +1,3 @@ class Metis - VERSION = '0.1.0' + VERSION = '0.2.0' end diff --git a/metis.gemspec b/metis.gemspec index eb7b8a1..a92c02f 100644 --- a/metis.gemspec +++ b/metis.gemspec @@ -13,7 +13,6 @@ Gem::Specification.new do |s| s.homepage = "http://github.com/krobertson/metis" s.add_dependency "ohai", ">= 0.5.7" - s.add_dependency "clockwork" s.bindir = "bin" s.executables = %w( metis-solo metis-agent )