fence-agents: master - [cleanup] Create function fence_logout()

Marek GrĂ¡c marx at fedoraproject.org
Wed Apr 23 15:50:54 UTC 2014


Gitweb:        http://git.fedorahosted.org/git/?p=fence-agents.git;a=commitdiff;h=96d7a8383197e3d34c201139445ff177d870ff62
Commit:        96d7a8383197e3d34c201139445ff177d870ff62
Parent:        b770d0d321c65ac4d326e4bf9f2937a5af97e5d8
Author:        Marek 'marx' Grac <mgrac at redhat.com>
AuthorDate:    Wed Apr 23 17:48:14 2014 +0200
Committer:     Marek 'marx' Grac <mgrac at redhat.com>
CommitterDate: Wed Apr 23 17:48:14 2014 +0200

[cleanup] Create function fence_logout()

This function replaces almost all logout functions. Exception is in
fence_sanbox2 where two lines are required for exit.
---
 fence/agents/alom/fence_alom.py               |    9 +--------
 fence/agents/apc/fence_apc.py                 |   14 +-------------
 fence/agents/bladecenter/fence_bladecenter.py |   11 +----------
 fence/agents/brocade/fence_brocade.py         |   16 +---------------
 fence/agents/drac/fence_drac.py               |   15 +--------------
 fence/agents/drac5/fence_drac5.py             |   12 +-----------
 fence/agents/hds_cb/fence_hds_cb.py           |   10 +---------
 fence/agents/hpblade/fence_hpblade.py         |   11 +----------
 fence/agents/ilo_mp/fence_ilo_mp.py           |    7 +------
 fence/agents/ldom/fence_ldom.py               |   13 +------------
 fence/agents/lib/fencing.py.py                |   16 +++++++++++++++-
 fence/agents/lpar/fence_lpar.py               |   12 ++----------
 fence/agents/netio/fence_netio.py             |   17 ++---------------
 fence/agents/raritan/fence_raritan.py         |   16 ++--------------
 fence/agents/rsa/fence_rsa.py                 |   11 +----------
 fence/agents/rsb/fence_rsb.py                 |   15 +--------------
 fence/agents/virsh/fence_virsh.py             |   10 ++--------
 fence/agents/wti/fence_wti.py                 |   11 +----------
 18 files changed, 36 insertions(+), 190 deletions(-)

diff --git a/fence/agents/alom/fence_alom.py b/fence/agents/alom/fence_alom.py
index d64838e..ef418c3 100644
--- a/fence/agents/alom/fence_alom.py
+++ b/fence/agents/alom/fence_alom.py
@@ -52,14 +52,7 @@ agent which can be used with ALOM connected machines."
 	# Operate the fencing device
 	conn = fence_login(options)
 	result = fence_action(conn, options, set_power_status, get_power_status, None)
-
-	# Logout from system
-	try:
-		conn.send_eol("logout")
-		conn.close()
-	except Exception:
-		pass
-
+	fence_logout(conn, "logout")
 	sys.exit(result)
 
 if __name__ == "__main__":
diff --git a/fence/agents/apc/fence_apc.py b/fence/agents/apc/fence_apc.py
index c6a9aaf..c31a4b0 100644
--- a/fence/agents/apc/fence_apc.py
+++ b/fence/agents/apc/fence_apc.py
@@ -252,19 +252,7 @@ will block any necessary fencing actions."
 	else:
 		result = fence_action(conn, options, set_power_status, get_power_status, get_power_status)
 
-	##
-	## Logout from system
-	##
-	## In some special unspecified cases it is possible that
-	## connection will be closed before we run close(). This is not
-	## a problem because everything is checked before.
-	######
-	try:
-		conn.send_eol("4")
-		conn.close()
-	except Exception:
-		pass
-
+	fence_logout(conn, "4")
 	sys.exit(result)
 
 if __name__ == "__main__":
diff --git a/fence/agents/bladecenter/fence_bladecenter.py b/fence/agents/bladecenter/fence_bladecenter.py
index b6cd005..6508012 100644
--- a/fence/agents/bladecenter/fence_bladecenter.py
+++ b/fence/agents/bladecenter/fence_bladecenter.py
@@ -104,16 +104,7 @@ and uses the command line interface to power on and off blades."
 	######
 	conn = fence_login(options, "(username: )")
 	result = fence_action(conn, options, set_power_status, get_power_status, get_blades_list)
