Giter Site home page Giter Site logo

python-hpilo's Introduction

iLO automation from python or shell

HP servers come with a powerful out of band management interface called Integrated Lights out, or iLO. It has an extensive web interface and commercially available tools for centrally managing iLO devices and their servers.

But if you want to built your own tooling, integrate iLO management to your existing procedures or simply want to manage iLOs using a command-line interface, you're stuck manually creating XML files and using a perl hack HP ships called locfg.pl.

Enter python-hpilo!

Using the same XML interface as HP's own management tools, here is a python library and command-line tool that make it a lot easier to do all the above. No manual XML writing, just call functions from either python or your shell(script).

Usage

Full usage documentation can be found on http://seveas.github.io/python-hpilo/ or in the docs/ directory in the python-hpilo tarball. Here are some examples to wet your appetite:

Getting the chassis IP of a blade server, from python:

>>> ilo = hpilo.Ilo('example-server.int.kaarsemaker.net')
>>> chassis = ilo.get_oa_info()
>>> print chassis['ipaddress']
10.42.128.101

Entering a license key and creating a user, from the shell:

$ hpilo_cli example-server.int.kaarsemaker.net activate_license key=$mykey
$ hpilo_cli example-server.int.kaarsemaker.net add_user user_login=dennis \
            password=hunter2 admin_priv=true

Compatibility

This module is written with compatibility as main priority. Currently supported are:

  • All RILOE II/iLO versions up to and including iLO 4
  • Python 2.6 or 2.7, and python 3.5 and newer
  • Any operating system Python runs on

iLOs can be managed both locally using hponcfg or remotely using the iLO's built-in webserver. In the latter case, the requirements above concern the machine you run this code on, not the managed server.

Author and license

This software is (c) 2011-2021 Dennis Kaarsemaker [email protected]

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

HP, Integrated Lights out and iLO are trademarks of HP, with whom the author of this software is not affiliated in any way other than using some of their hardware.

python-hpilo's People

Contributors

agy avatar arjenz avatar bb-ricardo avatar bit avatar briansidebothamkantar avatar champtar avatar cueball23 avatar dagwieers avatar dspeichert avatar eagllus avatar exaneserverteam avatar fabaff avatar firminator avatar flaviotorres avatar fragfutter avatar ge0rg avatar hansdg1 avatar mtorromeo avatar nicolasbock avatar pommi avatar rfpronk avatar seveas avatar sshmanko avatar sspans avatar timgates42 avatar timtasse avatar veksh avatar vincele avatar vinsonlee avatar vitopiserchia avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

python-hpilo's Issues

insert_virtual_media should default to device type CDROM

It would be great if the first argument insert_virtual_media would default to device type 'CDROM'. Everytime I have to look at the syntax which case the device types are written. At the moment these are:

'floppy' -> lowercase
'CDROM' -> uppercase

Also I do not see a future benefit of using floppy virtual images...
Perhaps a wish for the next major...

Make firmware.conf location configurable

For running on servers without direct internet acces, it would be nice if the URL of firmware.conf was overridable in .ilo.conf. This would allow placing it and the latest firmware versions on a local mirror in a dmz and keep the internal servers up to date.

Feature suggestion: initial ilo login barcode scanning support

Photos of the barcode labels containing the inital iLO login data can be easily parsed with the zbar library:

$ zbarimg 20150129_110526.jpg 
CODE-128:INITIALPASS
CODE-128:ILOCZABCDEXYZ
CODE-128:CZABCDEXYZ
scanned 3 barcode symbols from 1 images in 3.9 seconds

This can nicely be used from python with the python-zbar module. Maybe there is place in pyhton-hpilo for some kind of contrib "credential collection" script. I have some rough example code working that could become such a script if of any interest.

hpilo_ca Certificate Signing Request output is mangled, preventing signing

Hi,

I'm trying to use hpilo_ca to sign ilo2 fw2.07 certs. My CA is setup and working fine from the command line. When using hpilo_ca I get this error:

(3/5) Signing certificate
Using configuration from /path/to/openssl.cnf
Error reading certificate request in /path/to/CA/certs/usorla7lp201x.csr
140222387644232:error:0906D066:PEM routines:PEM_read_bio:bad end line:pem_lib.c:797:

When I examine the csr file retrieved, the formatting is off at the end, making it invalid.

-----BEGIN CERTIFICATE REQUEST-----
MIIB+zCCAWQCAQAwgZQxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIEwVUZXhhczEQMA4G
[ snip ]
2fpqDfsUAg+HtTRloC+/nco+jFtBG0PYvDirxR9PSLvcIy71SGIThu+32QH1A2Rn
RKnwhzFJ2ms4hnRrjzAHJAyr1fEPMpmq0j9VBXeNmA="="-----END CERTIFICATE REQUEST-----

Signing it manually with openssl fails with the same error as above. Fixing the formatting manually, I'm able to sign it with openssl.

Using HP's sample ILO scripts the CSR is returned from the ILO formatted properly, so I don't think the problem is coming from the ILO. I'm using python-2.6.6-29.el6.x86_64

Thanks for any help.

KeyError: 'label'

Hi
Seeing this error when running the script on a few of my servers. I sent the full output to your email as similar to the last issue you helped resolved. Let me know if there are format errors in the file.

File "hpilo_cli", line 312, in
main()
File "hpilo_cli", line 199, in main
results = [getattr(ilo, method)(**params)]
File "hpilo.py", line 897, in get_embedded_health
process=process)
File "hpilo.py", line 644, in _info_tag
return self._process_info_tag(message, returntags or [tagname], process)
File "hpilo.py", line 655, in _process_info_tag
return process(self._element_children_to_dict(message))
File "hpilo.py", line 891, in process
data[category] = dict([(x[tag], x) for x in data[category]])
KeyError: 'label'

Syntax Error in iLOv2

When performing get_ahs_status() against a iLOv2 machine i get the following exception:

ilo.get_ahs_status()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "hpilo.py", line 690, in get_ahs_status
    return self._info_tag('RIB_INFO', 'GET_AHS_STATUS')
  File "hpilo.py", line 543, in _info_tag
    header, message = self._request(root)
  File "hpilo.py", line 163, in _request
    message = self._parse_message(data)
  File "hpilo.py", line 436, in _parse_message
    raise IloError(message, status)
hpilo.IloError: Syntax error: Line #0: syntax error near "" in the line: ""

This was performed against the followig firmware:

>>> ilo.get_fw_version()
{'license_type': 'iLO 2 Advanced', 'firmware_version': '2.15', 'management_processor': 'iLO2', 'firmware_date': 'Jan 17 2013'}

Using hpilo -> commit 7aa2d46

ilo.update_rib_firmware results in ssl.SSLError: The write operation timed out

This happens on a Server: Proliant G6 DL 380, iLOv2 Firmware: 1.78 06/10/2009

 ilo.update_rib_firmware('latest')
Downloading ilo2 firmware version 2.22
2715085/2715085 (100%)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/appl/vwlinux/bin/python/lib/python2.6/site-packages/hpilo.py", line 1247, in update_rib_firmware
    return self._request(root, progress_)[1]
  File "/appl/vwlinux/bin/python/lib/python2.6/site-packages/hpilo.py", line 156, in _request
    header, data =  self._communicate(xml, self.protocol, progress=progress)
  File "/appl/vwlinux/bin/python/lib/python2.6/site-packages/hpilo.py", line 305, in _communicate
    written = sock.write(fw[sent:sent+pkglen])
  File "/usr/lib64/python2.6/ssl.py", line 148, in write
    return self._sslobj.write(data)
ssl.SSLError: The write operation timed out

No nic information in get_embedded_health

