public inbox for cluster-cvs@sourceware.org
help / color / mirror / Atom feed
* cluster: RHEL5 - fence_agents: #487501 - Exceptions in fencing agents
@ 2009-03-13 15:00 Marek Grác
  0 siblings, 0 replies; only message in thread
From: Marek Grác @ 2009-03-13 15:00 UTC (permalink / raw)
  To: cluster-cvs-relay

Gitweb:        http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=c71af4ec1da41d7217e31d3f56192c16cc4a52db
Commit:        c71af4ec1da41d7217e31d3f56192c16cc4a52db
Parent:        2c694c1d1adb895454b511b082053d3a0e963785
Author:        Marek 'marx' Grac <mgrac@redhat.com>
AuthorDate:    Fri Mar 13 15:57:17 2009 +0100
Committer:     Marek 'marx' Grac <mgrac@redhat.com>
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("</LOGIN>\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


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2009-03-13 15:00 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-03-13 15:00 cluster: RHEL5 - fence_agents: #487501 - Exceptions in fencing agents Marek Grác

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).