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