Hi,
First of all, thanks for writing the HPilo Python library. It's simply great!
I'm using the get_embedded_health function to get information on physical NICs. The library used is 2.8.
I'm querying an iLO3 server and get the following output:
'nic_infomation': [('nic', {}),
('nic', {}),
('nic', {}),
('nic', {}),
('nic', {}),
('nic', {}),
('nic', {}),
('nic', {}),
Do you know why it does not return any result?
Thanks!

get ilo license on g5 proliant

Getting/Setting iLO License on Proliant G5 with firmware version 2.15 01/17/2013 failed.

ilo.get_all_licenses()
Traceback (most recent call last):
File "", line 1, in
File "hpilo.py", line 1087, in get_all_licenses
return self._info_tag('RIB_INFO', 'GET_ALL_LICENSES', process=process)
File "hpilo.py", line 642, in _info_tag
header, message = self._request(root)
File "hpilo.py", line 216, in _request
message = self._parse_message(data)
File "hpilo.py", line 530, in _parse_message
raise IloError(message, status)
hpilo.IloError: Syntax error: Line #0: syntax error near "" in the line: "". You may have tried to use a feature this iLO version or firmware version does not support.

failure w/get_embedded_health method.

Encountering a python traceback when attempting to execute the get_embedded_health method against ilo4 w/firmware 1.13:

Debug output:

$ hpilo_cli -dd -l root -p mypassword myilo get_embedded_health
Connecting to myilo:443
Sending XML request, 132 bytes
POST /ribcl HTTP/1.1
Host: localhost
Content-Length: 52
Connection: Close


<?xml version="1.0"?>
<RIBCL VERSION="2.0"></RIBCL>
Received 552 bytes
HTTP/1.1 200 OK
Content-Type: text/xml
Date: Mon, 07 Jan 2013 16:08:56 GMT
Cache-Control: no-cache
Expires: Thu, 26 Oct 1995 00:00:00 GMT
Transfer-Encoding: chunked
Server: Allegro-Software-RomPager/4.62
Connection: close

<?xml version="1.0"?>
<RIBCL VERSION="2.22">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.22">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
<INFORM>Scripting utility should be updated to the latest version.</INFORM>
</RIBCL>

Connecting to myilo:443
Sending XML request, 278 bytes
POST /ribcl HTTP/1.1
Host: localhost
Content-Length: 197
Connection: Close


<?xml version="1.0"?>
<RIBCL
 VERSION="2.0"
>
<LOGIN
 PASSWORD="********"
 USER_LOGIN="root"
>
<SERVER_INFO
 MODE="read"
>
<GET_EMBEDDED_HEALTH
 />
</SERVER_INFO>
</LOGIN>
</RIBCL>

Received 43419 bytes
HTTP/1.1 200 OK
Content-Type: text/xml
Date: Mon, 07 Jan 2013 16:08:58 GMT
Cache-Control: no-cache
Expires: Thu, 26 Oct 1995 00:00:00 GMT
Transfer-Encoding: chunked
Server: Allegro-Software-RomPager/4.62
Connection: close

<?xml version="1.0"?>
<RIBCL VERSION="2.22">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.22">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
<INFORM>Scripting utility should be updated to the latest version.</INFORM>
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.22">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.22">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.22">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
<GET_EMBEDDED_HEALTH_DATA>
     <FANS>
      <FAN>
           <ZONE VALUE = "System"/>
           <LABEL VALUE = "Fan Block 1"/>
           <STATUS VALUE = "OK"/>
           <SPEED VALUE = "50" UNIT="Percentage"/>
      </FAN>
      <FAN>
           <ZONE VALUE = "System"/>
           <LABEL VALUE = "Fan Block 2"/>
           <STATUS VALUE = "OK"/>
           <SPEED VALUE = "50" UNIT="Percentage"/>
      </FAN>
      <FAN>
           <ZONE VALUE = "System"/>
           <LABEL VALUE = "Fan Block 3"/>
           <STATUS VALUE = "OK"/>
           <SPEED VALUE = "50" UNIT="Percentage"/>
      </FAN>
      <FAN>
           <ZONE VALUE = "System"/>
           <LABEL VALUE = "Fan Block 4"/>
           <STATUS VALUE = "OK"/>
           <SPEED VALUE = "50" UNIT="Percentage"/>
      </FAN>
      <FAN>
           <ZONE VALUE = "System"/>
           <LABEL VALUE = "Fan Block 5"/>
           <STATUS VALUE = "OK"/>
           <SPEED VALUE = "50" UNIT="Percentage"/>
      </FAN>
      <FAN>
           <ZONE VALUE = "System"/>
           <LABEL VALUE = "Fan Block 6"/>
           <STATUS VALUE = "OK"/>
           <SPEED VALUE = "50" UNIT="Percentage"/>
      </FAN>
      <FAN>
           <ZONE VALUE = "System"/>
           <LABEL VALUE = "Fan Block 7"/>
           <STATUS VALUE = "OK"/>
           <SPEED VALUE = "50" UNIT="Percentage"/>
      </FAN>
      <FAN>
           <ZONE VALUE = "System"/>
           <LABEL VALUE = "Fan Block 8"/>
           <STATUS VALUE = "OK"/>
           <SPEED VALUE = "50" UNIT="Percentage"/>
      </FAN>
     </FANS>
     <TEMPERATURE>
      <TEMP>
           <LABEL VALUE = "01-Inlet Ambient"/>
           <LOCATION VALUE = "Ambient"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "22" UNIT="Celsius"/>
           <CAUTION VALUE = "42" UNIT="Celsius"/>
           <CRITICAL VALUE = "46" UNIT="Celsius"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "02-CPU 1"/>
           <LOCATION VALUE = "CPU"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "40" UNIT="Celsius"/>
           <CAUTION VALUE = "70" UNIT="Celsius"/>
           <CRITICAL VALUE = "N/A"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "03-CPU 2"/>
           <LOCATION VALUE = "CPU"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "40" UNIT="Celsius"/>
           <CAUTION VALUE = "70" UNIT="Celsius"/>
           <CRITICAL VALUE = "N/A"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "04-P1 DIMM 1-6"/>
           <LOCATION VALUE = "Memory"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "29" UNIT="Celsius"/>
           <CAUTION VALUE = "87" UNIT="Celsius"/>
           <CRITICAL VALUE = "N/A"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "05-P1 DIMM 7-12"/>
           <LOCATION VALUE = "Memory"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "32" UNIT="Celsius"/>
           <CAUTION VALUE = "87" UNIT="Celsius"/>
           <CRITICAL VALUE = "N/A"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "06-P2 DIMM 1-6"/>
           <LOCATION VALUE = "Memory"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "27" UNIT="Celsius"/>
           <CAUTION VALUE = "87" UNIT="Celsius"/>
           <CRITICAL VALUE = "N/A"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "07-P2 DIMM 7-12"/>
           <LOCATION VALUE = "Memory"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "28" UNIT="Celsius"/>
           <CAUTION VALUE = "87" UNIT="Celsius"/>
           <CRITICAL VALUE = "N/A"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "08-P1 Mem Zone"/>
           <LOCATION VALUE = "Memory"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "30" UNIT="Celsius"/>
           <CAUTION VALUE = "70" UNIT="Celsius"/>
           <CRITICAL VALUE = "75" UNIT="Celsius"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "09-P1 Mem Zone"/>
           <LOCATION VALUE = "Memory"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "35" UNIT="Celsius"/>
           <CAUTION VALUE = "70" UNIT="Celsius"/>
           <CRITICAL VALUE = "75" UNIT="Celsius"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "10-P2 Mem Zone"/>
           <LOCATION VALUE = "Memory"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "31" UNIT="Celsius"/>
           <CAUTION VALUE = "70" UNIT="Celsius"/>
           <CRITICAL VALUE = "75" UNIT="Celsius"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "11-P2 Mem Zone"/>
           <LOCATION VALUE = "Memory"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "29" UNIT="Celsius"/>
           <CAUTION VALUE = "70" UNIT="Celsius"/>
           <CRITICAL VALUE = "75" UNIT="Celsius"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "12-HD Max"/>
           <LOCATION VALUE = "System"/>
           <STATUS VALUE = "Not Installed"/>
           <CURRENTREADING VALUE = "N/A"/>
           <CAUTION VALUE = "N/A"/>
           <CRITICAL VALUE = "N/A"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "13-Chipset 1"/>
           <LOCATION VALUE = "System"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "44" UNIT="Celsius"/>
           <CAUTION VALUE = "105" UNIT="Celsius"/>
           <CRITICAL VALUE = "N/A"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "14-Chipset1 Zone"/>
           <LOCATION VALUE = "System"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "33" UNIT="Celsius"/>
           <CAUTION VALUE = "70" UNIT="Celsius"/>
           <CRITICAL VALUE = "75" UNIT="Celsius"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "15-P/S 1 Inlet"/>
           <LOCATION VALUE = "Power Supply"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "0" UNIT="Celsius"/>
           <CAUTION VALUE = "N/A"/>
           <CRITICAL VALUE = "N/A"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "16-P/S 1 Zone"/>
           <LOCATION VALUE = "Power Supply"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "31" UNIT="Celsius"/>
           <CAUTION VALUE = "70" UNIT="Celsius"/>
           <CRITICAL VALUE = "75" UNIT="Celsius"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "17-P/S 2 Inlet"/>
           <LOCATION VALUE = "Power Supply"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "27" UNIT="Celsius"/>
           <CAUTION VALUE = "N/A"/>
           <CRITICAL VALUE = "N/A"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "18-P/S 2 Zone"/>
           <LOCATION VALUE = "Power Supply"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "31" UNIT="Celsius"/>
           <CAUTION VALUE = "65" UNIT="Celsius"/>
           <CRITICAL VALUE = "70" UNIT="Celsius"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "19-PCI #1"/>
           <LOCATION VALUE = "I/O Board"/>
           <STATUS VALUE = "Not Installed"/>
           <CURRENTREADING VALUE = "N/A"/>
           <CAUTION VALUE = "N/A"/>
           <CRITICAL VALUE = "N/A"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "20-PCI #2"/>
           <LOCATION VALUE = "I/O Board"/>
           <STATUS VALUE = "Not Installed"/>
           <CURRENTREADING VALUE = "N/A"/>
           <CAUTION VALUE = "N/A"/>
           <CRITICAL VALUE = "N/A"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "21-VR P1"/>
           <LOCATION VALUE = "Power Supply"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "34" UNIT="Celsius"/>
           <CAUTION VALUE = "115" UNIT="Celsius"/>
           <CRITICAL VALUE = "120" UNIT="Celsius"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "22-VR P2"/>
           <LOCATION VALUE = "Power Supply"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "33" UNIT="Celsius"/>
           <CAUTION VALUE = "115" UNIT="Celsius"/>
           <CRITICAL VALUE = "120" UNIT="Celsius"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "23-VR P1 Mem"/>
           <LOCATION VALUE = "Power Supply"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "27" UNIT="Celsius"/>
           <CAUTION VALUE = "115" UNIT="Celsius"/>
           <CRITICAL VALUE = "120" UNIT="Celsius"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "24-VR P1 Mem"/>
           <LOCATION VALUE = "Power Supply"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "27" UNIT="Celsius"/>
           <CAUTION VALUE = "115" UNIT="Celsius"/>
           <CRITICAL VALUE = "120" UNIT="Celsius"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "25-VR P2 Mem"/>
           <LOCATION VALUE = "Power Supply"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "29" UNIT="Celsius"/>
           <CAUTION VALUE = "115" UNIT="Celsius"/>
           <CRITICAL VALUE = "120" UNIT="Celsius"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "26-VR P2 Mem"/>
           <LOCATION VALUE = "Power Supply"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "27" UNIT="Celsius"/>
           <CAUTION VALUE = "115" UNIT="Celsius"/>
           <CRITICAL VALUE = "120" UNIT="Celsius"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "27-VR P1Mem Zone"/>
           <LOCATION VALUE = "Power Supply"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "26" UNIT="Celsius"/>
           <CAUTION VALUE = "70" UNIT="Celsius"/>
           <CRITICAL VALUE = "75" UNIT="Celsius"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "28-VR P1Mem Zone"/>
           <LOCATION VALUE = "Power Supply"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "26" UNIT="Celsius"/>
           <CAUTION VALUE = "70" UNIT="Celsius"/>
           <CRITICAL VALUE = "75" UNIT="Celsius"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "29-VR P2Mem Zone"/>
           <LOCATION VALUE = "Power Supply"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "28" UNIT="Celsius"/>
           <CAUTION VALUE = "70" UNIT="Celsius"/>
           <CRITICAL VALUE = "75" UNIT="Celsius"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "30-VR P2Mem Zone"/>
           <LOCATION VALUE = "Power Supply"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "26" UNIT="Celsius"/>
           <CAUTION VALUE = "70" UNIT="Celsius"/>
           <CRITICAL VALUE = "75" UNIT="Celsius"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "31-HD Controller"/>
           <LOCATION VALUE = "System"/>
           <STATUS VALUE = "Not Installed"/>
           <CURRENTREADING VALUE = "N/A"/>
           <CAUTION VALUE = "N/A"/>
           <CRITICAL VALUE = "N/A"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "32-HD Cntlr Zone"/>
           <LOCATION VALUE = "System"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "38" UNIT="Celsius"/>
           <CAUTION VALUE = "65" UNIT="Celsius"/>
           <CRITICAL VALUE = "70" UNIT="Celsius"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "33-PCI 1 Zone"/>
           <LOCATION VALUE = "System"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "33" UNIT="Celsius"/>
           <CAUTION VALUE = "70" UNIT="Celsius"/>
           <CRITICAL VALUE = "75" UNIT="Celsius"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "34-PCI 1 Zone"/>
           <LOCATION VALUE = "System"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "33" UNIT="Celsius"/>
           <CAUTION VALUE = "66" UNIT="Celsius"/>
           <CRITICAL VALUE = "71" UNIT="Celsius"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "35-LOM Card"/>
           <LOCATION VALUE = "I/O Board"/>
           <STATUS VALUE = "Not Installed"/>
           <CURRENTREADING VALUE = "N/A"/>
           <CAUTION VALUE = "N/A"/>
           <CRITICAL VALUE = "N/A"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "36-PCI 2 Zone"/>
           <LOCATION VALUE = "System"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "38" UNIT="Celsius"/>
           <CAUTION VALUE = "65" UNIT="Celsius"/>
           <CRITICAL VALUE = "70" UNIT="Celsius"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "37-System Board"/>
           <LOCATION VALUE = "System"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "37" UNIT="Celsius"/>
           <CAUTION VALUE = "70" UNIT="Celsius"/>
           <CRITICAL VALUE = "75" UNIT="Celsius"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "38-System Board"/>
           <LOCATION VALUE = "System"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "32" UNIT="Celsius"/>
           <CAUTION VALUE = "70" UNIT="Celsius"/>
           <CRITICAL VALUE = "75" UNIT="Celsius"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "39-Sys Exhaust"/>
           <LOCATION VALUE = "System"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "34" UNIT="Celsius"/>
           <CAUTION VALUE = "70" UNIT="Celsius"/>
           <CRITICAL VALUE = "75" UNIT="Celsius"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "40-Sys Exhaust"/>
           <LOCATION VALUE = "System"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "33" UNIT="Celsius"/>
           <CAUTION VALUE = "70" UNIT="Celsius"/>
           <CRITICAL VALUE = "75" UNIT="Celsius"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "41-Sys Exhaust"/>
           <LOCATION VALUE = "System"/>
           <STATUS VALUE = "OK"/>
           <CURRENTREADING VALUE = "32" UNIT="Celsius"/>
           <CAUTION VALUE = "64" UNIT="Celsius"/>
           <CRITICAL VALUE = "69" UNIT="Celsius"/>
      </TEMP>
      <TEMP>
           <LABEL VALUE = "42-SuperCAP Max"/>
           <LOCATION VALUE = "System"/>
           <STATUS VALUE = "Not Installed"/>
           <CURRENTREADING VALUE = "N/A"/>
           <CAUTION VALUE = "N/A"/>
           <CRITICAL VALUE = "N/A"/>
      </TEMP>
     </TEMPERATURE>
     <POWER_SUPPLIES>
      <SUPPLY>
           <LABEL VALUE = "Power Supply 1"/>
           <STATUS VALUE = "Failed"/>
      </SUPPLY>
      <SUPPLY>
           <LABEL VALUE = "Power Supply 2"/>
           <STATUS VALUE = "OK"/>
      </SUPPLY>
     </POWER_SUPPLIES>
     <VRM>
     </VRM>
     <PROCESSORS>
      <PROCESSOR>
           <LABEL VALUE = "Proc 1"/>
           <NAME VALUE = " Intel(R) Xeon(R) CPU E5-2640 0 @ 2.50GHz       "/>
           <STATUS VALUE = "OK"/>
           <SPEED VALUE = "2500 MHz"/>
           <EXECUTION_TECHNOLOGY VALUE = "6/6 cores; 12 threads"/>
           <MEMORY_TECHNOLOGY VALUE = "64-bit Capable"/>
           <INTERNAL_L1_CACHE VALUE = "192 KB"/>
           <INTERNAL_L2_CACHE VALUE = "1536 KB"/>
           <INTERNAL_L3_CACHE VALUE = "15360 KB"/>
      </PROCESSOR>
      <PROCESSOR>
           <LABEL VALUE = "Proc 2"/>
           <NAME VALUE = " Intel(R) Xeon(R) CPU E5-2640 0 @ 2.50GHz       "/>
           <STATUS VALUE = "OK"/>
           <SPEED VALUE = "2500 MHz"/>
           <EXECUTION_TECHNOLOGY VALUE = "6/6 cores; 12 threads"/>
           <MEMORY_TECHNOLOGY VALUE = "64-bit Capable"/>
           <INTERNAL_L1_CACHE VALUE = "192 KB"/>
           <INTERNAL_L2_CACHE VALUE = "1536 KB"/>
           <INTERNAL_L3_CACHE VALUE = "15360 KB"/>
      </PROCESSOR>
     </PROCESSORS>
     <MEMORY>
      <ADVANCED_MEMORY_PROTECTION>
           <AMP_MODE_STATUS VALUE = "Advanced ECC"/>
           <CONFIGURED_AMP_MODE VALUE = "Advanced ECC"/>
           <AVAILABLE_AMP_MODES VALUE = "On-line Spare, Advanced ECC"/>
      </ADVANCED_MEMORY_PROTECTION>
      <MEMORY_DETAILS_SUMMARY>
           <CPU_1>
            <NUMBER_OF_SOCKETS VALUE = "12"/>
            <TOTAL_MEMORY_SIZE VALUE = "64 GB"/>
            <OPERATING_FREQUENCY VALUE = "1333 MHz"/>
            <OPERATING_VOLTAGE VALUE = "1.35 v"/>
           </CPU_1>
           <CPU_2>
            <NUMBER_OF_SOCKETS VALUE = "12"/>
            <TOTAL_MEMORY_SIZE VALUE = "64 GB"/>
            <OPERATING_FREQUENCY VALUE = "1333 MHz"/>
            <OPERATING_VOLTAGE VALUE = "1.35 v"/>
           </CPU_2>
      </MEMORY_DETAILS_SUMMARY>
      <MEMORY_DETAILS>
           <CPU_1>
            <SOCKET VALUE = "1"/>
            <STATUS VALUE = "Good, In Use"/>
            <HP_SMART_MEMORY VALUE = "Yes"/>
            <TYPE VALUE = "DIMM DDR3"/>
            <SIZE VALUE = "8192 MB"/>
            <FREQUENCY VALUE = "1333 MHz"/>
            <MINIMUM_VOLTAGE VALUE = "1.35 v"/>
            <RANKS VALUE = "1"/>
            <TECHNOLOGY VALUE = "Synchronous"/>
           </CPU_1>
           <CPU_1>
            <SOCKET VALUE = "2"/>
            <STATUS VALUE = "Good, In Use"/>
            <HP_SMART_MEMORY VALUE = "Yes"/>
            <TYPE VALUE = "DIMM DDR3"/>
            <SIZE VALUE = "8192 MB"/>
            <FREQUENCY VALUE = "1333 MHz"/>
            <MINIMUM_VOLTAGE VALUE = "1.35 v"/>
            <RANKS VALUE = "1"/>
            <TECHNOLOGY VALUE = "Synchronous"/>
           </CPU_1>
           <CPU_1>
            <SOCKET VALUE = "3"/>
            <STATUS VALUE = "Not Present"/>
            <HP_SMART_MEMORY VALUE = "N/A"/>
            <TYPE VALUE = "N/A"/>
            <SIZE VALUE = "N/A"/>
            <FREQUENCY VALUE = "N/A"/>
            <MINIMUM_VOLTAGE VALUE = "N/A"/>
            <RANKS VALUE = "N/A"/>
            <TECHNOLOGY VALUE = "N/A"/>
           </CPU_1>
           <CPU_1>
            <SOCKET VALUE = "4"/>
            <STATUS VALUE = "Good, In Use"/>
            <HP_SMART_MEMORY VALUE = "Yes"/>
            <TYPE VALUE = "DIMM DDR3"/>
            <SIZE VALUE = "8192 MB"/>
            <FREQUENCY VALUE = "1333 MHz"/>
            <MINIMUM_VOLTAGE VALUE = "1.35 v"/>
            <RANKS VALUE = "1"/>
            <TECHNOLOGY VALUE = "Synchronous"/>
           </CPU_1>
           <CPU_1>
            <SOCKET VALUE = "5"/>
            <STATUS VALUE = "Good, In Use"/>
            <HP_SMART_MEMORY VALUE = "Yes"/>
            <TYPE VALUE = "DIMM DDR3"/>
            <SIZE VALUE = "8192 MB"/>
            <FREQUENCY VALUE = "1333 MHz"/>
            <MINIMUM_VOLTAGE VALUE = "1.35 v"/>
            <RANKS VALUE = "1"/>
            <TECHNOLOGY VALUE = "Synchronous"/>
           </CPU_1>
           <CPU_1>
            <SOCKET VALUE = "6"/>
            <STATUS VALUE = "Not Present"/>
            <HP_SMART_MEMORY VALUE = "N/A"/>
            <TYPE VALUE = "N/A"/>
            <SIZE VALUE = "N/A"/>
            <FREQUENCY VALUE = "N/A"/>
            <MINIMUM_VOLTAGE VALUE = "N/A"/>
            <RANKS VALUE = "N/A"/>
            <TECHNOLOGY VALUE = "N/A"/>
           </CPU_1>
           <CPU_1>
            <SOCKET VALUE = "7"/>
            <STATUS VALUE = "Not Present"/>
            <HP_SMART_MEMORY VALUE = "N/A"/>
            <TYPE VALUE = "N/A"/>
            <SIZE VALUE = "N/A"/>
            <FREQUENCY VALUE = "N/A"/>
            <MINIMUM_VOLTAGE VALUE = "N/A"/>
            <RANKS VALUE = "N/A"/>
            <TECHNOLOGY VALUE = "N/A"/>
           </CPU_1>
           <CPU_1>
            <SOCKET VALUE = "8"/>
            <STATUS VALUE = "Good, In Use"/>
            <HP_SMART_MEMORY VALUE = "Yes"/>
            <TYPE VALUE = "DIMM DDR3"/>
            <SIZE VALUE = "8192 MB"/>
            <FREQUENCY VALUE = "1333 MHz"/>
            <MINIMUM_VOLTAGE VALUE = "1.35 v"/>
            <RANKS VALUE = "1"/>
            <TECHNOLOGY VALUE = "Synchronous"/>
           </CPU_1>
           <CPU_1>
            <SOCKET VALUE = "9"/>
            <STATUS VALUE = "Good, In Use"/>
            <HP_SMART_MEMORY VALUE = "Yes"/>
            <TYPE VALUE = "DIMM DDR3"/>
            <SIZE VALUE = "8192 MB"/>
            <FREQUENCY VALUE = "1333 MHz"/>
            <MINIMUM_VOLTAGE VALUE = "1.35 v"/>
            <RANKS VALUE = "1"/>
            <TECHNOLOGY VALUE = "Synchronous"/>
           </CPU_1>
           <CPU_1>
            <SOCKET VALUE = "10"/>
            <STATUS VALUE = "Not Present"/>
            <HP_SMART_MEMORY VALUE = "N/A"/>
            <TYPE VALUE = "N/A"/>
            <SIZE VALUE = "N/A"/>
            <FREQUENCY VALUE = "N/A"/>
            <MINIMUM_VOLTAGE VALUE = "N/A"/>
            <RANKS VALUE = "N/A"/>
            <TECHNOLOGY VALUE = "N/A"/>
           </CPU_1>
           <CPU_1>
            <SOCKET VALUE = "11"/>
            <STATUS VALUE = "Good, In Use"/>
            <HP_SMART_MEMORY VALUE = "Yes"/>
            <TYPE VALUE = "DIMM DDR3"/>
            <SIZE VALUE = "8192 MB"/>
            <FREQUENCY VALUE = "1333 MHz"/>
            <MINIMUM_VOLTAGE VALUE = "1.35 v"/>
            <RANKS VALUE = "1"/>
            <TECHNOLOGY VALUE = "Synchronous"/>
           </CPU_1>
           <CPU_1>
            <SOCKET VALUE = "12"/>
            <STATUS VALUE = "Good, In Use"/>
            <HP_SMART_MEMORY VALUE = "Yes"/>
            <TYPE VALUE = "DIMM DDR3"/>
            <SIZE VALUE = "8192 MB"/>
            <FREQUENCY VALUE = "1333 MHz"/>
            <MINIMUM_VOLTAGE VALUE = "1.35 v"/>
            <RANKS VALUE = "1"/>
            <TECHNOLOGY VALUE = "Synchronous"/>
           </CPU_1>
           <CPU_2>
            <SOCKET VALUE = "1"/>
            <STATUS VALUE = "Good, In Use"/>
            <HP_SMART_MEMORY VALUE = "Yes"/>
            <TYPE VALUE = "DIMM DDR3"/>
            <SIZE VALUE = "8192 MB"/>
            <FREQUENCY VALUE = "1333 MHz"/>
            <MINIMUM_VOLTAGE VALUE = "1.35 v"/>
            <RANKS VALUE = "1"/>
            <TECHNOLOGY VALUE = "Synchronous"/>
           </CPU_2>
           <CPU_2>
            <SOCKET VALUE = "2"/>
            <STATUS VALUE = "Good, In Use"/>
            <HP_SMART_MEMORY VALUE = "Yes"/>
            <TYPE VALUE = "DIMM DDR3"/>
            <SIZE VALUE = "8192 MB"/>
            <FREQUENCY VALUE = "1333 MHz"/>
            <MINIMUM_VOLTAGE VALUE = "1.35 v"/>
            <RANKS VALUE = "1"/>
            <TECHNOLOGY VALUE = "Synchronous"/>
           </CPU_2>
           <CPU_2>
            <SOCKET VALUE = "3"/>
            <STATUS VALUE = "Not Present"/>
            <HP_SMART_MEMORY VALUE = "N/A"/>
            <TYPE VALUE = "N/A"/>
            <SIZE VALUE = "N/A"/>
            <FREQUENCY VALUE = "N/A"/>
            <MINIMUM_VOLTAGE VALUE = "N/A"/>
            <RANKS VALUE = "N/A"/>
            <TECHNOLOGY VALUE = "N/A"/>
           </CPU_2>
           <CPU_2>
            <SOCKET VALUE = "4"/>
            <STATUS VALUE = "Good, In Use"/>
            <HP_SMART_MEMORY VALUE = "Yes"/>
            <TYPE VALUE = "DIMM DDR3"/>
            <SIZE VALUE = "8192 MB"/>
            <FREQUENCY VALUE = "1333 MHz"/>
            <MINIMUM_VOLTAGE VALUE = "1.35 v"/>
            <RANKS VALUE = "1"/>
            <TECHNOLOGY VALUE = "Synchronous"/>
           </CPU_2>
           <CPU_2>
            <SOCKET VALUE = "5"/>
            <STATUS VALUE = "Good, In Use"/>
            <HP_SMART_MEMORY VALUE = "Yes"/>
            <TYPE VALUE = "DIMM DDR3"/>
            <SIZE VALUE = "8192 MB"/>
            <FREQUENCY VALUE = "1333 MHz"/>
            <MINIMUM_VOLTAGE VALUE = "1.35 v"/>
            <RANKS VALUE = "1"/>
            <TECHNOLOGY VALUE = "Synchronous"/>
           </CPU_2>
           <CPU_2>
            <SOCKET VALUE = "6"/>
            <STATUS VALUE = "Not Present"/>
            <HP_SMART_MEMORY VALUE = "N/A"/>
            <TYPE VALUE = "N/A"/>
            <SIZE VALUE = "N/A"/>
            <FREQUENCY VALUE = "N/A"/>
            <MINIMUM_VOLTAGE VALUE = "N/A"/>
            <RANKS VALUE = "N/A"/>
            <TECHNOLOGY VALUE = "N/A"/>
           </CPU_2>
           <CPU_2>
            <SOCKET VALUE = "7"/>
            <STATUS VALUE = "Not Present"/>
            <HP_SMART_MEMORY VALUE = "N/A"/>
            <TYPE VALUE = "N/A"/>
            <SIZE VALUE = "N/A"/>
            <FREQUENCY VALUE = "N/A"/>
            <MINIMUM_VOLTAGE VALUE = "N/A"/>
            <RANKS VALUE = "N/A"/>
            <TECHNOLOGY VALUE = "N/A"/>
           </CPU_2>
           <CPU_2>
            <SOCKET VALUE = "8"/>
            <STATUS VALUE = "Good, In Use"/>
            <HP_SMART_MEMORY VALUE = "Yes"/>
            <TYPE VALUE = "DIMM DDR3"/>
            <SIZE VALUE = "8192 MB"/>
            <FREQUENCY VALUE = "1333 MHz"/>
            <MINIMUM_VOLTAGE VALUE = "1.35 v"/>
            <RANKS VALUE = "1"/>
            <TECHNOLOGY VALUE = "Synchronous"/>
           </CPU_2>
           <CPU_2>
            <SOCKET VALUE = "9"/>
            <STATUS VALUE = "Good, In Use"/>
            <HP_SMART_MEMORY VALUE = "Yes"/>
            <TYPE VALUE = "DIMM DDR3"/>
            <SIZE VALUE = "8192 MB"/>
            <FREQUENCY VALUE = "1333 MHz"/>
            <MINIMUM_VOLTAGE VALUE = "1.35 v"/>
            <RANKS VALUE = "1"/>
            <TECHNOLOGY VALUE = "Synchronous"/>
           </CPU_2>
           <CPU_2>
            <SOCKET VALUE = "10"/>
            <STATUS VALUE = "Not Present"/>
            <HP_SMART_MEMORY VALUE = "N/A"/>
            <TYPE VALUE = "N/A"/>
            <SIZE VALUE = "N/A"/>
            <FREQUENCY VALUE = "N/A"/>
            <MINIMUM_VOLTAGE VALUE = "N/A"/>
            <RANKS VALUE = "N/A"/>
            <TECHNOLOGY VALUE = "N/A"/>
           </CPU_2>
           <CPU_2>
            <SOCKET VALUE = "11"/>
            <STATUS VALUE = "Good, In Use"/>
            <HP_SMART_MEMORY VALUE = "Yes"/>
            <TYPE VALUE = "DIMM DDR3"/>
            <SIZE VALUE = "8192 MB"/>
            <FREQUENCY VALUE = "1333 MHz"/>
            <MINIMUM_VOLTAGE VALUE = "1.35 v"/>
            <RANKS VALUE = "1"/>
            <TECHNOLOGY VALUE = "Synchronous"/>
           </CPU_2>
           <CPU_2>
            <SOCKET VALUE = "12"/>
            <STATUS VALUE = "Good, In Use"/>
            <HP_SMART_MEMORY VALUE = "Yes"/>
            <TYPE VALUE = "DIMM DDR3"/>
            <SIZE VALUE = "8192 MB"/>
            <FREQUENCY VALUE = "1333 MHz"/>
            <MINIMUM_VOLTAGE VALUE = "1.35 v"/>
            <RANKS VALUE = "1"/>
            <TECHNOLOGY VALUE = "Synchronous"/>
           </CPU_2>
      </MEMORY_DETAILS>
     </MEMORY>
     <NIC_INFORMATION>
      <iLO_4>
           <NETWORK_PORT VALUE = "iLO Dedicated Network Port"/>
           <PORT_DESCRIPTION VALUE = "iLO Dedicated Network Port"/>
           <MAC_ADDRESS VALUE = "ac:16:2d:c0:d3:06"/>
           <IP_ADDRESS VALUE = "10.175.192.77"/>
           <STATUS VALUE = "OK"/>
      </iLO_4>
     </NIC_INFORMATION>
     <STORAGE>
      <CONTROLLER>
           <LABEL VALUE = "Controller on System Board"/>
           <STATUS VALUE = "OK"/>
           <CONTROLLER_STATUS VALUE = "OK"/>
           <SERIAL_NUMBER VALUE = "5001438022C1FAA0"/>
           <MODEL VALUE = "HP Smart Array P420i Controller"/>
           <FW_VERSION VALUE = "3.22"/>
           <CACHE_MODULE_STATUS VALUE = "OK"/>
           <CACHE_MODULE_SERIAL_NUM VALUE = "PBKUC0ARH2O8VC"/>
           <CACHE_MODULE_MEMORY VALUE = "1048576 KB"/>
           <DRIVE_ENCLOSURE>
            <LABEL VALUE = "Port 1I Box 1"/>
            <STATUS VALUE = "OK"/>
            <DRIVE_BAY VALUE = "04"/>
           </DRIVE_ENCLOSURE>
           <DRIVE_ENCLOSURE>
            <LABEL VALUE = "Port 2I Box 1"/>
            <STATUS VALUE = "OK"/>
            <DRIVE_BAY VALUE = "04"/>
           </DRIVE_ENCLOSURE>
           <LOGICAL_DRIVE>
            <LABEL VALUE = "01"/>
            <STATUS VALUE = "OK"/>
            <CAPACITY VALUE = "99 GB"/>
            <FAULT_TOLERANCE VALUE = "RAID 5"/>
            <PHYSICAL_DRIVE>
             <LABEL VALUE = "Port 1I Box 1 Bay 1"/>
             <STATUS VALUE = "OK"/>
             <SERIAL_NUMBER VALUE = "9XF18ZB8"/>
             <MODEL VALUE = "MM0500GBKAK"/>
             <CAPACITY VALUE = "465 GB"/>
             <LOCATION VALUE = "Port 1I Box 1 Bay 1"/>
             <FW_VERSION VALUE = "HPGC"/>
            </PHYSICAL_DRIVE>
            <PHYSICAL_DRIVE>
             <LABEL VALUE = "Port 1I Box 1 Bay 2"/>
             <STATUS VALUE = "OK"/>
             <SERIAL_NUMBER VALUE = "9XF18ZEE"/>
             <MODEL VALUE = "MM0500GBKAK"/>
             <CAPACITY VALUE = "465 GB"/>
             <LOCATION VALUE = "Port 1I Box 1 Bay 2"/>
             <FW_VERSION VALUE = "HPGC"/>
            </PHYSICAL_DRIVE>
            <PHYSICAL_DRIVE>
             <LABEL VALUE = "Port 1I Box 1 Bay 3"/>
             <STATUS VALUE = "OK"/>
             <SERIAL_NUMBER VALUE = "9XF190JT"/>
             <MODEL VALUE = "MM0500GBKAK"/>
             <CAPACITY VALUE = "465 GB"/>
             <LOCATION VALUE = "Port 1I Box 1 Bay 3"/>
             <FW_VERSION VALUE = "HPGC"/>
            </PHYSICAL_DRIVE>
            <PHYSICAL_DRIVE>
             <LABEL VALUE = "Port 1I Box 1 Bay 4"/>
             <STATUS VALUE = "OK"/>
             <SERIAL_NUMBER VALUE = "9XF1902R"/>
             <MODEL VALUE = "MM0500GBKAK"/>
             <CAPACITY VALUE = "465 GB"/>
             <LOCATION VALUE = "Port 1I Box 1 Bay 4"/>
             <FW_VERSION VALUE = "HPGC"/>
            </PHYSICAL_DRIVE>
            <PHYSICAL_DRIVE>
             <LABEL VALUE = "Port 2I Box 1 Bay 5"/>
             <STATUS VALUE = "OK"/>
             <SERIAL_NUMBER VALUE = "9XF195HF"/>
             <MODEL VALUE = "MM0500GBKAK"/>
             <CAPACITY VALUE = "465 GB"/>
             <LOCATION VALUE = "Port 2I Box 1 Bay 5"/>
             <FW_VERSION VALUE = "HPGC"/>
            </PHYSICAL_DRIVE>
            <PHYSICAL_DRIVE>
             <LABEL VALUE = "Port 2I Box 1 Bay 6"/>
             <STATUS VALUE = "OK"/>
             <SERIAL_NUMBER VALUE = "9XF18Z9F"/>
             <MODEL VALUE = "MM0500GBKAK"/>
             <CAPACITY VALUE = "465 GB"/>
             <LOCATION VALUE = "Port 2I Box 1 Bay 6"/>
             <FW_VERSION VALUE = "HPGC"/>
            </PHYSICAL_DRIVE>
            <PHYSICAL_DRIVE>
             <LABEL VALUE = "Port 2I Box 1 Bay 7"/>
             <STATUS VALUE = "OK"/>
             <SERIAL_NUMBER VALUE = "9XF1902F"/>
             <MODEL VALUE = "MM0500GBKAK"/>
             <CAPACITY VALUE = "465 GB"/>
             <LOCATION VALUE = "Port 2I Box 1 Bay 7"/>
             <FW_VERSION VALUE = "HPGC"/>
            </PHYSICAL_DRIVE>
            <PHYSICAL_DRIVE>
             <LABEL VALUE = "Port 2I Box 1 Bay 8"/>
             <STATUS VALUE = "OK"/>
             <SERIAL_NUMBER VALUE = "9XF18W12"/>
             <MODEL VALUE = "MM0500GBKAK"/>
             <CAPACITY VALUE = "465 GB"/>
             <LOCATION VALUE = "Port 2I Box 1 Bay 8"/>
             <FW_VERSION VALUE = "HPGC"/>
            </PHYSICAL_DRIVE>
           </LOGICAL_DRIVE>
           <LOGICAL_DRIVE>
            <LABEL VALUE = "02"/>
            <STATUS VALUE = "OK"/>
            <CAPACITY VALUE = "3160 GB"/>
            <FAULT_TOLERANCE VALUE = "RAID 5"/>
            <PHYSICAL_DRIVE>
             <LABEL VALUE = "Port 1I Box 1 Bay 1"/>
             <STATUS VALUE = "OK"/>
             <SERIAL_NUMBER VALUE = "9XF18ZB8"/>
             <MODEL VALUE = "MM0500GBKAK"/>
             <CAPACITY VALUE = "465 GB"/>
             <LOCATION VALUE = "Port 1I Box 1 Bay 1"/>
             <FW_VERSION VALUE = "HPGC"/>
            </PHYSICAL_DRIVE>
            <PHYSICAL_DRIVE>
             <LABEL VALUE = "Port 1I Box 1 Bay 2"/>
             <STATUS VALUE = "OK"/>
             <SERIAL_NUMBER VALUE = "9XF18ZEE"/>
             <MODEL VALUE = "MM0500GBKAK"/>
             <CAPACITY VALUE = "465 GB"/>
             <LOCATION VALUE = "Port 1I Box 1 Bay 2"/>
             <FW_VERSION VALUE = "HPGC"/>
            </PHYSICAL_DRIVE>
            <PHYSICAL_DRIVE>
             <LABEL VALUE = "Port 1I Box 1 Bay 3"/>
             <STATUS VALUE = "OK"/>
             <SERIAL_NUMBER VALUE = "9XF190JT"/>
             <MODEL VALUE = "MM0500GBKAK"/>
             <CAPACITY VALUE = "465 GB"/>
             <LOCATION VALUE = "Port 1I Box 1 Bay 3"/>
             <FW_VERSION VALUE = "HPGC"/>
            </PHYSICAL_DRIVE>
            <PHYSICAL_DRIVE>
             <LABEL VALUE = "Port 1I Box 1 Bay 4"/>
             <STATUS VALUE = "OK"/>
             <SERIAL_NUMBER VALUE = "9XF1902R"/>
             <MODEL VALUE = "MM0500GBKAK"/>
             <CAPACITY VALUE = "465 GB"/>
             <LOCATION VALUE = "Port 1I Box 1 Bay 4"/>
             <FW_VERSION VALUE = "HPGC"/>
            </PHYSICAL_DRIVE>
            <PHYSICAL_DRIVE>
             <LABEL VALUE = "Port 2I Box 1 Bay 5"/>
             <STATUS VALUE = "OK"/>
             <SERIAL_NUMBER VALUE = "9XF195HF"/>
             <MODEL VALUE = "MM0500GBKAK"/>
             <CAPACITY VALUE = "465 GB"/>
             <LOCATION VALUE = "Port 2I Box 1 Bay 5"/>
             <FW_VERSION VALUE = "HPGC"/>
            </PHYSICAL_DRIVE>
            <PHYSICAL_DRIVE>
             <LABEL VALUE = "Port 2I Box 1 Bay 6"/>
             <STATUS VALUE = "OK"/>
             <SERIAL_NUMBER VALUE = "9XF18Z9F"/>
             <MODEL VALUE = "MM0500GBKAK"/>
             <CAPACITY VALUE = "465 GB"/>
             <LOCATION VALUE = "Port 2I Box 1 Bay 6"/>
             <FW_VERSION VALUE = "HPGC"/>
            </PHYSICAL_DRIVE>
            <PHYSICAL_DRIVE>
             <LABEL VALUE = "Port 2I Box 1 Bay 7"/>
             <STATUS VALUE = "OK"/>
             <SERIAL_NUMBER VALUE = "9XF1902F"/>
             <MODEL VALUE = "MM0500GBKAK"/>
             <CAPACITY VALUE = "465 GB"/>
             <LOCATION VALUE = "Port 2I Box 1 Bay 7"/>
             <FW_VERSION VALUE = "HPGC"/>
            </PHYSICAL_DRIVE>
            <PHYSICAL_DRIVE>
             <LABEL VALUE = "Port 2I Box 1 Bay 8"/>
             <STATUS VALUE = "OK"/>
             <SERIAL_NUMBER VALUE = "9XF18W12"/>
             <MODEL VALUE = "MM0500GBKAK"/>
             <CAPACITY VALUE = "465 GB"/>
             <LOCATION VALUE = "Port 2I Box 1 Bay 8"/>
             <FW_VERSION VALUE = "HPGC"/>
            </PHYSICAL_DRIVE>
           </LOGICAL_DRIVE>
      </CONTROLLER>
     </STORAGE>
     <FIRMWARE_INFORMATION>
      <INDEX_1>
           <FIRMWARE_NAME VALUE = "HP ProLiant System ROM"/>
           <FIRMWARE_VERSION VALUE = "08/20/2012"/>
      </INDEX_1>
      <INDEX_2>
           <FIRMWARE_NAME VALUE = "HP ProLiant System ROM - Backup"/>
           <FIRMWARE_VERSION VALUE = "07/15/2012"/>
      </INDEX_2>
      <INDEX_3>
           <FIRMWARE_NAME VALUE = "HP ProLiant System ROM Bootblock"/>
           <FIRMWARE_VERSION VALUE = "08/30/2011"/>
      </INDEX_3>
      <INDEX_4>
           <FIRMWARE_NAME VALUE = "iLO"/>
           <FIRMWARE_VERSION VALUE = "1.13 Nov 08 2012"/>
      </INDEX_4>
      <INDEX_5>
           <FIRMWARE_NAME VALUE = "Power Management Controller Firmware"/>
           <FIRMWARE_VERSION VALUE = "3.0"/>
      </INDEX_5>
      <INDEX_6>
           <FIRMWARE_NAME VALUE = "Power Management Controller Firmware Bootloader"/>
           <FIRMWARE_VERSION VALUE = "2.7"/>
      </INDEX_6>
      <INDEX_7>
           <FIRMWARE_NAME VALUE = "System Programmable Logic Device"/>
           <FIRMWARE_VERSION VALUE = "Version 0x28"/>
      </INDEX_7>
      <INDEX_8>
           <FIRMWARE_NAME VALUE = "SAS Programmable Logic Device"/>
           <FIRMWARE_VERSION VALUE = "Version 0x0C"/>
      </INDEX_8>
      <INDEX_9>
           <FIRMWARE_NAME VALUE = "Server Platform Services (SPS) Firmware"/>
           <FIRMWARE_VERSION VALUE = "2.1.5.2B.4"/>
      </INDEX_9>
      <INDEX_10>
           <FIRMWARE_NAME VALUE = "HP Smart Array P420i Controller"/>
           <FIRMWARE_VERSION VALUE = "3.22"/>
      </INDEX_10>
     </FIRMWARE_INFORMATION>
     <HEALTH_AT_A_GLANCE>
      <BIOS_HARDWARE STATUS= "OK"/>
      <FANS STATUS= "OK"/>
      <FANS REDUNDANCY= "Redundant"/>
      <TEMPERATURE STATUS= "OK"/>
      <POWER_SUPPLIES STATUS= "Failed"/>
      <POWER_SUPPLIES REDUNDANCY= "Not Redundant"/>
      <PROCESSOR STATUS= "OK"/>
      <MEMORY STATUS= "OK"/>
      <NETWORK STATUS= "OK"/>
      <STORAGE STATUS= "OK"/>
     </HEALTH_AT_A_GLANCE>
</GET_EMBEDDED_HEALTH_DATA>
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.22">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.22">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.22">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
</RIBCL>

Traceback (most recent call last):
  File "/usr/local/bin/hpilo_cli", line 245, in <module>
    main()
  File "/usr/local/bin/hpilo_cli", line 165, in main
    results = [getattr(ilo, method)(**params)]
  File "/usr/local/lib/python2.7/dist-packages/hpilo.py", line 712, in get_embedded_health
    process=process)
  File "/usr/local/lib/python2.7/dist-packages/hpilo.py", line 508, in _info_tag
    return self._process_info_tag(message, returntags or [tagname], process)
  File "/usr/local/lib/python2.7/dist-packages/hpilo.py", line 519, in _process_info_tag
    return process(self._element_children_to_dict(message))
  File "/usr/local/lib/python2.7/dist-packages/hpilo.py", line 430, in _element_children_to_dict
    val = self._element_to_list(elt)
  File "/usr/local/lib/python2.7/dist-packages/hpilo.py", line 472, in _element_to_list
    return [self._element_children_to_dict(x) for x in element]
  File "/usr/local/lib/python2.7/dist-packages/hpilo.py", line 443, in _element_children_to_dict
    retval[key].update(val)
