class Moob::Idrac6

Constants

INFO_FIELDS

Public Class Methods

new(hostname, options = {}) click to toggle source
Calls superclass method Moob::BaseLom::new
# File lib/moob/idrac6.rb, line 26
def initialize hostname, options = {}
  super hostname, options
  @username ||= 'root'
  @password ||= 'calvin'
end

Public Instance Methods

authenticate() click to toggle source
# File lib/moob/idrac6.rb, line 32
def authenticate
  @session.handle_cookies nil
  start = @session.get 'start.html'
  raise ResponseError.new start unless start.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"
  return self
end
boot_on(level) click to toggle source
# File lib/moob/idrac6.rb, line 90
def boot_on level
  req = @session.post "data?set=vmBootOnce:1,firstBootDevice:#{level}", {}
  raise ResponseError.new req unless req.status == 200
  return nil
end
detect() click to toggle source
# File lib/moob/idrac6.rb, line 53
def detect
  begin
    home = @session.get 'login.html'
    home.body =~ /Integrated Dell Remote Access Controller 6/
  rescue
    false
  end
end
drac_set_params(params) click to toggle source
# File lib/moob/idrac6.rb, line 170
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/idrac6.rb, line 166
def enable_ipmi
  drac_set_params({ 'ipmiLAN' => 1 })
end
fetch_console_preview() click to toggle source
# File lib/moob/idrac6.rb, line 181
def fetch_console_preview
  imgfile = Tempfile.new('console_preview')

  refreshreq = @session.get "data?get=consolepreview[auto%20#{Time.now.utc.to_i}]", {}

  raise ResponseError.new req unless refreshreq.status == 200

  req = @session.get_file "capconsole/scapture0.png?#{Time.now.utc.to_i}", imgfile.path

  raise ResponseError.new req unless req.status == 200

  content_type = req.headers['Content-type'] || req.headers['Content-Type']
  raise "Unexpected content type #{content_type}, expected 'image/' prefix" unless content_type =~ /image\//

  return imgfile, req.headers
end
get_infos(keys) click to toggle source
# File lib/moob/idrac6.rb, line 142
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/idrac6.rb, line 138
def infos
  return JSON.pretty_generate get_infos INFO_FIELDS
end
jnlp() click to toggle source
# File lib/moob/idrac6.rb, line 63
def jnlp
  idx = @session.get 'index.html'
  raise ResponseError.new idx unless idx.status == 200

  idx.body =~ /var DnsName += +"([^"]+)"/
  raise "Couldn't find the DNS name -- is the iDRAC running firmware 1.50 or higher?" unless $&
  dns_name = $1

  idx.body =~ /var sysNameStr += +"([^"]+)"/
  raise "Couldn't find the system name" unless $&
  sys_name = $1 # eg PowerEdge R610

  # eg escaped "idrac-A1BCD2E, PowerEdge R610, User:root"
  title = CGI::escape "#{dns_name}, #{sys_name}, User:#{@username}"

  viewer = @session.get "viewer.jnlp(#{@hostname}@0@#{title}@#{Time.now.to_i * 1000})"
  raise ResponseError.new viewer unless viewer.status == 200

  return viewer.body
end
logout() click to toggle source
# File lib/moob/idrac6.rb, line 47
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/idrac6.rb, line 84
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/idrac6.rb, line 126
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/idrac6.rb, line 158
def set_params
  unless @params
    raise "Params are not set!"
  end
  drac_set_params @params
end