class NoradServerspecRunner::Task
Class to run serverspec tests
Constants
- SSH_TIMEOUT
Attributes
host[RW]
ssh_port[RW]
sshkey[RW]
username[RW]
Public Class Methods
new(tests, sub_tests, results_file)
click to toggle source
# File lib/norad_serverspec_runner/task.rb, line 15 def initialize(tests, sub_tests, results_file) @obj = RSpec::Core::RakeTask.new(@host) do |_| true end @obj.pattern = tests @obj.rspec_opts = "-e #{sub_tests} --format json -o #{results_file}" @results_file = results_file end
Public Instance Methods
run()
click to toggle source
# File lib/norad_serverspec_runner/task.rb, line 38 def run pstderr = STDERR.dup ftmp = Tempfile.open('eout') FileUtils.touch @results_file return if unable_to_ssh? # Run the rspec tests if defined?(@host) and defined?(@username) and defined?(@sshkey) ENV['AUDIT_HOST'] = @host ENV['AUDIT_USERNAME'] = @username ENV['AUDIT_SSHKEY'] = @sshkey ENV['AUDIT_SSH_PORT'] = @ssh_port end # Capture STDERR for SSH related errors STDERR.reopen(ftmp) @obj.run_task(true) rescue SystemExit => e ftmp.rewind err = ftmp.read ftmp.close p err # We land here even on successful run (SystemExit exception), only report error if stderr is not empty if err =~ /Please set sudo password to Specinfra.configuration.sudo_password|set :request_pty, true/ write_error_to_results_file "SSH user #{@username} requires SUDO permission with NOPASSWD: option set." elsif not err.empty? write_error_to_results_file err end rescue Exception => e # Unknown exception! write_error_to_results_file e.message ensure STDERR.reopen pstderr end
unable_to_ssh?()
click to toggle source
Check if given host/ip is reachable and we can ssh as root If not, then create empty log file for that host and return false.
# File lib/norad_serverspec_runner/task.rb, line 27 def unable_to_ssh? session = Net::SSH.start( @host, @username, :port => @ssh_port, :timeout => SSH_TIMEOUT, :auth_methods => ['publickey'], :keys => [@sshkey] ) session.exec('ls') session.close() false rescue Net::SSH::AuthenticationFailed, Net::SSH::ConnectionTimeout, Net::SSH::Timeout, Net::SSH::Exception, Errno::ECONNREFUSED, Errno::EHOSTUNREACH => e p e write_error_to_results_file e.message true end
Private Instance Methods
write_error_to_results_file(error)
click to toggle source
# File lib/norad_serverspec_runner/task.rb, line 75 def write_error_to_results_file(error) File.open(@results_file, "w") do |f| f.write "!! NORAD SPECS SSH ERROR !!\nError: #{error}\n" end end