AttributeError: 'list' object has no attribute 'update'

hpilo.IloCommunicationError: Cannot establish ssl session

I am trying to connect to an ancient HP server (G3), and this is the error I get:

raise IloCommunicationError("Cannot establish ssl session with %s:%d: %s" % (self.hostname, self.port, e.message or str(e)))
hpilo.IloCommunicationError: Cannot establish ssl session with IP_ADDRESS_OF_ILO_INTERFACE:443: [Errno 1] _ssl.c:490: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number

mod_snmp_im_settings: trapcommunity syntax unclear

ilo.mod_snmp_im_settings(snmp_address_1_trapcommunity='public')

results in

Traceback (most recent call last):
  File "./ilosetup.py", line 137, in <module>
    serverfqdn="", ilo_advanced_key=args.ilokey, deleteuser="")
  File "./ilosetup.py", line 100, in setup_server
    snmp_address_1_trapcommunity='public',
  File "/usr/lib/python2.7/dist-packages/hpilo.py", line 1402, in mod_snmp_im_settings
    for key_ in val.keys():
AttributeError: 'str' object has no attribute 'keys'

Looking at hpilo.py, there seems to be some kind of special handling for these fields, but the expected syntax is unclear and get_snmp_im_settings gives only a plain string for this field if set directly in the ilo.

