From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7299 invoked by alias); 23 Oct 2008 13:58:10 -0000 Received: (qmail 7292 invoked by alias); 23 Oct 2008 13:58:10 -0000 X-Spam-Status: No, hits=-0.1 required=5.0 tests=AWL,BAYES_50,KAM_MX,SPF_HELO_PASS X-Spam-Check-By: sourceware.org X-Spam-Checker-Version: SpamAssassin 3.2.4 (2008-01-01) on bastion.fedora.phx.redhat.com X-Spam-Level: Subject: master - [fence] Operation 'list' and 'monitor' for iLO, DRAC5 and APC To: cluster-cvs-relay@redhat.com X-Project: Cluster Project X-Git-Module: cluster.git X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: bc3c001c78019d0f2f1a6c20d1caf61e9048f6c7 X-Git-Newrev: 0e29686d2deae8f403a2b1d87af76bb668db22e1 From: =?utf-8?q?Marek_Gr=C3=A1c?= Message-Id: <20081023135646.66A891201EA@lists.fedorahosted.org> Date: Thu, 23 Oct 2008 13:58:00 -0000 X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 Mailing-List: contact cluster-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: cluster-cvs-owner@sourceware.org X-SW-Source: 2008-q4/txt/msg00118.txt.bz2 Gitweb: http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=0e29686d2deae8f403a2b1d87af76bb668db22e1 Commit: 0e29686d2deae8f403a2b1d87af76bb668db22e1 Parent: bc3c001c78019d0f2f1a6c20d1caf61e9048f6c7 Author: Marek 'marx' Grac AuthorDate: Thu Oct 23 15:27:16 2008 +0200 Committer: Marek 'marx' Grac CommitterDate: Thu Oct 23 15:41:05 2008 +0200 [fence] Operation 'list' and 'monitor' for iLO, DRAC5 and APC Operation for listing available outlets works also for single-unit fencing devices and returns N/A (can be changed to anything else). Option 'monitor' can be used for monitoring health of the fencing device. It does not output anything and will perform operation 'list' (on multi-port devices; ef. APC) or operation 'status' (on single-port devices; eg. iLO). --- fence/agents/apc/fence_apc.py | 4 ++-- fence/agents/drac/fence_drac5.py | 2 +- fence/agents/ilo/fence_ilo.py | 2 +- fence/agents/lib/fencing.py.py | 18 +++++++++++++----- 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/fence/agents/apc/fence_apc.py b/fence/agents/apc/fence_apc.py index 7630af5..653d214 100755 --- a/fence/agents/apc/fence_apc.py +++ b/fence/agents/apc/fence_apc.py @@ -85,7 +85,7 @@ def get_power_status(conn, options): except pexpect.TIMEOUT: fail(EC_TIMED_OUT) - if options["-o"] == "list": + if ["list", "monitor"].count(options["-o"]) == 1: return outlets else: status = re.compile("\s*"+options["-n"]+"-.*(ON|OFF)", re.IGNORECASE).search(result).group(1) @@ -188,7 +188,7 @@ def main(): options["-c"] = "\n>" ## Support for -n [switch]:[plug] notation that was used before - if (-1 != options["-n"].find(":")): + if (options.has_key("-n") == 1) and (-1 != options["-n"].find(":")): (switch, plug) = options["-n"].split(":", 1) options["-s"] = switch; options["-n"] = plug; diff --git a/fence/agents/drac/fence_drac5.py b/fence/agents/drac/fence_drac5.py old mode 100644 new mode 100755 index 6a70b68..41bd1d0 --- a/fence/agents/drac/fence_drac5.py +++ b/fence/agents/drac/fence_drac5.py @@ -66,7 +66,7 @@ def main(): ## Operate the fencing device ###### conn = fence_login(options) - fence_action(conn, options, set_power_status, get_power_status) + fence_action(conn, options, set_power_status, get_power_status, None) ## ## Logout from system diff --git a/fence/agents/ilo/fence_ilo.py b/fence/agents/ilo/fence_ilo.py old mode 100644 new mode 100755 index e050ea8..0cf416e --- a/fence/agents/ilo/fence_ilo.py +++ b/fence/agents/ilo/fence_ilo.py @@ -95,7 +95,7 @@ def main(): ## ## Fence operations #### - fence_action(conn, options, set_power_status, get_power_status) + fence_action(conn, options, set_power_status, get_power_status, None) if __name__ == "__main__": main() diff --git a/fence/agents/lib/fencing.py.py b/fence/agents/lib/fencing.py.py index 7927acd..cf7d9be 100644 --- a/fence/agents/lib/fencing.py.py +++ b/fence/agents/lib/fencing.py.py @@ -273,6 +273,7 @@ def process_input(avail_opt): ###### def check_input(device_opt, opt): options = dict(opt) + options["device_opt"] = device_opt if options.has_key("-h"): usage(device_opt) @@ -294,7 +295,7 @@ def check_input(device_opt, opt): # Convert action to lowercase options["-o"]=options["-o"].lower() - if 0 == ["on", "off", "reboot", "status", "list"].count(options["-o"].lower()): + if 0 == ["on", "off", "reboot", "status", "list", "monitor"].count(options["-o"].lower()): fail_usage("Failed: Unrecognised action '" + options["-o"] + "'") if (0 == options.has_key("-l")) and device_opt.count("login") and (device_opt.count("no_login") == 0): @@ -318,7 +319,7 @@ def check_input(device_opt, opt): if 0 == os.path.isfile(options["-k"]): fail_usage("Failed: Identity file " + options["-k"] + " does not exist") - if (0 == options.has_key("-n")) and (device_opt.count("port")): + if (0 == ["list", "monitor"].count(options["-o"].lower())) and (0 == options.has_key("-n")) and (device_opt.count("port")): fail_usage("Failed: You have to enter plug number") if options.has_key("-S"): @@ -361,18 +362,23 @@ def wait_power_status(tn, options, get_power_fn): return 0 def fence_action(tn, options, set_power_fn, get_power_fn, get_outlet_list = None): - if (options["-o"] == "list" and get_outlet_list == None): + if (options["-o"] == "list" and 0 == options["device_opt"].count("port")): + print "N/A" + return + elif (options["-o"] == "list" and get_outlet_list == None): ## @todo: exception? ## This is just temporal solution, we will remove default value ## None as soon as all existing agent will support this operation print "NOTICE: List option is not working on this device yet" return - elif (options["-o"] == "list"): + elif (options["-o"] == "list") or ((options["-o"] == "monitor") and 1 == options["device_opt"].count("port")): outlets = get_outlet_list(tn, options) ## keys can be numbers (port numbers) or strings (names of VM) for o in outlets.keys(): (alias, status) = outlets[o] - print o + options["-C"] + alias + if options["-o"] != "monitor": + print o + options["-C"] + alias + return status = get_power_fn(tn, options) @@ -407,6 +413,8 @@ def fence_action(tn, options, set_power_fn, get_power_fn, get_outlet_list = None print "Success: Rebooted" elif options["-o"] == "status": print "Status: " + status.upper() + elif options["-o"] == "monitor": + 1 def fence_login(options): try: