#!/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()