TypeError: zip argument #1 must support iteration

I tried some code as follows against an iLO3 interface, and while it seemed to execute, it threw this error inside hpilo.py (in code below I leave out the specific settings of the arguments):

$ python test.py
/home/sparksa/python-hpilo-2.1/hpilo.py:424: IloWarning: Server being reset.
warnings.warn(child.get('MESSAGE'), IloWarning)
Traceback (most recent call last):
File "test.py", line 18, in
resp = ilo.call_delayed()
File "/home/sparksa/python-hpilo-2.1/hpilo.py", line 608, in call_delayed
for message, processor in zip(message, self._processors):
TypeError: zip argument #1 must support iteration

ilo = hpilo.Ilo(hostname, login=username, password=password,
timeout=5, protocol=hpilo.ILO_HTTP, delayed=True)

ilo.activate_license(license_key)
ilo.insert_virtual_media(device='cdrom', image_url=VM_URL)
ilo.set_vm_status(device='cdrom', boot_option='boot_once')
ilo.reset_server()

resp = ilo.call_delayed()
for r in resp:
print r

sample output from a few --untested methods.

Submitting sample output from against my test ilo. This may or may not be of any value.

The (untested) methods get_all_cables_status, get_topology, get_vf_status, and get_vpb_capable_status all yield results pertaining to a syntax error at line 11.

