Gitweb:
http://git.fedorahosted.org/git/?p=fence-agents.git;a=commitdiff;h=96d7a8...
Commit: 96d7a8383197e3d34c201139445ff177d870ff62
Parent: b770d0d321c65ac4d326e4bf9f2937a5af97e5d8
Author: Marek 'marx' Grac <mgrac(a)redhat.com>
AuthorDate: Wed Apr 23 17:48:14 2014 +0200
Committer: Marek 'marx' Grac <mgrac(a)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__":