Jim could you send that script as an attachment? When I run it from luci I'm getting the following errors in /var/log/messages Seems to work when I do it from the command line though Oct 18 18:03:33 nfs-7 fence_node[11985]: agent "fence_apc" reports: Traceback (most recent call last): File "/sbin/fence_apc", line 832, in ? main() File "/sbin/fence_apc", line 303, in main do_power_off(sock) File "/sbin/fence_apc", line 816, in do_power_off x = do_power_switch(sock, "off") File "/sbi Oct 18 18:03:33 nfs-7 fence_node[11985]: agent "fence_apc" reports: n/fence_apc", line 611, in do_power_switch result_code, response = power_off(txt + ndbuf) File "/sbin/fence_apc", line 820, in power_off x = power_switch(buffer, False, "2", "3"); File "/sbin/fence_apc", line 813, in power_switch raise "un Oct 18 18:03:33 nfs-7 fence_node[11985]: agent "fence_apc" reports: known screen encountered in \n" + str(lines) + "\n" unknown screen encountered in ['', '> 1', '', '', '------- Phase Management ------------------------------------------------------', '', ' Phase Load : 3.9', ' Phase State: Normal Load ', Oct 18 18:03:33 nfs-7 fence_node[11985]: agent "fence_apc" reports: '', ' 1- Overload Alarm Threshold(amps) : 12', ' 2- Near Overload Warning Threshold(amps): 8', ' 3- Low Load Warning Threshold(amps) : 0', ' 4- Accept Changes : ', '', ' ?- Help, <ESC>- Back, <ENTER>- R Oct 18 18:03:33 nfs-7 fence_node[11985]: agent "fence_apc" reports: efresh, <CTRL-L>- Event Log'] Oct 18 18:03:33 nfs-7 fence_node[11985]: Fence of "nfs-6.cdc.nicusa.com" was unsuccessful On 10/18/07 5:21 PM, "jim parsons" <jparsons@xxxxxxxxxx> wrote: > Try this one. It is slated for the next update. Just drop in to /sbin on > every node. > > -j > > > On Thu, 2007-10-18 at 17:14 -0400, Josh Gray wrote: >> I'm getting a menu not recognized error when I try fencing with the switches >> I just picked up. Is a certain OS or Firmware required? >> >> >> # /sbin/fence_apc -a 10.0.0.xxx -l admin -n 2 -o off -p xxx -v >> failed: unrecognised menu response >> >> # cat /tmp/apclog >> >> User Name : admin >> Password : ********** >> >> >>> From the gui: >> >> Hardware Factory >> >> Model Number: AP7900 >> Hardware Revision: B2 >> Manufacture Date: 08/17/2007 >> Management Uptime: 0 Days 3 Hours 8 Minutes >> >> >> >> Application Module >> >> Name: rpdu >> Version: v3.3.3 >> Date: 01/05/2007 >> Time: 14:56:33 >> >> >> >> APC OS (AOS) >> >> Name: aos >> Version: v3.3.4 >> Date: 01/05/2007 >> Time: >> >> > #!/usr/bin/python > > ##############################################################################> # > ##############################################################################> # > ## > ## Copyright (C) 2006 Red Hat, Inc. All rights reserved. > ## > ## This copyrighted material is made available to anyone wishing to use, > ## modify, copy, or redistribute it subject to the terms and conditions > ## of the GNU General Public License v.2. > ## > ##############################################################################> # > ##############################################################################> # > > import getopt, sys > import os > import socket > import time > > from telnetlib import Telnet > > TELNET_TIMEOUT=5 #How long to wait for a response from a telnet try > > # WARNING!! Do not add code bewteen "#BEGIN_VERSION_GENERATION" and > # "#END_VERSION_GENERATION" It is generated by the Makefile > > #BEGIN_VERSION_GENERATION > FENCE_RELEASE_NAME="New APC Agent - test release" > REDHAT_COPYRIGHT="" > BUILD_DATE="September 21, 2006" > #END_VERSION_GENERATION > > POWER_OFF = 0 > POWER_ON = 1 > POWER_STATUS = 2 > POWER_REBOOT = 3 > > COMPLETE = 0 > NOT_COMPLETE = 1 > > ON = "ON" > OFF = "OFF" > > SUCCESS = "success" > FAIL = "fail" > > address = "" > login = "" > passwd = "" > passwd_script = "" > port = "" > switchnum = "" > action = POWER_REBOOT #default action > verbose = False > > logfile = None > > #set up regex list > CONTROL_CONSOLE = "Control Console -----" > DEVICE_MANAGER = "Device Manager -----" > OUTLET_CONTROL = "- Outlet Control/Configuration -----" > OUTLET_MANAGE = "- Outlet Management -----" > CONTROL_OUTLET = "- Control Outlet -----" > CONTROL_OUTLET_2 = "- Outlet Control " > COMMAND_SUCCESS = "Command successfully issued." > COMMAND_SUCCESS_2 = " Success" > CONFIRM = "Enter 'YES' to continue or <ENTER> to cancel :" > CONTINUE = "Press <ENTER> to continue..." > SCREEN_END = "<ESC>- Main Menu, <ENTER>- Refresh, <CTRL-L>- Event Log" > SCREEN_END_2 = "<ESC>- Back, <ENTER>- Refresh, <CTRL-L>- Event Log" > USERNAME = "User Name :" > PASSWORD = "Password :" > MASTER = "------- MasterSwitch" > FIRMWARE_STR = "Rack PDU APP" > > CONTINUE_INDEX = 0 > > FIRMWARE_REV = 2 > > regex_list = list() > regex_list.append(CONTINUE) > regex_list.append(SCREEN_END) > regex_list.append(SCREEN_END_2) > regex_list.append(USERNAME) > regex_list.append(PASSWORD) > > def usage(): > print "Usage:\n" > print "fence_apc [options]" > print "Options:" > print " -a <ipaddress> ip or hostname of APC switch" > print " -h print out help" > print " -l [login] login name" > print " -n [port] switch port" > print " -p [password] password" > print " -S [path] script to run to retrieve password" > print " -o [action] Reboot (default), Off, On, or Status" > print " -v Verbose Verbose mode - writes file to > /tmp/apclog" > print " -V Print Version, then exit" > > sys.exit (0) > > def version(): > print "fence_apc %s %s\n" % (FENCE_RELEASE_NAME, BUILD_DATE) > print "%s\n" % REDHAT_COPYRIGHT > sys.exit(0) > > def main(): > > global address, login, passwd, passwd_script, port, action, verbose, > logfile, switchnum > > if len(sys.argv) > 1: > try: > opts, args = getopt.getopt(sys.argv[1:], "a:hl:o:n:p:S:vV", ["help", > "output="]) > except getopt.GetoptError: > #print help info and quit > usage() > sys.exit(2) > > for o, a in opts: > if o == "-v": > verbose = True > if o == "-V": > version() > if o in ("-h", "--help"): > usage() > sys.exit() > if o == "-l": > login = a > if o == "-p": > passwd = a > if o == "-S": > passwd_script = a > if o == "-n": > dex = a.find(":") > if dex == (-1): > port = a > else: > switchnum = a[:dex] > port = a[(dex+1):] > if o == "-o": > if a == "Off" or a == "OFF" or a == "off": > action = POWER_OFF > elif a == "On" or a == "ON" or a == "on": > action = POWER_ON > elif a == "Status" or a == "STATUS" or a == "status": > action = POWER_STATUS > elif a == "Reboot" or a == "REBOOT" or a == "reboot": > action = POWER_REBOOT > else: > usage() > sys.exit() > if o == "-a": > address = a > if address == "" or login == "" or (passwd == "" and passwd_script == "") > or port == "": > usage() > sys.exit() > > else: #Take args from stdin... > params = {} > #place params in dict > for line in sys.stdin: > val = line.split("=") > if len(val) == 2: > params[val[0].strip()] = val[1].strip() > > try: > address = params["ipaddr"] > except KeyError, e: > sys.stderr.write("FENCE: Missing ipaddr param for fence_apc...exiting") > sys.exit(1) > try: > login = params["login"] > except KeyError, e: > sys.stderr.write("FENCE: Missing login param for fence_apc...exiting") > sys.exit(1) > try: > if 'passwd' in params: > passwd = params["passwd"] > if 'passwd_script' in params: > passwd_script = params['passwd_script'] > if passwd == "" and passwd_script == "": > raise "missing password" > except: > sys.stderr.write("FENCE: Missing passwd for fence_apc...exiting") > sys.exit(1) > try: > port = params["port"] > except KeyError, e: > sys.stderr.write("FENCE: Missing port param for fence_apc...exiting") > sys.exit(1) > try: > switchnum = params["switch"] > except KeyError, e: > pass > try: > verbose = params["verbose"] > verbose = (verbose == 'True' or verbose == 'true' or verbose == 'TRUE') > except KeyError, e: > pass > > try: > a = params["option"] > if a == "Off" or a == "OFF" or a == "off": > action = POWER_OFF > elif a == "On" or a == "ON" or a == "on": > action = POWER_ON > elif a == "Reboot" or a == "REBOOT" or a == "reboot": > action = POWER_REBOOT > except KeyError, e: > action = POWER_REBOOT > > #### End of stdin section > > > # retrieve passwd from passwd_script (if specified) > passwd_scr = '' > if len(passwd_script): > try: > if not os.access(passwd_script, os.X_OK): > raise 'script not executable' > p = os.popen(passwd_script, 'r', 1024) > passwd_scr = p.readline().strip() > if p.close() != None: > raise 'script failed' > except: > sys.stderr.write('password-script "%s" failed\n' % passwd_script) > passwd_scr = '' > > if passwd == "" and passwd_scr == "": > sys.stderr.write('password not available, exiting...') > sys.exit(1) > elif passwd == passwd_scr: > pass > elif passwd and passwd_scr: > # execute self, with password_scr as passwd, > # if that fails, continue with "passwd" argument as password > if len(sys.argv) > 1: > comm = sys.argv[0] > skip_next = False > for w in sys.argv[1:]: > if skip_next: > skip_next = False > elif w in ['-p', '-S']: > skip_next = True > else: > comm += ' ' + w > comm += ' -p ' + passwd_scr > ret = os.system(comm) > if ret != -1 and os.WIFEXITED(ret) and os.WEXITSTATUS(ret) == 0: > # success > sys.exit(0) > else: > sys.stderr.write('Use of password from "passwd_script" failed, trying > "passwd" argument\n') > else: # use stdin > p = os.popen(sys.argv[0], 'w', 1024) > for par in params: > if par not in ['passwd', 'passwd_script']: > p.write(par + '=' + params[par] + '\n') > p.write('passwd=' + passwd_scr + '\n') > p.flush() > if p.close() == None: > # success > sys.exit(0) > else: > sys.stderr.write('Use of password from "passwd_script" failed, trying > "passwd" argument\n') > elif passwd_scr: > passwd = passwd_scr > # passwd all set > > > > ### Order of events > # 0) If verbose, prepare log file handle > # 1) Open socket > # 2) Log in > # 3) Evaluate task. Task will be one of: > # 3a - Check status and print to stdout (or log file if verbose) > # 3b - Turn a port off, then confirm > # 3c - Turn a port on, then confirm > # 3d - Reboot by turning a port off, then on, and confirming each step. > > if verbose: > setup_logging() > > sock = setup_socket() > > # Ok, now lets log in... > do_login(sock) > > # Now we should be at the outside Control screen > > if action == POWER_STATUS: > # We should be at the Control screen, so we need to write a '1' > # to kick things off > sock.write("1\r") > statusval = do_status_check(sock) > backout(sock) > sock.write("4\r") # Logs out > > elif action == POWER_OFF: > sock.write("1\r") > do_power_off(sock) > backout(sock) # Return to control screen > statusval = do_status_check(sock) > if statusval == OFF: > if verbose: > logit("Power Off successful\n") > print "Power Off successful" > backout(sock) > sock.write("4\r") # Logs out > sock.close() > sys.exit(0) > else: > if verbose: > logit("Power Off unsuccessful\n") > logit("Undetermined error\n") > sys.stderr.write("Power Off unsuccessful") > backout(sock) > sock.write("4\r") # Logs out > sock.close() > sys.exit(1) > > elif action == POWER_ON: > sock.write("1\r") > do_power_on(sock) > backout(sock) # Return to control screen > statusval = do_status_check(sock) > if statusval == ON: > if verbose: > logit("Power On successful\n") > print "Power On successful" > backout(sock) > sock.write("4\r") # logs out > sock.close() > sys.exit(0) > else: > if verbose: > logit("Power On unsuccessful\n") > logit("Undetermined error\n") > sys.stderr.write("Power On unsuccessful") > backout(sock) > sock.write("4\r") # Logs out > sock.close() > sys.exit(1) > > elif action == POWER_REBOOT: > sock.write("1\r") > do_power_off(sock) > backout(sock) # Return to control screen > statusval = do_status_check(sock) > if statusval == OFF: > if verbose: > logit("Power Off successful\n") > print "Power Off successful" > backout(sock) > else: > if verbose: > logit("Power Off unsuccessful\n") > logit("Undetermined error\n") > sys.stderr.write("Power Off unsuccessful") > backout(sock) > sock.write("4\r") # Logs out > sock.close() > sys.exit(1) > do_power_on(sock) > backout(sock) # Return to control screen > statusval = do_status_check(sock) > if statusval == ON: > if verbose: > logit("Power Reboot successful\n") > print "Power Reboot successful" > backout(sock) > sock.write("4\r") # Logs out > sock.close() > sys.exit(0) > else: > if verbose: > logit("Power Reboot unsuccessful\n") > logit("Undetermined error\n") > sys.stderr.write("Power Reboot unsuccessful") > backout(sock) > sock.write("4\r") # Logs out > sock.close() > sys.exit(1) > > sock.close() > > def backout(sock): > sock.write(chr(27)) > > while (1): > i, mo, txt = sock.expect(regex_list, TELNET_TIMEOUT) > > if regex_list[i] == SCREEN_END: > break > elif regex_list[i] == SCREEN_END_2: > sock.write(chr(27)) > > def setup_socket(): > ## Time to open telnet session and log in. > try: > sock = Telnet(address.strip()) > except socket.error, (errno, msg): > my_msg = "FENCE: A problem was encountered opening a telnet session with " > + address > if verbose: > logit(my_msg) > logit("FENCE: Error number: %d -- Message: %s\n" % (errno, msg)) > logit("Firewall issue? Correct address?\n") > > sys.stderr.write(my_msg) > sys.stderr.write(("FENCE: Error number: %d -- Message: %s\n" % (errno, > msg))) > sys.stderr.write("Firewall issue? Correct address?\n") > sys.exit(1) > > if verbose: > logit("\nsocket open to %s\n" % address) > > return sock > > def setup_logging( log_location="/tmp/apclog"): > global logfile > try: > logfile = open(log_location, 'a') > logfile.write("###############################################\n") > logfile.write("Telnetting to apc switch %s\n" % address) > now = time.localtime(time.time()) > logfile.write(time.asctime(now)) > except IOError, e: > sys.stderr.write("Failed to open log file %s" % log_location) > logfile = None > > def logit(instr): > if logfile != None: > logfile.write(instr) > > def do_login(sock): > result_code = 1 > > ## This loop tries to assemble complete telnet screens and passes > ## them to helper methods to handle responses accordingly. > while result_code: > try: > i, mo, txt = sock.expect(regex_list, TELNET_TIMEOUT) > except socket.error, (errno, msg): > my_msg = "FENCE: A problem was encountered opening a telnet session with > " + address + "\n" > if verbose: > logit(my_msg) > logit("FENCE: Error number: %d -- Message: %s\n" % (errno, msg)) > > sys.stderr.write(my_msg) > sys.stderr.write(("FENCE: Error number: %d -- Message: %s\n" % (errno, > msg))) > sys.exit(1) > > if i == CONTINUE_INDEX: # Capture the rest of the screen... > sock.write("\r") > ii,moo,txtt = sock.expect(regex_list, TELNET_TIMEOUT) > txt = txt + txtt > > ndbuf = sock.read_eager() # Scoop up remainder > if verbose: > logit(txt + ndbuf) > result_code,response = log_in(txt + ndbuf) > if result_code: > try: > sock.write(response) > except socket.error, (errno, msg): > if verbose: > logit("Error #%s" % errno) > logit(msg) > sys.stderr.write("Error #%s: %s" % (errno,msg)) > sys.exit(1) > > def log_in(buffer): > global FIRMWARE_REV > lines = buffer.splitlines() > > for i in lines: > if i.find(USERNAME) != (-1): > if verbose: > logit("Sending login: %s\n" % login) > return (NOT_COMPLETE, login + "\r") > elif i.find(PASSWORD) != (-1): > if verbose: > logit("Sending password: %s\n" % passwd) > return (NOT_COMPLETE, passwd + "\r") > elif i.find(CONTROL_CONSOLE) != (-1): > #while we are here, grab the firmware revision > rev_search_lines = buffer.splitlines() > for rev_search_line in rev_search_lines: #search screen again > rev_dex = rev_search_line.find(FIRMWARE_STR) > if rev_dex != (-1): #found revision line > scratch_rev = rev_search_line[rev_dex:] > v_dex = scratch_rev.find("v") > if v_dex != (-1): > if scratch_rev[v_dex + 1] == "3": #format is v3.3.4 > FIRMWARE_REV = 3 > break > return (COMPLETE, "1\r") > > def do_status_check(sock): > result_code = 1 > while result_code: > i, mo, txt = sock.expect(regex_list, TELNET_TIMEOUT) > if i == CONTINUE_INDEX: # Capture the rest of the screen... > sock.write("\r") > ii,moo,txtt = sock.expect(regex_list, TELNET_TIMEOUT) > txt = txt + txtt > > ndbuf = sock.read_eager() # Scoop up remainder > if verbose: > logit(txt + ndbuf) > (result_code,response,statusval) = return_status(txt + ndbuf) > if result_code: > try: > sock.write(response) > except socket.error, (errno, msg): > if verbose: > logit("Status check failed.") > logit("Error #%s" % errno) > logit(msg) > sys.stderr.write("Status check failed.") > sys.stderr.write("Error #%s: %s" % (errno,msg)) > sys.exit(1) > # Back from status check - value should be in status var > if response == SUCCESS: > if switchnum == "": > if verbose: > logit("Status check successful. Port %s is %s" % (port,statusval)) > print "Status check successful. Port %s is %s" % (port,statusval) > else: > if verbose: > logit("Status check successful. Port %s:%s is %s" % (switchnum, port, > statusval)) > print "Status check successful. Port %s:%s is %s" % (switchnum, port, > statusval) > > return statusval > else: > if verbose: > logit("Status check failed, unknown reason.") > sys.stderr.write("Status check failed, unknown reason.\n") > sock.close() > sys.exit(1) > > def return_status(buffer): > global switchnum, port > > lines = buffer.splitlines() > > for i in lines: > if i.find(CONTROL_CONSOLE) != (-1): > return (NOT_COMPLETE, "1\r", "Status Unknown") > elif i.find(DEVICE_MANAGER) != (-1): > if switchnum != "": > res = switchnum + "\r" > else: > if FIRMWARE_REV == 2: > res = "3\r" > elif FIRMWARE_REV == 3: > res = "2\r1\r" > else: #placeholder for future revisions > res = "3\r" > return (NOT_COMPLETE, res, "Status Unknown") > elif i.find(OUTLET_CONTROL) != (-1): > ls = buffer.splitlines() > portval = port.strip() > portval = " " + portval + " " > portval2 = " " + port.strip() + "- " > found_portval = False > for l in ls: > if l.find(portval) != (-1) or l.find(portval2) != (-1): > found_portval = True > linesplit = l.split() > linelen = len(linesplit) > return (COMPLETE,SUCCESS,linesplit[linelen - 1]) > elif i.find(MASTER) != (-1): > try: > e = int(port.strip()) > portval = port.strip() > switchval = switchnum.strip() > portval = switchval + ":" + portval > except ValueError, e: > portval = port.strip() > ls = buffer.splitlines() > found_portval = False > for l in ls: > words = l.split() > if len(words) > 3: > if words[2] == portval or words[3] == portval: > found_portval = True > linesplit = l.split() > linelen = len(linesplit) > return (COMPLETE, SUCCESS, linesplit[linelen - 3]) > return (COMPLETE, FAIL, "Incorrect port number") > return (NOT_COMPLETE, chr(27), "Status Unknown") > > def do_power_switch(sock, status): > result_code = 1 > > while result_code: > i, mo, txt = sock.expect(regex_list, TELNET_TIMEOUT) > if i == CONTINUE_INDEX: # Capture the rest of the screen... > sock.write("\r") > ii,moo,txtt = sock.expect(regex_list, TELNET_TIMEOUT) > txt = txt + txtt > > ndbuf = sock.read_eager() # Scoop up remainder > if verbose: > logit(txt + ndbuf) > > if status == "off": > result_code, response = power_off(txt + ndbuf) > elif status == "on": > result_code, response = power_on(txt + ndbuf) > else: > if verbose: > logit("Invalid status in do_power_switch() function") > sys.stderr.write("Invalid status in do_power_switch() function") > sys.exit(1) > > if result_code: > try: > sock.write(response) > except socket.error, (errno, msg): > if verbose: > logit("Error #%s" % errno) > logit(msg) > sys.stderr.write("Error #%s: %s" % (errno,msg)) > sys.exit(1) > # FIXME: always returns COMPLETE (0) > else: > try: > sock.write(response) > except socket.error, (errno, msg): > if verbose: > logit("Error #%s" % errno) > logit(msg) > sys.stderr.write("Error #%s: %s" % (errno,msg)) > sys.exit(1) > return COMPLETE > > > def power_switch(buffer, escape, control_outlet, control_outlet2): > # If port is not aliased, then outlet control screen will have the word > # 'Outlet' in the header. If the name is aliased, it will only have the > # alias in the header. > > outlet_search_str1 = "Outlet " + port.strip() + " ------------" > outlet_search_str2 = port.strip() + " ------------" > outlet_search_str3 = "Outlet " + switchnum.strip() + ":" + port.strip() + " > ------" > outlet_search_str4 = " Outlet : " + port.strip() > outlet_search_str5 = " Outlet Name : " + port.strip() > master_search_str1 = "-------- Master" > lines = buffer.splitlines() > > for i in lines: > if i.find(CONTROL_CONSOLE) != (-1): > return (NOT_COMPLETE,"1\r") > > elif i.find(DEVICE_MANAGER) != (-1): > if switchnum != "": > res = switchnum + "\r" > else: > if FIRMWARE_REV == 2: > res = "3\r" > elif FIRMWARE_REV == 3: > #Changed for bz299191 > #res = "2\r1\r" > res = "2\r" > else: #placeholder for future revisions - sheesh > res = "3\r" > return (NOT_COMPLETE, res) > > elif (i.find(master_search_str1) != (-1)): > return (NOT_COMPLETE, port.strip() + "\r") > > elif i.find(outlet_search_str1) != (-1) and (switchnum == ""): > return (NOT_COMPLETE,"1\r") > > elif i.find(outlet_search_str2) != (-1) and (switchnum == ""): > return (NOT_COMPLETE,"1\r") > > elif i.find(outlet_search_str3) != (-1): > return (NOT_COMPLETE, "1\r") > > elif i == outlet_search_str4: > return (NOT_COMPLETE, "1\r") > > elif i == outlet_search_str5: > return (NOT_COMPLETE, "1\r") > > elif i.find(OUTLET_MANAGE) != (-1): > #Changed for bz299191 > #return (NOT_COMPLETE, "\r") > return (NOT_COMPLETE, "1\r") > > #elif i.find(OUTLET_CONTROL) != (-1) or i.find(OUTLET_MANAGE) != (-1): > elif i.find(OUTLET_CONTROL) != (-1): > ls = buffer.splitlines() > portval = port.strip() > portval = " " + portval + " " > found_portval = False > i = 0 > # look for aliased name > for l in ls: > i = i + 1 > if l.find(portval) != (-1): > found_portval = True > linesplit = l.split() > outlet_str = linesplit[0] > dex = outlet_str.find("-") > if dex <= (0): > if verbose: > logit("Problem identifying outlet\n") > logit("Looking for %s in string %s\n" % (portval,outlet_str)) > sys.stderr.write("Problem identifying outlet\n") > sys.stderr.write("Looking for %s in string %s\n" % > (portval,outlet_str)) > sys.exit(1) > normalized_outlet_str = outlet_str[:dex] > return (NOT_COMPLETE, normalized_outlet_str + "\r") > # look for portnum > portval = " " + port.strip() + "-" > i = 0 > for l in ls: > i = i + 1 > if l.find(portval) != (-1): > found_portval = True > linesplit = l.split() > outlet_str = linesplit[0] > dex = outlet_str.find("-") > if dex <= (0): > if verbose: > logit("Problem identifying outlet\n") > logit("Looking for %s in string %s\n" % (portval,outlet_str)) > sys.stderr.write("Problem identifying outlet\n") > sys.stderr.write("Looking for %s in string %s\n" % > (portval,outlet_str)) > sys.exit(1) > normalized_outlet_str = outlet_str[:dex] > return (NOT_COMPLETE, normalized_outlet_str + "\r") > if found_portval == False: > if verbose: > logit("Problem identifying outlet\n") > logit("Looking for '%s' in string '%s'\n" % (portval, ls)) > sys.stderr.write("Problem identifying outlet\n") > sys.stderr.write("Looking for '%s' in string '%s'\n" % (portval, ls)) > sys.exit(1) > > elif i.find(MASTER) != (-1): > ls = buffer.splitlines() > found_portval = False > # look for aliased name > portval = port.strip() > for l in ls: > words = l.strip().split() > if len(words) > 3: > if '----' not in words[0] and words[3].strip() == portval: > outlet_str = words[0] > dex = outlet_str.find("-") > if dex <= (0): > if verbose: > logit("Problem identifying outlet\n") > logit("Looking for %s in string %s\n" % (portval, outlet_str)) > sys.stderr.write("Problem identifying outlet\n") > sys.stderr.write("Looking for %s in string %s\n" % (portval, > outlet_str)) > sys.exit(1) > normalized_outlet_str = outlet_str[:dex] > return (NOT_COMPLETE, (normalized_outlet_str + "\r")) > # look for portnum > portval = port.strip() > portval = switchnum.strip() + ":" + portval + " " > i = 0 > for l in ls: > i = i + 1 > if l.find(portval) != (-1): > found_portval = True > linesplit = l.split() > outlet_str = linesplit[0] > dex = outlet_str.find("-") > if dex <= (0): > if verbose: > logit("Problem identifying outlet\n") > logit("Looking for %s in string %s\n" % (portval,outlet_str)) > sys.stderr.write("Problem identifying outlet\n") > sys.stderr.write("Looking for %s in string %s\n" % > (portval,outlet_str)) > sys.exit(1) > normalized_outlet_str = outlet_str[:dex] > return (NOT_COMPLETE, (normalized_outlet_str + "\r")) > if found_portval == False: > if verbose: > logit("Problem identifying outlet\n") > logit("Looking for '%s' in string '%s'\n" % (portval, ls)) > sys.stderr.write("Problem identifying outlet\n") > sys.stderr.write("Looking for '%s' in string '%s'\n" % (portval, ls)) > sys.exit(1) > > elif i.find(CONFIRM) != (-1): > return (NOT_COMPLETE,"YES\r") > > elif i.find(COMMAND_SUCCESS) != (-1): > return (COMPLETE,"\r") > > elif i.find(COMMAND_SUCCESS_2) != (-1): > return (COMPLETE,"\r") > > elif i.find(CONTROL_OUTLET) != (-1): > return (NOT_COMPLETE, control_outlet + "\r") > > elif i.find(CONTROL_OUTLET_2) != (-1): > return (NOT_COMPLETE, control_outlet2 + "\r") > > if (escape == True): > return (NOT_COMPLETE, chr(27)) > else: > raise "unknown screen encountered in \n" + str(lines) + "\n" > > def do_power_off(sock): > x = do_power_switch(sock, "off") > return x > > def power_off(buffer): > x = power_switch(buffer, False, "2", "3"); > return x > > def do_power_on(sock): > x = do_power_switch(sock, "on") > return x > > def power_on(buffer): > x = power_switch(buffer, True, "1", "1"); > return x > > if __name__ == "__main__": > main() > -- > Linux-cluster mailing list > Linux-cluster@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/linux-cluster -- Josh Gray Systems Administrator NIC, Inc Email: jgray@xxxxxxxxxx Desk/Mobile: 913-221-1520 "Talent is cheaper than table salt. What separates the talented individual from the successful one is a lot of hard work." - Stephen King -- Linux-cluster mailing list Linux-cluster@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/linux-cluster