$ hpilo_cli -dd -l root -p mypassword myilo get_all_cables_status --untested
Connecting to myilo:443
Sending XML request, 132 bytes
POST /ribcl HTTP/1.1
Host: localhost
Content-Length: 52
Connection: Close


<?xml version="1.0"?>
<RIBCL VERSION="2.0"></RIBCL>
Received 552 bytes
HTTP/1.1 200 OK
Content-Type: text/xml
Date: Mon, 07 Jan 2013 16:37:48 GMT
Cache-Control: no-cache
Expires: Thu, 26 Oct 1995 00:00:00 GMT
Transfer-Encoding: chunked
Server: Allegro-Software-RomPager/4.62
Connection: close

<?xml version="1.0"?>
<RIBCL VERSION="2.22">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.22">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
<INFORM>Scripting utility should be updated to the latest version.</INFORM>
</RIBCL>

Connecting to myilo:443
Sending XML request, 280 bytes
POST /ribcl HTTP/1.1
Host: localhost
Content-Length: 199
Connection: Close


<?xml version="1.0"?>
<RIBCL
 VERSION="2.0"
>
<LOGIN
 PASSWORD="********"
 USER_LOGIN="root"
>
<SERVER_INFO
 MODE="READ"
>
<GET_ALL_CABLES_STATUS
 />