-
-	##
-	## Logout from system
-	######
-	try:
-		conn.send_eol("exit")
-		conn.close()
-	except Exception:
-		pass
-
+	fence_logout(conn, "exit")
 	sys.exit(result)
 
 if __name__ == "__main__":
diff --git a/fence/agents/brocade/fence_brocade.py b/fence/agents/brocade/fence_brocade.py
index 716bad1..ac1c0c1 100644
--- a/fence/agents/brocade/fence_brocade.py
+++ b/fence/agents/brocade/fence_brocade.py
@@ -66,22 +66,8 @@ FC switch needs to be enabled. This can be done by running fence_brocade and spe
 	## Operate the fencing device
 	####
 	conn = fence_login(options)
-
 	result = fence_action(conn, options, set_power_status, get_power_status, None)
-
-	##
-	## Logout from system
-	##
-	## In some special unspecified cases it is possible that
-	## connection will be closed before we run close(). This is not
-	## a problem because everything is checked before.
-	######
-	try:
-		conn.send_eol("exit")
-		conn.close()
-	except Exception:
-		pass
-
+	fence_logout(conn, "exit")
 	sys.exit(result)
 
 if __name__ == "__main__":
diff --git a/fence/agents/drac/fence_drac.py b/fence/agents/drac/fence_drac.py
index 4c0dea8..4965779 100644
--- a/fence/agents/drac/fence_drac.py
+++ b/fence/agents/drac/fence_drac.py
@@ -61,20 +61,7 @@ To enable telnet on the DRAC: \
 	####
 	conn = fence_login(options)
 	result = fence_action(conn, options, set_power_status, get_power_status, None)
-
-	##
-	## Logout from system
-	##
-	## In some special unspecified cases it is possible that
-	## connection will be closed before we run close(). This is not
-	## a problem because everything is checked before.
-	######
-	try:
-		conn.send_eol("exit")
-		conn.close()
-	except Exception:
-		pass
-
+	fence_logout(conn, "exit")
 	sys.exit(result)
 
 if __name__ == "__main__":
diff --git a/fence/agents/drac5/fence_drac5.py b/fence/agents/drac5/fence_drac5.py
index ade299e..7687135 100644
--- a/fence/agents/drac5/fence_drac5.py
+++ b/fence/agents/drac5/fence_drac5.py
@@ -146,17 +146,7 @@ By default, the telnet interface is not  enabled."
 			fail_usage("Failed: You have to enter module name (-n)")
 
 	result = fence_action(conn, options, set_power_status, get_power_status, get_list_devices)
-
-	##
-	## Logout from system
-	######
-	try:
-		conn.send_eol("exit")
-		time.sleep(1)
-		conn.close()
-	except Exception:
-		pass
-
+	fence_logout(conn, "exit", 1)
 	sys.exit(result)
 
 if __name__ == "__main__":
diff --git a/fence/agents/hds_cb/fence_hds_cb.py b/fence/agents/hds_cb/fence_hds_cb.py
index 8092de1..2256d4d 100755
--- a/fence/agents/hds_cb/fence_hds_cb.py
+++ b/fence/agents/hds_cb/fence_hds_cb.py
@@ -131,15 +131,7 @@ includes telnet support."
 	conn = fence_login(options)
 	result = fence_action(conn, options, set_power_status, get_power_status, get_blades_list)
 
-	##
-	## Logout from system
-	######
-	try:
-		conn.sendline("X")
-		conn.close()
-	except Exception:
-		pass
-
+	fence_logout(conn, "X")
 	sys.exit(result)
 
 if __name__ == "__main__":
diff --git a/fence/agents/hpblade/fence_hpblade.py b/fence/agents/hpblade/fence_hpblade.py
index ee59d5f..69aa30d 100644
--- a/fence/agents/hpblade/fence_hpblade.py
+++ b/fence/agents/hpblade/fence_hpblade.py
@@ -81,16 +81,7 @@ and uses the command line interface to power on and off blades."
 	options["eol"] = "\n"
 	conn = fence_login(options)
 	result = fence_action(conn, options, set_power_status, get_power_status, get_blades_list)
-
-	##
-	## Logout from system
-	######
-	try:
-		conn.send_eol("exit")
-		conn.close()
-	except Exception:
-		pass
-
+	fence_logout(conn, "exit")
 	sys.exit(result)
 
 if __name__ == "__main__":
