class IbmPowerHmc::Connection

HMC REST Client connection

Public Class Methods

new(host:, username: "hscroot", password:, port: 12_443, validate_ssl: true) click to toggle source
# File lib/ibm_power_hmc/connection.rb, line 7
def initialize(host:, username: "hscroot", password:, port: 12_443, validate_ssl: true)
  # Damien: use URI::HTTPS
  @hostname = "#{host}:#{port}"
  @username = username
  @password = password
  @verify_ssl = validate_ssl
  @api_session_token = nil
end

Public Instance Methods

logoff() click to toggle source
# File lib/ibm_power_hmc/connection.rb, line 36
def logoff
  method_url = "/rest/api/web/Logon"
  request(:delete, method_url)
  @api_session_token = nil
end
logon() click to toggle source
# File lib/ibm_power_hmc/connection.rb, line 16
def logon
  method_url = "/rest/api/web/Logon"
  headers = {
    content_type: "application/vnd.ibm.powervm.web+xml; type=LogonRequest"
  }
  doc = REXML::Document.new("")
  doc.add_element("LogonRequest", {
                    "xmlns" => "http://www.ibm.com/xmlns/systems/power/firmware/web/mc/2012_10/",
                    "schemaVersion" => "V1_1_0"
                  })
  doc.root.add_element("UserID").text = @username
  doc.root.add_element("Password").text = @password

  # Damien: begin/rescue
  @api_session_token = ""
  response = request(:put, method_url, headers, doc.to_s)
  doc = REXML::Document.new(response.body)
  @api_session_token = doc.root.elements["X-API-Session"].text
end
lpar(lpar_uuid, sys_uuid = nil, group_name = nil) click to toggle source
# File lib/ibm_power_hmc/connection.rb, line 82
def lpar(lpar_uuid, sys_uuid = nil, group_name = nil)
  if sys_uuid.nil?
    method_url = "/rest/api/uom/LogicalPartition/#{lpar_uuid}"
  else
    method_url = "/rest/api/uom/ManagedSystem/#{sys_uuid}/LogicalPartition/#{lpar_uuid}"
  end
  method_url += "?group=#{group_name}" unless group_name.nil?

  response = request(:get, method_url)
  doc = REXML::Document.new(response.body)
  entry = doc.elements["entry"]
  LogicalPartition.new(entry)
end
lpar_profiles(lpar_uuid) click to toggle source

Damien: share the same method for VIOS and LPAR?

# File lib/ibm_power_hmc/connection.rb, line 126
def lpar_profiles(lpar_uuid)
  method_url = "/rest/api/uom/LogicalPartition/#{lpar_uuid}/LogicalPartitionProfile"
  begin
    response = request(:get, method_url)
  rescue StandardError
    return []
  end
  doc = REXML::Document.new(response.body)
  profiles = []
  return profiles if doc.root.nil?

  doc.root.each_element("entry") do |entry|
    profile = LogicalPartitionProfile.new(lpar_uuid, entry)
    profiles += [profile]
  end
  profiles
end
lpar_quick_property(lpar_uuid, property_name) click to toggle source
# File lib/ibm_power_hmc/connection.rb, line 96
def lpar_quick_property(lpar_uuid, property_name)
  method_url = "/rest/api/uom/LogicalPartition/#{lpar_uuid}/quick/#{property_name}"

  response = request(:get, method_url)
  response.body[1..-2]
end
lpars(sys_uuid = nil) click to toggle source
# File lib/ibm_power_hmc/connection.rb, line 64
def lpars(sys_uuid = nil)
  if sys_uuid.nil?
    method_url = "/rest/api/uom/LogicalPartition"
  else
    method_url = "/rest/api/uom/ManagedSystem/#{sys_uuid}/LogicalPartition"
  end
  response = request(:get, method_url)
  doc = REXML::Document.new(response.body)
  lpars = []
  return lpars if doc.root.nil?

  doc.root.each_element("entry") do |entry|
    lpar = LogicalPartition.new(entry)
    lpars += [lpar]
  end
  lpars
end
managed_systems() click to toggle source
# File lib/ibm_power_hmc/connection.rb, line 50
def managed_systems
  method_url = "/rest/api/uom/ManagedSystem"
  response = request(:get, method_url)
  doc = REXML::Document.new(response.body)
  systems = []
  return systems if doc.root.nil?

  doc.root.each_element("entry") do |entry|
    system = ManagedSystem.new(entry)
    systems += [system]
  end
  systems
end
management_console() click to toggle source
# File lib/ibm_power_hmc/connection.rb, line 42
def management_console
  method_url = "/rest/api/uom/ManagementConsole"
  response = request(:get, method_url)
  doc = REXML::Document.new(response.body)
  entry = doc.root.elements["entry"]
  ManagementConsole.new(entry)
