66 lines
1.3 KiB
Ruby
66 lines
1.3 KiB
Ruby
|
module RubyQA
|
||
|
class Resource
|
||
|
attr_reader :name, :data
|
||
|
REQUIREMENTS = {}
|
||
|
|
||
|
def initialize (host)
|
||
|
@host = host
|
||
|
@data = Hash.new
|
||
|
@gather_command = ""
|
||
|
end
|
||
|
|
||
|
def gather
|
||
|
if not @gather_command.empty?
|
||
|
output = @host.exec(@gather_command)
|
||
|
parse(output)
|
||
|
else
|
||
|
raise "@gather_command was not defined on Resource[#{@name}]"
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def parse(output)
|
||
|
raise "parse not yet implemented on Resource[#{@name}]"
|
||
|
end
|
||
|
|
||
|
## This will allow me to iterate through all subclasses without
|
||
|
## having to manually define them elsewhere
|
||
|
def self.all_resources
|
||
|
ObjectSpace.each_object(Class).select{|klass| klass < self}
|
||
|
end
|
||
|
end
|
||
|
|
||
|
|
||
|
## Gathers the facts from the remote machine via the facter utility
|
||
|
require 'json'
|
||
|
class Facts < Resource
|
||
|
REQUIREMENTS = {}
|
||
|
def initialize (host)
|
||
|
super host
|
||
|
@name = 'facts'
|
||
|
@gather_command = "facter -j"
|
||
|
end
|
||
|
|
||
|
def parse (output)
|
||
|
@data = JSON.load(output)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
class DRDB < Resource
|
||
|
REQUIREMENTS = {
|
||
|
:cluster => true
|
||
|
}
|
||
|
|
||
|
def initialize (host)
|
||
|
super host
|
||
|
@name = 'facts'
|
||
|
@gather_command = "sudo drbdadm"
|
||
|
end
|
||
|
|
||
|
def parse (output)
|
||
|
@data = output
|
||
|
end
|
||
|
end
|
||
|
|
||
|
|
||
|
end
|