diff --git a/fence/agents/ilo_mp/fence_ilo_mp.py b/fence/agents/ilo_mp/fence_ilo_mp.py
index 6cc2d9f..2e70ad3 100644
--- a/fence/agents/ilo_mp/fence_ilo_mp.py
+++ b/fence/agents/ilo_mp/fence_ilo_mp.py
@@ -57,12 +57,7 @@ def main():
 	## Fence operations
 	####
 	result = fence_action(conn, options, set_power_status, get_power_status)
-
-	try:
-		conn.send_eol("exit")
-	except Exception:
-		pass
-
+	fence_logout(conn, "exit")
 	sys.exit(result)
 
 if __name__ == "__main__":
diff --git a/fence/agents/ldom/fence_ldom.py b/fence/agents/ldom/fence_ldom.py
index 5e046df..d58be31 100644
--- a/fence/agents/ldom/fence_ldom.py
+++ b/fence/agents/ldom/fence_ldom.py
@@ -101,18 +101,7 @@ root. Than prompt is $, so again, you must use parameter -c."
 	####
 	conn = fence_login(options)
 	result = fence_action(conn, options, set_power_status, get_power_status, get_power_status)
-
-	##
-	## Logout from system
-	######
-	try:
-		conn.send_eol("logout")
-		conn.close()
-	except exceptions.OSError:
-		pass
-	except pexpect.ExceptionPexpect:
-		pass
-
+	fence_logout(conn, "logout")
 	sys.exit(result)
 
 if __name__ == "__main__":
diff --git a/fence/agents/lib/fencing.py.py b/fence/agents/lib/fencing.py.py
index 994d80c..0539a2f 100644
--- a/fence/agents/lib/fencing.py.py
+++ b/fence/agents/lib/fencing.py.py
@@ -6,6 +6,7 @@ import logging
 import subprocess
 import threading
 import shlex
+import exceptions
 import __main__
 
 ## do not add code here.
@@ -16,7 +17,7 @@ BUILD_DATE = "March, 2008"
 #END_VERSION_GENERATION
 
 __all__ = [ 'atexit_handler', 'check_input', 'process_input', 'all_opt', 'show_docs',
-		'fence_login', 'fence_action' ]
+		'fence_login', 'fence_action', 'fence_logout' ]
 
 EC_GENERIC_ERROR   = 1
 EC_BAD_ARGS        = 2
@@ -1127,3 +1128,16 @@ def run_delay(options):
 	if options["--action"] in ["off", "reboot"]:
 		logging.info("Delay %s second(s) before logging in to the fence device", options["--delay"])
 		time.sleep(int(options["--delay"]))
+
+def fence_logout(conn, logout_string, sleep=0):
+	# Logout is not required part of fencing but we should attempt to do it properly
+	# In some cases our 'exit' command is faster and we can not close connection as it
+	# was already closed by fencing device
+	try:
+		conn.send_eol(logout_string)
+		time.sleep(sleep)
+		conn.close()
+	except exceptions.OSError:
+		pass
+	except pexpect.ExceptionPexpect:
+		pass
diff --git a/fence/agents/lpar/fence_lpar.py b/fence/agents/lpar/fence_lpar.py
index c487656..527b74b 100644
--- a/fence/agents/lpar/fence_lpar.py
+++ b/fence/agents/lpar/fence_lpar.py
@@ -149,16 +149,8 @@ def main():
 	####
 	conn = fence_login(options)
 	result = fence_action(conn, options, set_power_status, get_power_status, get_lpar_list)
-
-	##
-	## Logout from system
-	######
-	try:
-		conn.send("quit\r\n")
-		conn.close()
-	except Exception:
-		pass
-
+	fence_logout(conn, "quit\r\n")
 	sys.exit(result)
+
 if __name__ == "__main__":
 	main()
diff --git a/fence/agents/netio/fence_netio.py b/fence/agents/netio/fence_netio.py
index 4cf3b43..4f756f8 100755
--- a/fence/agents/netio/fence_netio.py
+++ b/fence/agents/netio/fence_netio.py
@@ -94,22 +94,9 @@ block any necessary fencing actions."
 		fail(EC_LOGIN_DENIED)
 	except pexpect.TIMEOUT:
 		fail(EC_LOGIN_DENIED)
-	result = fence_action(conn, options, set_power_status, get_power_status, get_outlet_list)
-
-	##
-	## Logout from system
-	##
-	## In some special unspecified cases it is possible that
-	## connection will be closed before we run close(). This is not
-	## a problem because everything is checked before.
-	######
-	try:
-		conn.send("quit\n")
-		conn.log_expect(options, "110 BYE", int(options["--shell-timeout"]))
-		conn.close()
-	except Exception:
-		pass
 