</SERVER_INFO>
</LOGIN>
</RIBCL>

Received 957 bytes
HTTP/1.1 200 OK
Content-Type: text/xml
Date: Mon, 07 Jan 2013 16:37:50 GMT
Cache-Control: no-cache
Expires: Thu, 26 Oct 1995 00:00:00 GMT
Transfer-Encoding: chunked
Server: Allegro-Software-RomPager/4.62
Connection: close

<?xml version="1.0"?>
<RIBCL VERSION="2.22">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.22">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
<INFORM>Scripting utility should be updated to the latest version.</INFORM>
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.22">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.22">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.22">
<RESPONSE
    STATUS="0x0001"
    MESSAGE='Error: Line #11: syntax error near "GET_ALL_CABLES_STATUS".'
    />
</RIBCL>

Traceback (most recent call last):
  File "/usr/local/bin/hpilo_cli", line 245, in <module>
    main()
  File "/usr/local/bin/hpilo_cli", line 165, in main
    results = [getattr(ilo, method)(**params)]
  File "/usr/local/lib/python2.7/dist-packages/hpilo.py", line 1140, in get_all_cables_status
    return self._raw(('SERVER_INFO', {'MODE': 'READ'}), ('GET_ALL_CABLES_STATUS', {}))
  File "/usr/local/lib/python2.7/dist-packages/hpilo.py", line 494, in _raw
    header, message = self._request(root)
  File "/usr/local/lib/python2.7/dist-packages/hpilo.py", line 138, in _request
    message = self._parse_message(data)
  File "/usr/local/lib/python2.7/dist-packages/hpilo.py", line 405, in _parse_message
    raise IloError(message, status)
hpilo.IloError: Error: Line #11: syntax error near "GET_ALL_CABLES_STATUS".

hpilo.IloLoginFailed with & in password

Hi,

When I try to connect to an ilo with a password containg a &, I'm facing an hpilo.IloLoginFailed error.
To be sure that it's not a bug on iLO side, I've tried with locfg.pl and it's working fine.

Thanks.

SNMP user profiles

mod_snmp_im_settings can be used to set user profiles. hpilo.py does not yet support this.

change to IMPORT_SSH_KEY RIBCL method in, iLO4 v.1.50

It appears that the IMPORT_SSH_KEY RIBCL method in the latest iLO4 firmware (1.50) has changed slightly. Format seems to be:

-----BEGIN SSH KEY-----
ssh-dss  
-----END SSH KEY-----

In particular, when there's a new-line between the key and user (as is the case with python-hpilo), the following error is emitted:


If that new-line is replaced with a space, the IMPORT_SSH_KEY method works:


I think L1130 in hpilo.py needs to be modified to account for this.

It's also worth mentioning that the IMPORT_SSH_KEY method was broken in iLO4 v.1.40. This was mentioned in the Fixes section for the 1.50 firmware release.

BTW: Big fan of this module.

I am getting sslerror

