#!/usr/bin/python
##
## Copyright (C) 2008 Red Hat, Inc. All Rights Reserved.
##
## The Following Agent Has Been Tested On:
##
## iLO Version
## +---------------------------------------------+
## iLO / firmware 1.91 / RIBCL 2.22
## iLO2 / firmware 1.22 / RIBCL 2.22
## iLO2 / firmware 1.50 / RIBCL 2.22
#####
import sys, re, pexpect, socket
sys.path.append("/usr/lib/fence")
from fencing import *
from OpenSSL import SSL
#BEGIN_VERSION_GENERATION
FENCE_RELEASE_NAME="2.0.115";
REDHAT_COPYRIGHT=("Copyright (C) Red Hat, Inc. 2004 All rights reserved.")
BUILD_DATE="(built Wed Aug 5 08:25:06 EDT 2009)";
#END_VERSION_GENERATION
def get_power_status(conn, options):
conn.send("\r\n")
conn.send("\r\n")
conn.send("\r\n")
conn.log_expect(options, "HOST_POWER=\"(.*?)\"", POWER_TIMEOUT)
status = conn.match.group(1)
return status.lower().strip()
def set_power_status(conn, options):
conn.send("\r\n")
conn.send("")
if options.has_key("fw_processor") and options["fw_processor"] == "iLO2":
if options["fw_version"] > 1.29:
conn.send("\r\n")
else:
conn.send("\r\n")
elif options["-r"] < 2.21:
conn.send("\r\n")
else:
if options["-o"] == "off":
conn.send("\r\n")
else:
conn.send("\r\n")
conn.send("\r\n")
return
def main():
device_opt = [ "help", "version", "agent", "quiet", "verbose", "debug",
"action", "ipaddr", "login", "passwd", "passwd_script",
"ssl", "ribcl" ]
options = check_input(device_opt, process_input(device_opt))
options["-z"] = 1
LOGIN_TIMEOUT = 10
##
## Login and get version number
####
conn = fence_login(options)
try:
conn.send("\r\n")
conn.log_expect(options, [ "", "" ], LOGIN_TIMEOUT)
version = re.compile("= 2:
conn.send("\r\n")
else:
conn.send("\r\n")
conn.send("\r\n")
if options["-r"] >= 2:
conn.send("\r\n")
conn.send("\r\n")
conn.log_expect(options, "", SHELL_TIMEOUT)
options["fw_version"] = float(re.compile("FIRMWARE_VERSION\s*=\s*\"(.*?)\"", re.IGNORECASE).search(conn.before).group(1))
options["fw_processor"] = re.compile("MANAGEMENT_PROCESSOR\s*=\s*\"(.*?)\"", re.IGNORECASE).search(conn.before).group(1)
conn.send("\r\n")
except pexpect.TIMEOUT:
fail(EC_LOGIN_DENIED)
except pexpect.EOF:
fail(EC_LOGIN_DENIED)
##
## Fence operations
####
fence_action(conn, options, set_power_status, get_power_status)
if __name__ == "__main__":
main()