class Moob::Pec
Constants
- INFO_FIELDS
Public Class Methods
new(hostname, options = {})
click to toggle source
Calls superclass method
Moob::BaseLom::new
# File lib/moob/pec.rb, line 17 def initialize hostname, options = {} super hostname, options @username ||= 'root' @password ||= 'root' @index = nil end
Public Instance Methods
authenticate()
click to toggle source
# File lib/moob/pec.rb, line 24 def authenticate @session.handle_cookies nil login = @session.get 'login.html' raise ResponseError.new login unless login.status == 200 auth = @session.post 'data/login', "user=#{@username}&password=#{@password}" raise ResponseError.new auth unless auth.status == 200 auth.body =~ /<authResult>([^<]+)<\/authResult>/ raise 'Cannot find auth result' unless $& raise "Auth failed with: \"#{auth.body}\"" unless $1 == "0" auth.body =~ /<forwardUrl>([^<]+)<\/forwardUrl>/ raise 'Cannot find the authenticated index url after auth' unless $& @indexurl = $1 Moob.inform "Requesting indexurl of #{@indexurl}" @authhash = @indexurl.split('?')[1] @index = @session.get @indexurl # someone decided it was a good idea to include a ST2 token in every XHR # request. We need it for a lot of our features. @index.body =~ /var CSRF_TOKEN_2_VALUE = "([0-9a-f]+)";/ raise ResponseError.new @index unless @index.status == 200 @st2 = $1 @session.headers['ST2'] = @st2 return self end
detect()
click to toggle source
# File lib/moob/pec.rb, line 69 def detect begin home = @session.get 'login.html' home.body =~ /Dell Remote Management Controller/ rescue false end end
drac_set_params(params)
click to toggle source
# File lib/moob/pec.rb, line 155 def drac_set_params params params.each do |p,v| req = @session.post "data?set=#{p}:#{v}", {} raise ResponseError.new req unless req.status == 200 end return nil end
enable_ipmi()
click to toggle source
# File lib/moob/pec.rb, line 151 def enable_ipmi drac_set_params({ 'ipmiLAN' => 1 }) end
get_infos(keys)
click to toggle source
# File lib/moob/pec.rb, line 127 def get_infos keys infos = @session.post "data?get=#{keys.join(',')}", {} raise ResponseError.new infos unless infos.status == 200 raise "The status isn't OK" unless infos.body =~ /<status>ok<\/status>/ return Hash[keys.collect do |k| if infos.body =~ /<#{k}>(.*?)<\/#{k}>/ [k, $1] else [k, nil] end end] end
infos()
click to toggle source
# File lib/moob/pec.rb, line 123 def infos return JSON.pretty_generate get_infos INFO_FIELDS end
jnlp()
click to toggle source
# File lib/moob/pec.rb, line 80 def jnlp # On PEC LOM CSRF_TOKEN_1 carries the auth token @index.body =~ /var CSRF_TOKEN_1\s+= \"ST1\" \+ \"=\" \+ "([0-9a-f]+)";/ @st1 = $1 viewer = @session.get "viewer.jnlp(#{@hostname}@0@#{Time.now.to_i * 1000})?ST1=#{@st1}" raise ResponseError.new viewer unless viewer.status == 200 return viewer.body end
logout()
click to toggle source
# File lib/moob/pec.rb, line 63 def logout out = @session.get 'data/logout' raise ResponseError.new out unless out.status == 200 return self end
power_control(action)
click to toggle source
# File lib/moob/pec.rb, line 91 def power_control action req = @session.post "data?set=pwState:#{action}", {} raise ResponseError.new req unless req.status == 200 return nil end
pstatus()
click to toggle source
# File lib/moob/pec.rb, line 111 def pstatus case get_infos(['pwState'])['pwState'] when '0' return :off when '1' return :on else return nil end end
set_params()
click to toggle source
# File lib/moob/pec.rb, line 143 def set_params unless @params raise "Params are not set!" end drac_set_params @params end