From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24018 invoked by alias); 13 Mar 2009 15:00:37 -0000 Received: (qmail 24001 invoked by alias); 13 Mar 2009 15:00:36 -0000 X-SWARE-Spam-Status: No, hits=-1.8 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_210,SPF_HELO_PASS X-Spam-Status: No, hits=-1.8 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_210,SPF_HELO_PASS X-Spam-Check-By: sourceware.org X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on bastion.fedora.phx.redhat.com Subject: cluster: RHEL5 - fence_agents: #487501 - Exceptions in fencing agents To: cluster-cvs-relay@redhat.com X-Project: Cluster Project X-Git-Module: cluster.git X-Git-Refname: refs/heads/RHEL5 X-Git-Reftype: branch X-Git-Oldrev: 2c694c1d1adb895454b511b082053d3a0e963785 X-Git-Newrev: c71af4ec1da41d7217e31d3f56192c16cc4a52db From: =?utf-8?q?Marek_Gr=C3=A1c?= Message-Id: <20090313145955.0BA2A12015A@lists.fedorahosted.org> Date: Fri, 13 Mar 2009 15:00:00 -0000 X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 Mailing-List: contact cluster-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: cluster-cvs-owner@sourceware.org X-SW-Source: 2009-q1/txt/msg00782.txt.bz2 Gitweb: http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=c71af4ec1da41d7217e31d3f56192c16cc4a52db Commit: c71af4ec1da41d7217e31d3f56192c16cc4a52db Parent: 2c694c1d1adb895454b511b082053d3a0e963785 Author: Marek 'marx' Grac AuthorDate: Fri Mar 13 15:57:17 2009 +0100 Committer: Marek 'marx' Grac CommitterDate: Fri Mar 13 15:57:17 2009 +0100 fence_agents: #487501 - Exceptions in fencing agents Several of new fencing agent does not work when bad options are entered (bad password, non-existent outlet number, ...). This is not a problem. Unfortunately python exceptions are thrown and we don't care about catching them. Such output is very usefull for debugging (as people tends to send it) but it will be better if the user will see that the error is in the input data There should be no changes to code itself, only exception handling was added. --- fence/agents/apc/fence_apc.py | 6 +++++- fence/agents/bladecenter/fence_bladecenter.py | 5 ++++- fence/agents/ilo/fence_ilo.py | 2 ++ fence/agents/lib/fencing.py.py | 4 +++- fence/agents/lpar/fence_lpar.py | 12 +++++++++--- 5 files changed, 23 insertions(+), 6 deletions(-) diff --git a/fence/agents/apc/fence_apc.py b/fence/agents/apc/fence_apc.py index bf25050..1532abc 100755 --- a/fence/agents/apc/fence_apc.py +++ b/fence/agents/apc/fence_apc.py @@ -79,7 +79,11 @@ def get_power_status(conn, options): except pexpect.TIMEOUT: fail(EC_TIMED_OUT) - status = re.compile("\s*"+options["-n"]+"-.*(ON|OFF)", re.IGNORECASE).search(result).group(1) + try: + status = re.compile("\s*"+options["-n"]+"-.*(ON|OFF)", re.IGNORECASE).search(result).group(1) + except AttributeError: + fail(EC_STATUS) + return status.lower().strip() def set_power_status(conn, options): diff --git a/fence/agents/bladecenter/fence_bladecenter.py b/fence/agents/bladecenter/fence_bladecenter.py index ff7ad67..9fdfe97 100755 --- a/fence/agents/bladecenter/fence_bladecenter.py +++ b/fence/agents/bladecenter/fence_bladecenter.py @@ -28,7 +28,10 @@ def get_power_status(conn, options): node_cmd = "system:blade\[" + options["-n"] + "\]>" conn.send("env -T system:blade[" + options["-n"] + "]\r\n") - conn.log_expect(options, node_cmd, SHELL_TIMEOUT) + i = conn.log_expect(options, [ node_cmd, "system>" ] , SHELL_TIMEOUT) + if i == 1: + ## Given blade number does not exist + fail(EC_STATUS) conn.send("power -state\r\n") conn.log_expect(options, node_cmd, SHELL_TIMEOUT) status = conn.before.splitlines()[-1] diff --git a/fence/agents/ilo/fence_ilo.py b/fence/agents/ilo/fence_ilo.py index 3cada5e..6513e2a 100755 --- a/fence/agents/ilo/fence_ilo.py +++ b/fence/agents/ilo/fence_ilo.py @@ -92,6 +92,8 @@ def main(): conn.send("\r\n") except pexpect.TIMEOUT: fail(EC_LOGIN_DENIED) + except pexpect.EOF: + fail(EC_LOGIN_DENIED) ## ## Fence operations diff --git a/fence/agents/lib/fencing.py.py b/fence/agents/lib/fencing.py.py index c12c962..6eacf6c 100644 --- a/fence/agents/lib/fencing.py.py +++ b/fence/agents/lib/fencing.py.py @@ -29,6 +29,7 @@ EC_TIMED_OUT = 5 EC_WAITING_ON = 6 EC_WAITING_OFF = 7 EC_STATUS = 8 +EC_STATUS_HMC = 9 TELNET_PATH = "/usr/bin/telnet" SSH_PATH = "/usr/bin/ssh" @@ -184,7 +185,8 @@ def fail(error_code): EC_TIMED_OUT : "Connection timed out", EC_WAITING_ON : "Failed: Timed out waiting to power ON", EC_WAITING_OFF : "Failed: Timed out waiting to power OFF", - EC_STATUS : "Failed: Unable to obtain correct plug status" + EC_STATUS : "Failed: Unable to obtain correct plug status or plug is not available", + EC_STATUS_HMC : "Failed: Either unable to obtaion correct plug status, partition is not available or incorrect HMC version used" }[error_code] + "\n" sys.stderr.write(message) sys.exit(error_code) diff --git a/fence/agents/lpar/fence_lpar.py b/fence/agents/lpar/fence_lpar.py index d0664eb..450b507 100755 --- a/fence/agents/lpar/fence_lpar.py +++ b/fence/agents/lpar/fence_lpar.py @@ -31,7 +31,10 @@ def get_power_status(conn, options): except pexpect.TIMEOUT: fail(EC_TIMED_OUT) - status = re.compile("^" + options["-n"] + ",(.*?),.*$", re.IGNORECASE | re.MULTILINE).search(conn.before).group(1) + try: + status = re.compile("^" + options["-n"] + ",(.*?),.*$", re.IGNORECASE | re.MULTILINE).search(conn.before).group(1) + except AttributeError: + fail(EC_STATUS_HMC) elif options["-H"] == "4": try: conn.send("lssyscfg -r lpar -m "+ options["-s"] +" --filter 'lpar_names=" + options["-n"] + "'\n") @@ -40,8 +43,11 @@ def get_power_status(conn, options): fail(EC_CONNECTION_LOST) except pexpect.TIMEOUT: fail(EC_TIMED_OUT) - - status = re.compile(",state=(.*?),", re.IGNORECASE).search(conn.before).group(1) + + try: + status = re.compile(",state=(.*?),", re.IGNORECASE).search(conn.before).group(1) + except AttributeError: + fail(EC_STATUS_HMC) ## ## Transformation to standard ON/OFF status if possible