end
next_events() click to toggle source

Blocks until new events occur.

# File lib/ibm_power_hmc/connection.rb, line 201
def next_events
  method_url = "/rest/api/uom/Event"

  events = []
  loop do
    response = request(:get, method_url)
    next if response.code == 204

    doc = REXML::Document.new(response.body)
    doc.root.each_element("entry") do |entry|
      event = Event.new(entry)
      events += [event]
    end
    break
  end
  events
end
poweroff_lpar(lpar_uuid, params = {}) click to toggle source
# File lib/ibm_power_hmc/connection.rb, line 153
def poweroff_lpar(lpar_uuid, params = {})
  method_url = "/rest/api/uom/LogicalPartition/#{lpar_uuid}/do/PowerOff"

  job = HmcJob.new(self, method_url, "PowerOff", "LogicalPartition", params)
  job.start
  job.wait
  job.delete
end
poweroff_managed_system(sys_uuid, params = {}) click to toggle source
# File lib/ibm_power_hmc/connection.rb, line 191
def poweroff_managed_system(sys_uuid, params = {})
  method_url = "/rest/api/uom/ManagedSystem/#{sys_uuid}/do/PowerOff"

  job = HmcJob.new(self, method_url, "PowerOff", "ManagedSystem", params)
  job.start
  job.wait
  job.delete
end
poweroff_vios(vios_uuid, params = {}) click to toggle source

Damien: share with poweroff_lpar?

# File lib/ibm_power_hmc/connection.rb, line 173
def poweroff_vios(vios_uuid, params = {})
  method_url = "/rest/api/uom/VirtualIOServer/#{vios_uuid}/do/PowerOff"

  job = HmcJob.new(self, method_url, "PowerOff", "VirtualIOServer", params)
  job.start
  job.wait
  job.delete
end
poweron_lpar(lpar_uuid, params = {}) click to toggle source
# File lib/ibm_power_hmc/connection.rb, line 144
def poweron_lpar(lpar_uuid, params = {})
  method_url = "/rest/api/uom/LogicalPartition/#{lpar_uuid}/do/PowerOn"

  job = HmcJob.new(self, method_url, "PowerOn", "LogicalPartition", params)
  job.start
  job.wait
  job.delete
end
poweron_managed_system(sys_uuid, params = {}) click to toggle source
# File lib/ibm_power_hmc/connection.rb, line 182
def poweron_managed_system(sys_uuid, params = {})
  method_url = "/rest/api/uom/ManagedSystem/#{sys_uuid}/do/PowerOn"

  job = HmcJob.new(self, method_url, "PowerOn", "ManagedSystem", params)
  job.start
  job.wait
  job.delete
end
poweron_vios(vios_uuid, params = {}) click to toggle source

Damien: share with poweron_lpar?

# File lib/ibm_power_hmc/connection.rb, line 163
def poweron_vios(vios_uuid, params = {})
  method_url = "/rest/api/uom/VirtualIOServer/#{vios_uuid}/do/PowerOn"

  job = HmcJob.new(self, method_url, "PowerOn", "VirtualIOServer", params)
  job.start
  job.wait
  job.delete
end
request(method, url, headers = {}, payload = nil) click to toggle source
# File lib/ibm_power_hmc/connection.rb, line 219
def request(method, url, headers = {}, payload = nil)
  logon if @api_session_token.nil?

  headers = headers.merge({ "X-API-Session" => @api_session_token })
  # Damien: use URI module and prepare in initialize?
  response = RestClient::Request.execute(
    method: method,
    url: "https://" + @hostname + url,
    verify_ssl: @verify_ssl,
    payload: payload,
    headers: headers
  )
  if response.code == 403
    # Damien: if token expires, reauth?
    @api_session_token = nil
    logon
    # Damien: retry TBD
  end
  response
end
vioses(sys_uuid = nil) click to toggle source
# File lib/ibm_power_hmc/connection.rb, line 103
def vioses(sys_uuid = nil)
  if sys_uuid.nil?
    method_url = "/rest/api/uom/VirtualIOServer"
  else
    method_url = "/rest/api/uom/ManagedSystem/#{sys_uuid}/VirtualIOServer"
  end
  begin
    response = request(:get, method_url)
  rescue StandardError
    return []
  end
  doc = REXML::Document.new(response.body)
  vioses = []
  return vioses if doc.root.nil?

  doc.root.each_element("entry") do |entry|
    vios = VirtualIOServer.new(entry)
    vioses += [vios]
  end
  vioses
end