Traceback (most recent call last):
File "/tmp/check.py", line 36, in
ilo.ison()
File "/tmp/oo.py", line 31, in ison
print self.ilo.get_host_power_status()
File "/usr/local/lib/python2.7/site-packages/hpilo.py", line 1062, in get_host_power_status
process=lambda data: data['host_power'])
File "/usr/local/lib/python2.7/site-packages/hpilo.py", line 642, in _info_tag
header, message = self._request(root)
File "/usr/local/lib/python2.7/site-packages/hpilo.py", line 201, in _request
self._detect_protocol()
File "/usr/local/lib/python2.7/site-packages/hpilo.py", line 241, in _detect_protocol
header, data = self._communicate(b(''), ILO_HTTP)
File "/usr/local/lib/python2.7/site-packages/hpilo.py", line 366, in _communicate
sock = self._get_socket()
File "/usr/local/lib/python2.7/site-packages/hpilo.py", line 356, in _get_socket
except socket.sslerror:
AttributeError: 'module' object has no attribute 'sslerror'

-bash-4.1$ python --version
Python 2.7.9

Wishlist: Add support for HP Onboard Administrators

Being able to access the HP Onboard Administrator to at least read the settings from HP Bladecenters could come handy in many situations. I'm not aware of any official documentation regarding the HTTP Interface but they support at least a /xmldata?-URL, for example http://hpoba1.mydomain/xmldata?item=all. If I understand http://h30499.www3.hp.com/t5/HP-BladeSystem-Management/Onboard-Administrator-OA-XML-documentation/td-p/2323763#.VPmkaHVUXmE correctly, this interface is read-only.

update_lang_pack support

ilo4 supports language packs that can be installed/updated using RIBCL. Investigate and implement.

failure w/get_all_users method.

Attempting to use the get_all_users method against an ilo 4 w/firmware 1.13 and encountering a python traceback.

Debug output:

$ hpilo_cli -dd -l root -p mypassword myilo get_all_users
Connecting to myilo:443
Sending XML request, 132 bytes
POST /ribcl HTTP/1.1
Host: localhost
Content-Length: 52
Connection: Close


<?xml version="1.0"?>
<RIBCL VERSION="2.0"></RIBCL>
Received 552 bytes
HTTP/1.1 200 OK
Content-Type: text/xml
Date: Fri, 04 Jan 2013 18:19:31 GMT
Cache-Control: no-cache
Expires: Thu, 26 Oct 1995 00:00:00 GMT
Transfer-Encoding: chunked
Server: Allegro-Software-RomPager/4.62
Connection: close

<?xml version="1.0"?>
<RIBCL VERSION="2.22">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.22">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
<INFORM>Scripting utility should be updated to the latest version.</INFORM>
</RIBCL>

Connecting to sysarch1-oob:443
Sending XML request, 268 bytes
POST /ribcl HTTP/1.1
Host: localhost
Content-Length: 187
Connection: Close


<?xml version="1.0"?>
<RIBCL
 VERSION="2.0"
>
<LOGIN
 PASSWORD="********"
 USER_LOGIN="root"
>
<USER_INFO
 MODE="read"
>
<GET_ALL_USERS
 />
</USER_INFO>
</LOGIN>
</RIBCL>

Received 1245 bytes
HTTP/1.1 200 OK
Content-Type: text/xml
Date: Fri, 04 Jan 2013 18:19:33 GMT
Cache-Control: no-cache
Expires: Thu, 26 Oct 1995 00:00:00 GMT
Transfer-Encoding: chunked
Server: Allegro-Software-RomPager/4.62
Connection: close

<?xml version="1.0"?>
<RIBCL VERSION="2.22">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.22">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
<INFORM>Scripting utility should be updated to the latest version.</INFORM>
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.22">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.22">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.22">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
<GET_ALL_USERS>
    <USER_LOGIN VALUE="Administrator"/>
    <USER_LOGIN VALUE="root"/>
</GET_ALL_USERS>
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.22">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.22">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
</RIBCL>

Traceback (most recent call last):
  File "/usr/local/bin/hpilo_cli", line 245, in <module>
    main()
  File "/usr/local/bin/hpilo_cli", line 165, in main
    results = [getattr(ilo, method)(**params)]
  File "/usr/local/lib/python2.7/dist-packages/hpilo.py", line 671, in get_all_users
    process=lambda data: [x for x in data if x])
  File "/usr/local/lib/python2.7/dist-packages/hpilo.py", line 528, in _info_tag2
    return self._process_info_tag2(message, returntag or tagname, process)
  File "/usr/local/lib/python2.7/dist-packages/hpilo.py", line 533, in _process_info_tag2
    if key:
NameError: global name 'key' is not defined

File "<string>", line 85, in XML: SyntaxError: syntax error: line 1, column 49

Connecting (accidentally) to the enclosure instead of the blade, I got the output below. Whereas I was expecting some exception during the connection, hpilo seems to fail at some later stage during ilo.get_host_data().

The authentication step should have failed as the login/password we use for the blades do not work for the enclosure.

We are using hpilo 1.4

Here is the output:

  File "/root/.ansible/tmp/ansible-1354270344.48-220488112890304/hpilo_facts", line 799, in <module>
    main()
  File "/root/.ansible/tmp/ansible-1354270344.48-220488112890304/hpilo_facts", line 110, in main
    data = ilo.get_host_data()
  File "/usr/lib/python2.6/site-packages/hpilo.py", line 639, in get_host_data
    header, message = self._request(root)
  File "/usr/lib/python2.6/site-packages/hpilo.py", line 126, in _request
    message = self._parse_message(data)
  File "/usr/lib/python2.6/site-packages/hpilo.py", line 359, in _parse_message
    message = etree.fromstring(data)
  File "<string>", line 85, in XML
SyntaxError: syntax error: line 1, column 49

The code only does:

    ilo = hpilo.Ilo(host, login=login, password=password, protocol=protocol)
    data = ilo.get_host_data()

and is available from: https://github.com/ansible-provisioning/ansible-provisioning/blob/master/library/hpilo_facts

update_rib_firmware fails from hpilo_cli

When using hpilo_cli and performing a ilo firmware upgrade I get this error message:

$ hpilo_cli esxhost1 update_rib_firmware "latest"

Ilo.update_rib_firmware filename=FILENAME [progress=None]:
Upload new RIB firmware, use "latest" as filename to automatically
download and use the latest firmware

Same with existing file:

$  hpilo_cli esxhost1 update_rib_firmware g8_latest.bin

Ilo.update_rib_firmware filename=FILENAME [progress=None]:
Upload new RIB firmware, use "latest" as filename to automatically
download and use the latest firmware

Bug with --json argument w/hpilo_cli

Encountering python traceback when utilizing the --json command line option for hpilo_cli.

Sample without --json:

$ hpilo_cli -l root -p mypassword myilo get_all_users
>>> pprint(my_ilo.get_all_users())
['Administrator', 'root']

With --json:

$ hpilo_cli -l root -p mypassword myilo get_all_users --json
Traceback (most recent call last):
  File "/usr/local/bin/hpilo_cli", line 245, in <module>
    main()
  File "/usr/local/bin/hpilo_cli", line 171, in main
    json.dump(result, sys.stdout)
UnboundLocalError: local variable 'result' referenced before assignment

Actions using hpilo quite slow

I don't know if there's anything that I can debug or change to improve this, but any action using python-hpilo is quite slow. It might be due to HTTPS (and the self-signed certificate) or maybe the iLO interface is in itself slow to respond, I don't know.

Is there something I can do or test to see if we can speed up python-hpilo ? What we typically do is get facts from iLO (like interfaces, mac-addresses, hardware) and order a reboot with a specific virtual media over HTTP.

The modules that implement this are available from:

Local mirror support for firmware download

Hi,

a option for .ilo.conf would be great that allows to specify a custom firmware download location mirror prefix. This would mean that one could execute on the local mirror (with access to the internet):

$ cat /etc/cron.daily/update-ilo-firmware 
#!/bin/sh
cd /srv/mirror/ilo-firmware
/usr/bin/hpilo_cli download_rib_firmware all | grep -v "was already downloaded"

And on the internal server that has no internet access:

$ cat ~/.ilo.conf
[firmware]
mirror-prefix = http://my-local-mirror.internal/hp-firmware/

and then

$ hpilo_cli update_rib_firmware version=1.82
# downloads and installs firmware from http://my-local-mirror.internal/hp-firmware/ilo3_182.bin

missing output from get_host_data

Using ./locfg and get_host_data example:

<RIBCL version="2.21">
<LOGIN USER_LOGIN="adminname" PASSWORD="password">
<SERVER_INFO MODE="READ" >
<GET_HOST_DATA />
</SERVER_INFO>
</LOGIN>
</RIBCL>

this will return following data wrapped by the SMBIOS_RECORD node:

<GET_HOST_DATA>
 <SMBIOS_RECORD TYPE="0" B64_DATA="ABgAAAECAPADf4DayX0AAAAAAwf//wEySFAAUDY3ADA1LzA1LzIwMTEAAA==">
  <FIELD NAME="Family" VALUE="P67"/>
  <FIELD NAME="Date" VALUE="05/05/2011"/>
 </SMBIOS_RECORD>

The output with hp_cli results the inner data of SMBIOS_RECORD. The node itself is missing:

hpilo_cli 10.231.12.12 get_host_data -l user -p password