+	result = fence_action(conn, options, set_power_status, get_power_status, get_outlet_list)
+	fence_logout(conn, "quit\n")
 	sys.exit(result)
 
 if __name__ == "__main__":
diff --git a/fence/agents/raritan/fence_raritan.py b/fence/agents/raritan/fence_raritan.py
index 5224fc0..b895514 100644
--- a/fence/agents/raritan/fence_raritan.py
+++ b/fence/agents/raritan/fence_raritan.py
@@ -78,21 +78,9 @@ block any necessary fencing actions."
 		fail(EC_LOGIN_DENIED)
 	except pexpect.TIMEOUT:
 		fail(EC_LOGIN_DENIED)
-	result = fence_action(conn, options, set_power_status, get_power_status)
-
-	##
-	## Logout from system
-	##
-	## In some special unspecified cases it is possible that
-	## connection will be closed before we run close(). This is not
-	## a problem because everything is checked before.
-	######
-	try:
-		conn.send("exit\n")
-		conn.close()
-	except Exception:
-		pass
 
+	result = fence_action(conn, options, set_power_status, get_power_status)
+	fence_logout(conn, "exit\n")
 	sys.exit(result)
 
 if __name__ == "__main__":
diff --git a/fence/agents/rsa/fence_rsa.py b/fence/agents/rsa/fence_rsa.py
index 1167907..7e38aea 100644
--- a/fence/agents/rsa/fence_rsa.py
+++ b/fence/agents/rsa/fence_rsa.py
@@ -62,16 +62,7 @@ will block any necessary fencing actions."
 	######
 	conn = fence_login(options)
 	result = fence_action(conn, options, set_power_status, get_power_status, None)
-
-	##
-	## Logout from system
-	######
-	try:
-		conn.send_eol("exit")
-		conn.close()
-	except Exception:
-		pass
-
+	fence_logout(conn, "exit")
 	sys.exit(result)
 
 if __name__ == "__main__":
diff --git a/fence/agents/rsb/fence_rsb.py b/fence/agents/rsb/fence_rsb.py
index 7aab0ae..32afc8f 100755
--- a/fence/agents/rsb/fence_rsb.py
+++ b/fence/agents/rsb/fence_rsb.py
@@ -67,20 +67,7 @@ will block any necessary fencing actions."
 	####
 	conn = fence_login(options)
 	result = fence_action(conn, options, set_power_status, get_power_status, None)
-
-	##
-	## Logout from system
-	##
-	## In some special unspecified cases it is possible that
-	## connection will be closed before we run close(). This is not
-	## a problem because everything is checked before.
-	######
-	try:
-		conn.send_eol("0")
-		conn.close()
-	except Exception:
-		pass
-
+	fence_logout(conn, "0")
 	sys.exit(result)
 
 if __name__ == "__main__":
diff --git a/fence/agents/virsh/fence_virsh.py b/fence/agents/virsh/fence_virsh.py
index b56fec2..5de395c 100644
--- a/fence/agents/virsh/fence_virsh.py
+++ b/fence/agents/virsh/fence_virsh.py
@@ -93,14 +93,8 @@ must allow ssh login in your sshd_config."
 	## Operate the fencing device
 	conn = fence_login(options)
 	result = fence_action(conn, options, set_power_status, get_power_status, get_outlets_status)
-
-	## Logout from system
-	try:
-		conn.sendline("quit")
-		conn.close()
-	except Exception:
-		pass
-
+	fence_logout(conn, "quit")
 	sys.exit(result)
+
 if __name__ == "__main__":
 	main()
diff --git a/fence/agents/wti/fence_wti.py b/fence/agents/wti/fence_wti.py
index 290eaaa..0280e29 100644
--- a/fence/agents/wti/fence_wti.py
+++ b/fence/agents/wti/fence_wti.py
@@ -236,16 +236,7 @@ is running because the connection will block any necessary fencing actions."
 		conn = fence_login(options)
 
 	result = fence_action(conn, options, set_power_status, get_power_status, get_power_status)
-
-	##
-	## Logout from system
-	######
-	try:
-		conn.send("/X"+"\r\n")
-		conn.close()
-	except Exception:
-		pass
-
+	fence_logout(conn, "/X\r\n")
 	sys.exit(result)
 
 if __name__ == "__main__":


More information about the cluster-commits mailing list