From 08e132a4d25e1da56e46ed6ae4d510ed5a8c888b Mon Sep 17 00:00:00 2001 From: Tristan Ancelet Date: Sat, 29 Jun 2024 14:21:36 -0500 Subject: [PATCH] Added documentation & TODOs resource.rb & changed time format in base.erb --- lib/resource.rb | 36 +++++++++++++++++++++++++++++++++--- templates/base.erb | 8 +++++--- 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/lib/resource.rb b/lib/resource.rb index 7555bf4..4958d63 100644 --- a/lib/resource.rb +++ b/lib/resource.rb @@ -1,15 +1,38 @@ module RubyQA class Resource + # This is responsible for data gathering & parsing to provide the test-writers direct access to + # resource information without needing to manually specify them in their code. attr_reader :name, :data + + # REQUIREMENTS + # This is a Hash that is meant to serve as a way of determining if a resource needs to be + # added to a host. If a key is defined here it will be checked against the information + # configured on the host. If it does not find matching keys it will not be added + # + # If empty it will just be assumed that this resource can be added to the host. + # + # This MUST be defined in each Resourced subclass, as otherwise manager will error when + # adding this resource to host. REQUIREMENTS = {} + def initialize (host) @host = host @data = Hash.new @gather_command = "" end + # TODO: Create validate_host method to replace REQUIREMENTS for a bit more flexiblity on + # determining if a host is valid for this resource to be added to it. + + # TODO: Add a discovery method for the resource to find out if the necessary utilities or + # otherwise are on the host + def gather + # Handles gathering the information from the host. Provided the developer has provided a + # @gather_command it will run that command on the remote host & provide the output to the + # user/dev implemented parse command. This can be overwritten by the sublcass to make it all in one in cases + # where something needs to be done differently if not @gather_command.empty? output = @host.exec(@gather_command) parse(output) @@ -19,20 +42,22 @@ module RubyQA end def parse(output) + # Subclass Implemented method that is supposed to handle parsing the gathered data on the remote node. 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 + ## This will allow me to iterate through all subclasses without + ## having to manually define them elsewhere 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 + require 'json' + REQUIREMENTS = {} def initialize (host) super host @@ -46,6 +71,8 @@ module RubyQA end class DRDB < Resource + # Handles gathering DRBD related information from the drbdadm utility. + REQUIREMENTS = { :cluster => true } @@ -56,6 +83,9 @@ module RubyQA @gather_command = "sudo drbdadm" end + # TODO: Add a XML parser to requires & have the parse method load the config from the `sudo drbdadm dump-xml` + # command + def parse (output) @data = output end diff --git a/templates/base.erb b/templates/base.erb index 410da7e..d974683 100644 --- a/templates/base.erb +++ b/templates/base.erb @@ -1,6 +1,6 @@ RubyQA Test Report -QA Date: <%= Time.now %> +QA Date: <%= Time.now.strftime("%Y/%m/%d %l:%M:%S %Z") %> QA Runner: <%= ENV['USER'] %> QA Tests: <%= Manager.tests.count %> <% Manager.tests.each do |test| -%> @@ -11,8 +11,10 @@ QA Hosts: - <%= host.name %> (<%= host.data[:ip] %>) <% end -%> -Tests Begin ------------ +############### +# Tests Begin # +############### + <% Manager.tests.each do |test| -%> <%= test.report %> <% end -%>