fence-agents: master - fence_sanbox2: Support operation 'list' for sanbox2

Marek Grác marx at fedoraproject.org
Fri Oct 9 09:48:38 UTC 2009


Gitweb:        http://git.fedorahosted.org/git/fence-agents.git?p=fence-agents.git;a=commitdiff;h=a456efcf471711f20dd80db5150da7f0ecf937c7
Commit:        a456efcf471711f20dd80db5150da7f0ecf937c7
Parent:        f534acd99ad0bacdb85a1580d5c3c25997927957
Author:        Marek 'marx' Grac <mgrac at redhat.com>
AuthorDate:    Fri Oct 9 11:46:33 2009 +0200
Committer:     Marek 'marx' Grac <mgrac at redhat.com>
CommitterDate: Fri Oct 9 11:48:41 2009 +0200

fence_sanbox2: Support operation 'list' for sanbox2

---
 fence/agents/sanbox2/fence_sanbox2.py |   50 +++++++++++++++++++++++++++++++-
 1 files changed, 48 insertions(+), 2 deletions(-)

diff --git a/fence/agents/sanbox2/fence_sanbox2.py b/fence/agents/sanbox2/fence_sanbox2.py
index 79d1f02..d7b5335 100644
--- a/fence/agents/sanbox2/fence_sanbox2.py
+++ b/fence/agents/sanbox2/fence_sanbox2.py
@@ -29,6 +29,12 @@ def get_power_status(conn, options):
 	except pexpect.EOF:
 		fail(EC_CONNECTION_LOST)
 	except pexpect.TIMEOUT:
+		try:
+			conn.send("admin end\n")
+			conn.send("exit\n")
+			conn.close()
+		except:
+			pass
 		fail(EC_TIMED_OUT)
 	
 	status = re.compile(".*AdminState\s+(online|offline)\s+", re.IGNORECASE | re.MULTILINE).search(conn.before).group(1)
@@ -50,6 +56,12 @@ def set_power_status(conn, options):
 	except pexpect.EOF:
 		fail(EC_CONNECTION_LOST)
 	except pexpect.TIMEOUT:
+		try:
+			conn.send("admin end\n")
+			conn.send("exit\n")
+			conn.close()
+		except:
+			pass
 		fail(EC_TIMED_OUT)                                                                         	
 
 	try:
@@ -58,12 +70,46 @@ def set_power_status(conn, options):
 	except pexpect.EOF:
 		fail(EC_CONNECTION_LOST)
 	except pexpect.TIMEOUT:
+		try:
+			conn.send("admin end\n")
+			conn.send("exit\n")
+			conn.close()
+		except:
 		fail(EC_TIMED_OUT)
 
+def get_list_devices(conn, options):
+	outlets = { }
+
+	try:
+		conn.send("show port" + "\n")
+		conn.log_expect(options, options["-c"], SHELL_TIMEOUT)
+
+		list_re = re.compile("^\s+(\d+?)\s+(Online|Offline)\s+", re.IGNORECASE)
+		for line in conn.before.splitlines():
+			if (list_re.search(line)):
+				status = {
+					'online' : "ON",
+					'offline' : "OFF"
+				}[list_re.search(line).group(2).lower()]
+				outlets[list_re.search(line).group(1)] = ("", status)
+
+	except pexpect.EOF:
+		fail(EC_CONNECTION_LOST)
+	except pexpect.TIMEOUT:
+		try:
+			conn.send("admin end\n")
+			conn.send("exit\n")
+			conn.close()
+		except:
+			pass
+		fail(EC_TIMED_OUT)
+		
+	return outlets
+
 def main():
 	device_opt = [  "help", "version", "agent", "quiet", "verbose", "debug",
 			"io_fencing", "ipaddr", "login", "passwd", "passwd_script",
-			"cmd_prompt", "port", "ipport", "login_eol_lf" ]
+			"cmd_prompt", "port", "ipport", "login_eol_lf", "separator" ]
 
 	atexit.register(atexit_handler)
 
@@ -91,7 +137,7 @@ def main():
 		sys.stderr.write("Failed: Unable to switch to admin section\n")
 		sys.exit(EC_GENERIC_ERROR)
 
-	fence_action(conn, options, set_power_status, get_power_status)
+	fence_action(conn, options, set_power_status, get_power_status, get_list_devices)
 
 	##
 	## Logout from system


More information about the cluster-commits mailing list