>>> pprint(my_ilo.get_host_data())
[{'Date': '05/05/2011',
  'Family': 'P67',
  'b64_data': 'ABgAAAECAPADf4DayX0AAAAAAwf//wEUSFAAUDY3ADA1LzA1LzIwMTEAAA==',
  'type': 0},
 {'Product Name': 'ProLiant DL380 G7',
  'Serial Number': 'CZ213300D2      ',
  'UUID': '583914CZ213300D2',
  'b64_data': 'ARsAAQQFAAE1ODM5MTRDWjIxMzMwMEQyBgIDQ1oyMTMzMDBEMiAgICAgIAA1ODM5MTQtQjIxICAgICAgAFByb0xpYW50AEhQAFByb0xpYW50IERMMzgwIEc3ACAgICAgICAgICAgICAgICAAAA==',
  'cUUID': '39333835-3431-5A43-3231-333330304432',
  'type': 1},

AttributeError: 'list' object has no attribute 'find'

I'm getting an error consistently in hpilo.py at line 629 in _process_info_tag.
I'm hoping you can give me some ideas on how to debug this.

Here's what I'm running it on:
ProLiant SL230s Gen8
iLO4
firmware version: 1.13 Nov 08 2012

And here's the traceback...

kb $ hpilo_cli -dd 172.17.11.81  get_fw_version
Connecting to 172.17.11.81 port 443
Connecting to 172.17.11.81 port 443
Sending XML request, 132 bytes
POST /ribcl HTTP/1.1
Host: localhost
Content-Length: 52
Connection: Close

<?xml version="1.0"?>
<RIBCL VERSION="2.0"></RIBCL>
Received 424 bytes
HTTP/1.1 200 OK
Content-Type: text/xml
Transfer-Encoding: chunked
Cache-Control: no-cache
Connection: close
Date: Thu, 16 Jan 2014 14:59:26 GMT
Server: HP-iLO-Server/1.30

<?xml version="1.0"?>
<RIBCL VERSION="2.23">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.23">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
</RIBCL>

Connecting to 172.17.11.81 port 443
Connecting to 172.17.11.81 port 443
Sending XML request, 270 bytes
POST /ribcl HTTP/1.1
Host: localhost
Content-Length: 189
Connection: Close


<?xml version="1.0"?>
<RIBCL
 VERSION="2.0"
>
<LOGIN
 PASSWORD="********"
 USER_LOGIN="stats"
>
<RIB_INFO
 MODE="read"
>
<GET_FW_VERSION
 />
</RIB_INFO>
</LOGIN>
</RIBCL>

Received 1171 bytes
HTTP/1.1 200 OK
Content-Type: text/xml
Transfer-Encoding: chunked
Cache-Control: no-cache
Connection: close
Date: Thu, 16 Jan 2014 14:59:27 GMT
Server: HP-iLO-Server/1.30

<?xml version="1.0"?>
<RIBCL VERSION="2.23">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.23">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.23">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.23">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.23">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
<GET_FW_VERSION
   FIRMWARE_VERSION = "1.30"
   FIRMWARE_DATE = "Jul 18 2013"
   MANAGEMENT_PROCESSOR = "iLO4"
   LICENSE_TYPE = "iLO 4 Standard"
    />
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.23">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.23">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
</RIBCL>

Traceback (most recent call last):
  File "/home/kbendl/pyAPI/venv-hpilo/bin/hpilo_cli", line 267, in <module>
    main()
  File "/home/kbendl/pyAPI/venv-hpilo/bin/hpilo_cli", line 183, in main
    results = [getattr(ilo, method)(**params)]
  File "/home/kbendl/pyAPI/venv-hpilo/lib/python2.7/site-packages/hpilo.py", line 944, in get_fw_version
    return self._info_tag('RIB_INFO', 'GET_FW_VERSION')
  File "/home/kbendl/pyAPI/venv-hpilo/lib/python2.7/site-packages/hpilo.py", line 622, in _info_tag
    return self._process_info_tag(message, returntags or [tagname], process)
  File "/home/kbendl/pyAPI/venv-hpilo/lib/python2.7/site-packages/hpilo.py", line 629, in _process_info_tag
    if message.find(tag) is None:
AttributeError: 'list' object has no attribute 'find'

Any tips or ideas appreciated.

Thanks!
-kb

FutureWarning

Receive following Python warning on latest master branch, running under Python 2.7.3:

python-hpilo-master/hpilo.py:688: FutureWarning: The behavior of this method will change in future versions. Use specific 'len(elem)' or 'elem is not None' test instead.
if message:

health_at_a_glance : indexError

Hi, I'm facing this issue with health_at_a_glance on some of my hosts :

Traceback (most recent call last):
File "./ps.py", line 86, in
main()
File "./ps.py", line 81, in main
xmlilo(iloname, options, logger,args[0])
File "./ps.py", line 34, in xmlilo
dilo = ilocon.get_embedded_health()
File "/home/poulpy/python/env/ilo/lib64/python2.6/site-packages/hpilo.py", line 852, in get_embedded_health
process=process)
File "/home/poulpy/python/env/ilo/lib64/python2.6/site-packages/hpilo.py", line 624, in _info_tag
return self._process_info_tag(message, returntags or [tagname], process)
File "/home/poulpy/python/env/ilo/lib64/python2.6/site-packages/hpilo.py", line 635, in _process_info_tag
return process(self._element_children_to_dict(message))
File "/home/poulpy/python/env/ilo/lib64/python2.6/site-packages/hpilo.py", line 845, in process
if tag in data[category][0]:
IndexError: list index out of range

It seems that this dummy patch is solving the issues :

845c845,846
<                         if tag in data[category][0]:

---
>                         #if tag in data[category][0]:
>                         if tag in data[category]:

Python error when using update_rib_firmware

While attempting to upgrade the ILO firmware with the CLI tool, I consistently get a python error:

$ hpilo_cli localhost update_rib_firmware filename=/tmp/ilo4_132.bin
Traceback (most recent call last):
  File "/usr/bin/hpilo_cli", line 267, in <module>
    main()
  File "/usr/bin/hpilo_cli", line 183, in main
    results = [getattr(ilo, method)(**params)]
  File "/usr/lib/python2.6/site-packages/hpilo.py", line 1496, in update_rib_firmware
    self._upload_file(filename, progress_)
  File "/usr/lib/python2.6/site-packages/hpilo.py", line 252, in _upload_file
    sent += written
TypeError: unsupported operand type(s) for +=: 'int' and 'NoneType'

certificate_signing_request issue

[root@bc204app-04 ~]# /usr/local/booking-python/2.7.2/bin/hpilo_cli -Plocal localhost certificate_signing_request -dd
Launching hponcfg
Sending XML request, 209 bytes
<?xml version="1.0"?>
<RIBCL
 VERSION="2.0"
>
<LOGIN
 PASSWORD="********"
 USER_LOGIN="Administrator"
>
<RIB_INFO
 MODE="write"
>
<CERTIFICATE_SIGNING_REQUEST
 />
</RIB_INFO>
</LOGIN>
</RIBCL>

Received 1073 bytes


<?xml version="1.0"?>
<RIBCL VERSION="2.23">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.23">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.23">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
<INFORM>Scripting utility should be updated to the latest version.</INFORM>
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.23">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.23">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.23">
<RESPONSE
    STATUS="0x0088"
    MESSAGE='The iLO subsystem is currently generating a Certificate Signing Request(CSR), run script after 10 minutes or more to receive the CSR.'
     />Traceback (most recent call last):
  File "/usr/local/booking-python/2.7.2/bin/hpilo_cli", line 255, in <module>
    main()
  File "/usr/local/booking-python/2.7.2/bin/hpilo_cli", line 173, in main
    results = [getattr(ilo, method)(**params)]
  File "/usr/local/booking-python/2.7.2/lib/python2.7/site-packages/hpilo.py", line 646, in certificate_signing_request
    return self._control_tag('RIB_INFO', 'CERTIFICATE_SIGNING_REQUEST')
  File "/usr/local/booking-python/2.7.2/lib/python2.7/site-packages/hpilo.py", line 571, in _control_tag
    header, message = self._request(root)
  File "/usr/local/booking-python/2.7.2/lib/python2.7/site-packages/hpilo.py", line 163, in _request
    message = self._parse_message(data)
  File "/usr/local/booking-python/2.7.2/lib/python2.7/site-packages/hpilo.py", line 412, in _parse_message
    message = etree.fromstring(data)
  File "<string>", line 107, in XML
cElementTree.ParseError: no element found: line 6, column 7

Unexpected keyword argument "short_empty_elements" with Python3.4

Python version 3.4
hpilo package version: 2.6.2 and 2.7
Issue: While trying to issue get_fw_version(), I am constantly getting following unexpected keyword argument.

File "ILO.py", line 394, in iloInfo
ilo_fw = svr.get_fw_version()
File "/usr/local/lib/python3.4/site-packages/hpilo.py", line 950, in get_fw_version
return self._info_tag('RIB_INFO', 'GET_FW_VERSION')
File "/usr/local/lib/python3.4/site-packages/hpilo.py", line 623, in _info_tag
header, message = self._request(root)
File "/usr/local/lib/python3.4/site-packages/hpilo.py", line 186, in _request
xml = b("\r\n").join(etree.tostringlist(xml)) + b('\r\n')
File "/usr/local/lib/python3.4/xml/etree/ElementTree.py", line 1151, in tostringlist
short_empty_elements=short_empty_elements)
File "/usr/local/lib/python3.4/xml/etree/ElementTree.py", line 778, in write
short_empty_elements=short_empty_elements)
TypeError: _serialize_xml() got an unexpected keyword argument 'short_empty_elements'

Making hpilo_ca work for ilo4

Is there any reason why hpilo_ca only allows ilo2+3 currently? It seems to work fine for ilo4 as well by just adding:

138c138,139
<         elif fw_version['management_processor'] == 'iLO3':

---
>         elif ((fw_version['management_processor'] == 'iLO3') ||
>               (fw_version['management_processor'] == 'iLO4')):

Issue changing server name on ilo4 (Gen9) servers

Hi,

With the latest git, I can not change the server_name of a Gen9 server with ilo4. Right now I did not find any good reason for this behaviour as the XML looks good according to the specs. But the server keep to return Syntax Error

Full trace

......

Transfer-Encoding: chunked
Cache-Control: no-cache
Connection: close
Date: Wed, 18 Mar 2015 04:52:02 GMT
Server: HP-iLO-Server/1.30

<?xml version="1.0"?>
<RIBCL VERSION="2.23">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.23">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.23">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.23">
<RESPONSE
    STATUS="0x0000"
    MESSAGE='No error'
     />
</RIBCL>
<?xml version="1.0"?>
<RIBCL VERSION="2.23">
<RESPONSE
    STATUS="0x0001"
    MESSAGE='Syntax error'
     />
</RIBCL>

Traceback (most recent call last):
  File "/usr/bin/hpilo_cli", line 312, in <module>
    main()
  File "/usr/bin/hpilo_cli", line 199, in main
    results = [getattr(ilo, method)(**params)]
  File "/usr/lib/python2.6/site-packages/hpilo.py", line 1644, in set_server_name
    return self._control_tag('SERVER_INFO', 'SERVER_NAME', attrib={"value": name})
  File "/usr/lib/python2.6/site-packages/hpilo.py", line 670, in _control_tag
    header, message = self._request(root)
  File "/usr/lib/python2.6/site-packages/hpilo.py", line 216, in _request
    message = self._parse_message(data)
  File "/usr/lib/python2.6/site-packages/hpilo.py", line 530, in _parse_message
    raise IloError(message, status)

update_firmware support

Apparently there's an UPDATE_FIRMWARE (note: not UPDATE_RIB_FIRMWARE) tag that can be used to update device firmware. If this is non-intrusive, add support for it and somehow update the mirroring scripts/firmware.conf generator to use it.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.