fence-agents: master - fencing: Add operation 'list-status'
Marek GrĂ¡c
marx at fedoraproject.org
Wed Mar 4 16:20:00 UTC 2015
Gitweb: http://git.fedorahosted.org/git/?p=fence-agents.git;a=commitdiff;h=d560df8bb53cf3e997adc4b2d65f0102a176ab91
Commit: d560df8bb53cf3e997adc4b2d65f0102a176ab91
Parent: 25b4aaafedb2711b239cc572a276155dfcdd2028
Author: Marek 'marx' Grac <mgrac at redhat.com>
AuthorDate: Wed Mar 4 17:15:14 2015 +0100
Committer: Marek 'marx' Grac <mgrac at redhat.com>
CommitterDate: Wed Mar 4 17:15:14 2015 +0100
fencing: Add operation 'list-status'
This new action will report output similar to 'list' with 3rd column that
represents status of node = ON/OFF/UNKNOWN. Majority of relevant fence agent
is supported.
Exceptions are:
'list' is not working at all
fence_ovh, fence_scsi, fence_mpath
'list-status' reports 'UNKNOWN' status all the time
fence_lpar
fence_ifmib
fence_bladecenter
fence_hds_cb
fence_cisco_ucs
fence_eaton_snmp
fence_netio
fence_rhevm
---
fence/agents/lib/fencing.py.py | 52 ++++++++++++++++----------
fence/agents/ovh/fence_ovh.py | 3 +
tests/data/metadata/fence_apc.xml | 1 +
tests/data/metadata/fence_apc_snmp.xml | 1 +
tests/data/metadata/fence_bladecenter.xml | 1 +
tests/data/metadata/fence_brocade.xml | 1 +
tests/data/metadata/fence_cisco_mds.xml | 1 +
tests/data/metadata/fence_cisco_ucs.xml | 1 +
tests/data/metadata/fence_docker.xml | 1 +
tests/data/metadata/fence_drac5.xml | 1 +
tests/data/metadata/fence_dummy.xml | 1 +
tests/data/metadata/fence_eaton_snmp.xml | 1 +
tests/data/metadata/fence_emerson.xml | 1 +
tests/data/metadata/fence_eps.xml | 1 +
tests/data/metadata/fence_hds_cb.xml | 1 +
tests/data/metadata/fence_hpblade.xml | 1 +
tests/data/metadata/fence_ibmblade.xml | 1 +
tests/data/metadata/fence_ifmib.xml | 1 +
tests/data/metadata/fence_ilo_moonshot.xml | 1 +
tests/data/metadata/fence_intelmodular.xml | 1 +
tests/data/metadata/fence_ipdu.xml | 1 +
tests/data/metadata/fence_ldom.xml | 1 +
tests/data/metadata/fence_lpar.xml | 1 +
tests/data/metadata/fence_netio.xml | 1 +
tests/data/metadata/fence_ovh.xml | 1 +
tests/data/metadata/fence_pve.xml | 1 +
tests/data/metadata/fence_raritan.xml | 1 +
tests/data/metadata/fence_rhevm.xml | 1 +
tests/data/metadata/fence_sanbox2.xml | 1 +
tests/data/metadata/fence_tripplite_snmp.xml | 1 +
tests/data/metadata/fence_virsh.xml | 1 +
tests/data/metadata/fence_vmware_soap.xml | 1 +
tests/data/metadata/fence_wti.xml | 1 +
tests/data/metadata/fence_xenapi.xml | 1 +
tests/data/metadata/fence_zvmip.xml | 1 +
35 files changed, 68 insertions(+), 20 deletions(-)
diff --git a/fence/agents/lib/fencing.py.py b/fence/agents/lib/fencing.py.py
index febc64e..b7776f6 100644
--- a/fence/agents/lib/fencing.py.py
+++ b/fence/agents/lib/fencing.py.py
@@ -644,7 +644,6 @@ def check_input(device_opt, opt, other_conditions = False):
(acceptable_actions, _) = _get_available_actions(device_opt)
- ## Compatibility layer
if 1 == device_opt.count("fabric_fencing"):
acceptable_actions.extend(["enable", "disable"])
@@ -757,23 +756,34 @@ def fence_action(connection, options, set_power_fn, get_power_fn, get_outlet_lis
## Process options that manipulate fencing device
#####
- if options["--action"] == "list" and 0 == options["device_opt"].count("port"):
- print "N/A"
- return
- elif options["--action"] == "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["--action"] == "list") or \
- ((options["--action"] == "monitor") and 1 == options["device_opt"].count("port")):
- outlets = get_outlet_list(connection, options)
- ## keys can be numbers (port numbers) or strings (names of VM, UUID)
- for outlet_id in outlets.keys():
- (alias, status) = outlets[outlet_id]
- if options["--action"] != "monitor":
- print outlet_id + options["--separator"] + alias
+ if (options["--action"] in ["list", "list-status"]) or \
+ ((options["--action"] == "monitor") and 1 == options["device_opt"].count("port")):
+
+ if 0 == options["device_opt"].count("port"):
+ print "N/A"
+ elif 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"
+ else:
+ original_action = options["--action"]
+ options["--action"] = "list"
+ outlets = get_outlet_list(connection, options)
+ options["--action"] = original_action
+
+ ## keys can be numbers (port numbers) or strings (names of VM, UUID)
+ for outlet_id in outlets.keys():
+ (alias, status) = outlets[outlet_id]
+ status = status.upper()
+ if not status in ["ON", "OFF"]:
+ status = "UNKNOWN"
+
+ if options["--action"] == "list":
+ print outlet_id + options["--separator"] + alias
+ elif options["--action"] == "list-status":
+ print outlet_id + options["--separator"] + alias + options["--separator"] + status
+
return
status = get_multi_power_fn(connection, options, get_power_fn)
@@ -1196,7 +1206,7 @@ def _validate_input(options, stop = True):
valid_input = False
fail_usage("Failed: Identity file " + options["--identity-file"] + " does not exist", stop)
- if (0 == ["list", "monitor"].count(options["--action"])) and \
+ if (0 == ["list", "list-status", "monitor"].count(options["--action"])) and \
not options.has_key("--plug") and device_opt.count("port") and device_opt.count("no_port") == 0:
valid_input = False
fail_usage("Failed: You have to enter plug number or machine identification", stop)
@@ -1312,7 +1322,8 @@ def _verify_unique_getopt(avail_opt):
used_getopt.add(getopt_value)
def _get_available_actions(device_opt):
- available_actions = ["on", "off", "reboot", "status", "list", "monitor", "metadata", "validate-all"]
+ available_actions = ["on", "off", "reboot", "status", "list", "list-status", \
+ "monitor", "metadata", "validate-all"]
default_value = "reboot"
if device_opt.count("fabric_fencing"):
@@ -1322,5 +1333,6 @@ def _get_available_actions(device_opt):
available_actions.remove("status")
if not device_opt.count("separator"):
available_actions.remove("list")
+ available_actions.remove("list-status")
return (available_actions, default_value)
diff --git a/fence/agents/ovh/fence_ovh.py b/fence/agents/ovh/fence_ovh.py
index 6786131..de5333c 100644
--- a/fence/agents/ovh/fence_ovh.py
+++ b/fence/agents/ovh/fence_ovh.py
@@ -95,6 +95,9 @@ Poweroff is simulated with a reboot into rescue-pro mode."
if options["--action"] == "list":
fail_usage("Action 'list' is not supported in this fence agent")
+ if options["--action"] == "list-status":
+ fail_usage("Action 'list-status' is not supported in this fence agent")
+
if not options.has_key("--email"):
fail_usage("You have to enter e-mail address which is notified by fence agent")
diff --git a/tests/data/metadata/fence_apc.xml b/tests/data/metadata/fence_apc.xml
index 63f239f..c5df0a5 100644
--- a/tests/data/metadata/fence_apc.xml
+++ b/tests/data/metadata/fence_apc.xml
@@ -145,6 +145,7 @@
<action name="reboot" />
<action name="status" />
<action name="list" />
+ <action name="list-status" />
<action name="monitor" />
<action name="metadata" />
<action name="validate-all" />
diff --git a/tests/data/metadata/fence_apc_snmp.xml b/tests/data/metadata/fence_apc_snmp.xml
index 3ca7c8b..71dafec 100644
--- a/tests/data/metadata/fence_apc_snmp.xml
+++ b/tests/data/metadata/fence_apc_snmp.xml
@@ -174,6 +174,7 @@
<action name="reboot" />
<action name="status" />
<action name="list" />
+ <action name="list-status" />
<action name="monitor" />
<action name="metadata" />
<action name="validate-all" />
diff --git a/tests/data/metadata/fence_bladecenter.xml b/tests/data/metadata/fence_bladecenter.xml
index 5791642..ac017cc 100644
--- a/tests/data/metadata/fence_bladecenter.xml
+++ b/tests/data/metadata/fence_bladecenter.xml
@@ -145,6 +145,7 @@
<action name="reboot" />
<action name="status" />
<action name="list" />
+ <action name="list-status" />
<action name="monitor" />
<action name="metadata" />
<action name="validate-all" />
diff --git a/tests/data/metadata/fence_brocade.xml b/tests/data/metadata/fence_brocade.xml
index 7cb380d..efdfe22 100644
--- a/tests/data/metadata/fence_brocade.xml
+++ b/tests/data/metadata/fence_brocade.xml
@@ -139,6 +139,7 @@
<action name="off" />
<action name="status" />
<action name="list" />
+ <action name="list-status" />
<action name="monitor" />
<action name="metadata" />
<action name="validate-all" />
diff --git a/tests/data/metadata/fence_cisco_mds.xml b/tests/data/metadata/fence_cisco_mds.xml
index 68a9244..bd07420 100644
--- a/tests/data/metadata/fence_cisco_mds.xml
+++ b/tests/data/metadata/fence_cisco_mds.xml
@@ -173,6 +173,7 @@
<action name="off" />
<action name="status" />
<action name="list" />
+ <action name="list-status" />
<action name="monitor" />
<action name="metadata" />
<action name="validate-all" />
diff --git a/tests/data/metadata/fence_cisco_ucs.xml b/tests/data/metadata/fence_cisco_ucs.xml
index c078cba..4f8d0c1 100644
--- a/tests/data/metadata/fence_cisco_ucs.xml
+++ b/tests/data/metadata/fence_cisco_ucs.xml
@@ -140,6 +140,7 @@
<action name="reboot" />
<action name="status" />
<action name="list" />
+ <action name="list-status" />
<action name="monitor" />
<action name="metadata" />
<action name="validate-all" />
diff --git a/tests/data/metadata/fence_docker.xml b/tests/data/metadata/fence_docker.xml
index 37b24c5..54d1ad3 100644
--- a/tests/data/metadata/fence_docker.xml
+++ b/tests/data/metadata/fence_docker.xml
@@ -138,6 +138,7 @@
<action name="reboot" />
<action name="status" />
<action name="list" />
+ <action name="list-status" />
<action name="monitor" />
<action name="metadata" />
<action name="validate-all" />
diff --git a/tests/data/metadata/fence_drac5.xml b/tests/data/metadata/fence_drac5.xml
index f20ec5c..39e85e8 100644
--- a/tests/data/metadata/fence_drac5.xml
+++ b/tests/data/metadata/fence_drac5.xml
@@ -149,6 +149,7 @@
<action name="reboot" />
<action name="status" />
<action name="list" />
+ <action name="list-status" />
<action name="monitor" />
<action name="metadata" />
<action name="validate-all" />
diff --git a/tests/data/metadata/fence_dummy.xml b/tests/data/metadata/fence_dummy.xml
index b0746d6..8405473 100644
--- a/tests/data/metadata/fence_dummy.xml
+++ b/tests/data/metadata/fence_dummy.xml
@@ -85,6 +85,7 @@
<action name="reboot" />
<action name="status" />
<action name="list" />
+ <action name="list-status" />
<action name="monitor" />
<action name="metadata" />
<action name="validate-all" />
diff --git a/tests/data/metadata/fence_eaton_snmp.xml b/tests/data/metadata/fence_eaton_snmp.xml
index fcbd7b6..660c1b6 100644
--- a/tests/data/metadata/fence_eaton_snmp.xml
+++ b/tests/data/metadata/fence_eaton_snmp.xml
@@ -174,6 +174,7 @@
<action name="reboot" />
<action name="status" />
<action name="list" />
+ <action name="list-status" />
<action name="monitor" />
<action name="metadata" />
<action name="validate-all" />
diff --git a/tests/data/metadata/fence_emerson.xml b/tests/data/metadata/fence_emerson.xml
index f0d9288..7eadd41 100644
--- a/tests/data/metadata/fence_emerson.xml
+++ b/tests/data/metadata/fence_emerson.xml
@@ -174,6 +174,7 @@
<action name="reboot" />
<action name="status" />
<action name="list" />
+ <action name="list-status" />
<action name="monitor" />
<action name="metadata" />
<action name="validate-all" />
diff --git a/tests/data/metadata/fence_eps.xml b/tests/data/metadata/fence_eps.xml
index d3ed78d..f9f7f8a 100644
--- a/tests/data/metadata/fence_eps.xml
+++ b/tests/data/metadata/fence_eps.xml
@@ -117,6 +117,7 @@ Agent basically works by connecting to hidden page and pass appropriate argument
<action name="reboot" />
<action name="status" />
<action name="list" />
+ <action name="list-status" />
<action name="monitor" />
<action name="metadata" />
<action name="validate-all" />
diff --git a/tests/data/metadata/fence_hds_cb.xml b/tests/data/metadata/fence_hds_cb.xml
index b2d4747..75bb81d 100644
--- a/tests/data/metadata/fence_hds_cb.xml
+++ b/tests/data/metadata/fence_hds_cb.xml
@@ -145,6 +145,7 @@
<action name="reboot" />
<action name="status" />
<action name="list" />
+ <action name="list-status" />
<action name="monitor" />
<action name="metadata" />
<action name="validate-all" />
diff --git a/tests/data/metadata/fence_hpblade.xml b/tests/data/metadata/fence_hpblade.xml
index b4dfe39..380a185 100644
--- a/tests/data/metadata/fence_hpblade.xml
+++ b/tests/data/metadata/fence_hpblade.xml
@@ -145,6 +145,7 @@
<action name="reboot" />
<action name="status" />
<action name="list" />
+ <action name="list-status" />
<action name="monitor" />
<action name="metadata" />
<action name="validate-all" />
diff --git a/tests/data/metadata/fence_ibmblade.xml b/tests/data/metadata/fence_ibmblade.xml
index cc0e478..d0492b8 100644
--- a/tests/data/metadata/fence_ibmblade.xml
+++ b/tests/data/metadata/fence_ibmblade.xml
@@ -174,6 +174,7 @@
<action name="reboot" />
<action name="status" />
<action name="list" />
+ <action name="list-status" />
<action name="monitor" />
<action name="metadata" />
<action name="validate-all" />
diff --git a/tests/data/metadata/fence_ifmib.xml b/tests/data/metadata/fence_ifmib.xml
index 0646523..a560da8 100644
--- a/tests/data/metadata/fence_ifmib.xml
+++ b/tests/data/metadata/fence_ifmib.xml
@@ -175,6 +175,7 @@ It was written with managed ethernet switches in mind, in order to fence iSCSI S
<action name="off" />
<action name="status" />
<action name="list" />
+ <action name="list-status" />
<action name="monitor" />
<action name="metadata" />
<action name="validate-all" />
diff --git a/tests/data/metadata/fence_ilo_moonshot.xml b/tests/data/metadata/fence_ilo_moonshot.xml
index bd5654b..39b745d 100644
--- a/tests/data/metadata/fence_ilo_moonshot.xml
+++ b/tests/data/metadata/fence_ilo_moonshot.xml
@@ -135,6 +135,7 @@
<action name="reboot" />
<action name="status" />
<action name="list" />
+ <action name="list-status" />
<action name="monitor" />
<action name="metadata" />
<action name="validate-all" />
diff --git a/tests/data/metadata/fence_intelmodular.xml b/tests/data/metadata/fence_intelmodular.xml
index 9755263..8224858 100644
--- a/tests/data/metadata/fence_intelmodular.xml
+++ b/tests/data/metadata/fence_intelmodular.xml
@@ -176,6 +176,7 @@ Note: Since firmware update version 2.7, SNMP v2 write support is removed, and r
<action name="reboot" />
<action name="status" />
<action name="list" />
+ <action name="list-status" />
<action name="monitor" />
<action name="metadata" />
<action name="validate-all" />
diff --git a/tests/data/metadata/fence_ipdu.xml b/tests/data/metadata/fence_ipdu.xml
index 185e3fc..22756e9 100644
--- a/tests/data/metadata/fence_ipdu.xml
+++ b/tests/data/metadata/fence_ipdu.xml
@@ -174,6 +174,7 @@
<action name="reboot" />
<action name="status" />
<action name="list" />
+ <action name="list-status" />
<action name="monitor" />
<action name="metadata" />
<action name="validate-all" />
diff --git a/tests/data/metadata/fence_ldom.xml b/tests/data/metadata/fence_ldom.xml
index 190b9ae..df8897c 100644
--- a/tests/data/metadata/fence_ldom.xml
+++ b/tests/data/metadata/fence_ldom.xml
@@ -137,6 +137,7 @@ Very useful parameter is -c (or cmd_prompt in stdin mode). This must be set to s
<action name="reboot" />
<action name="status" />
<action name="list" />
+ <action name="list-status" />
<action name="monitor" />
<action name="metadata" />
<action name="validate-all" />
diff --git a/tests/data/metadata/fence_lpar.xml b/tests/data/metadata/fence_lpar.xml
index f23f180..967815e 100644
--- a/tests/data/metadata/fence_lpar.xml
+++ b/tests/data/metadata/fence_lpar.xml
@@ -148,6 +148,7 @@
<action name="reboot" />
<action name="status" />
<action name="list" />
+ <action name="list-status" />
<action name="monitor" />
<action name="metadata" />
<action name="validate-all" />
diff --git a/tests/data/metadata/fence_netio.xml b/tests/data/metadata/fence_netio.xml
index 72cfa1c..bcaac43 100644
--- a/tests/data/metadata/fence_netio.xml
+++ b/tests/data/metadata/fence_netio.xml
@@ -115,6 +115,7 @@
<action name="reboot" />
<action name="status" />
<action name="list" />
+ <action name="list-status" />
<action name="monitor" />
<action name="metadata" />
<action name="validate-all" />
diff --git a/tests/data/metadata/fence_ovh.xml b/tests/data/metadata/fence_ovh.xml
index 506bb8c..19df958 100644
--- a/tests/data/metadata/fence_ovh.xml
+++ b/tests/data/metadata/fence_ovh.xml
@@ -94,6 +94,7 @@
<action name="off" />
<action name="reboot" />
<action name="list" />
+ <action name="list-status" />
<action name="monitor" />
<action name="metadata" />
<action name="validate-all" />
diff --git a/tests/data/metadata/fence_pve.xml b/tests/data/metadata/fence_pve.xml
index 27873f6..838f12c 100644
--- a/tests/data/metadata/fence_pve.xml
+++ b/tests/data/metadata/fence_pve.xml
@@ -115,6 +115,7 @@
<action name="reboot" />
<action name="status" />
<action name="list" />
+ <action name="list-status" />
<action name="monitor" />
<action name="metadata" />
<action name="validate-all" />
diff --git a/tests/data/metadata/fence_raritan.xml b/tests/data/metadata/fence_raritan.xml
index 4fd4d46..d66fd55 100644
--- a/tests/data/metadata/fence_raritan.xml
+++ b/tests/data/metadata/fence_raritan.xml
@@ -115,6 +115,7 @@
<action name="reboot" />
<action name="status" />
<action name="list" />
+ <action name="list-status" />
<action name="monitor" />
<action name="metadata" />
<action name="validate-all" />
diff --git a/tests/data/metadata/fence_rhevm.xml b/tests/data/metadata/fence_rhevm.xml
index b4dd709..1b21e44 100644
--- a/tests/data/metadata/fence_rhevm.xml
+++ b/tests/data/metadata/fence_rhevm.xml
@@ -140,6 +140,7 @@
<action name="reboot" />
<action name="status" />
<action name="list" />
+ <action name="list-status" />
<action name="monitor" />
<action name="metadata" />
<action name="validate-all" />
diff --git a/tests/data/metadata/fence_sanbox2.xml b/tests/data/metadata/fence_sanbox2.xml
index 5a8a0f0..18e7c31 100644
--- a/tests/data/metadata/fence_sanbox2.xml
+++ b/tests/data/metadata/fence_sanbox2.xml
@@ -119,6 +119,7 @@
<action name="off" />
<action name="status" />
<action name="list" />
+ <action name="list-status" />
<action name="monitor" />
<action name="metadata" />
<action name="validate-all" />
diff --git a/tests/data/metadata/fence_tripplite_snmp.xml b/tests/data/metadata/fence_tripplite_snmp.xml
index 2b21998..fc98bd4 100644
--- a/tests/data/metadata/fence_tripplite_snmp.xml
+++ b/tests/data/metadata/fence_tripplite_snmp.xml
@@ -174,6 +174,7 @@
<action name="reboot" />
<action name="status" />
<action name="list" />
+ <action name="list-status" />
<action name="monitor" />
<action name="metadata" />
<action name="validate-all" />
diff --git a/tests/data/metadata/fence_virsh.xml b/tests/data/metadata/fence_virsh.xml
index 04003cd..e03b2b9 100644
--- a/tests/data/metadata/fence_virsh.xml
+++ b/tests/data/metadata/fence_virsh.xml
@@ -147,6 +147,7 @@ By default, virsh needs root account to do properly work. So you must allow ssh
<action name="reboot" />
<action name="status" />
<action name="list" />
+ <action name="list-status" />
<action name="monitor" />
<action name="metadata" />
<action name="validate-all" />
diff --git a/tests/data/metadata/fence_vmware_soap.xml b/tests/data/metadata/fence_vmware_soap.xml
index 2dca8bd..fdf846e 100644
--- a/tests/data/metadata/fence_vmware_soap.xml
+++ b/tests/data/metadata/fence_vmware_soap.xml
@@ -137,6 +137,7 @@ Name of virtual machine (-n / port) has to be used in inventory path format (e.g
<action name="reboot" />
<action name="status" />
<action name="list" />
+ <action name="list-status" />
<action name="monitor" />
<action name="metadata" />
<action name="validate-all" />
diff --git a/tests/data/metadata/fence_wti.xml b/tests/data/metadata/fence_wti.xml
index ed3ea9d..83d5f78 100644
--- a/tests/data/metadata/fence_wti.xml
+++ b/tests/data/metadata/fence_wti.xml
@@ -140,6 +140,7 @@
<action name="reboot" />
<action name="status" />
<action name="list" />
+ <action name="list-status" />
<action name="monitor" />
<action name="metadata" />
<action name="validate-all" />
diff --git a/tests/data/metadata/fence_xenapi.xml b/tests/data/metadata/fence_xenapi.xml
index 909e503..fcfaf3a 100644
--- a/tests/data/metadata/fence_xenapi.xml
+++ b/tests/data/metadata/fence_xenapi.xml
@@ -95,6 +95,7 @@
<action name="reboot" />
<action name="status" />
<action name="list" />
+ <action name="list-status" />
<action name="monitor" />
<action name="metadata" />
<action name="validate-all" />
diff --git a/tests/data/metadata/fence_zvmip.xml b/tests/data/metadata/fence_zvmip.xml
index d800c13..f698dfe 100644
--- a/tests/data/metadata/fence_zvmip.xml
+++ b/tests/data/metadata/fence_zvmip.xml
@@ -132,6 +132,7 @@ Where XXXXXXX is the name of the virtual machine used in the authuser field of t
<action name="reboot" />
<action name="status" />
<action name="list" />
+ <action name="list-status" />
<action name="monitor" />
<action name="metadata" />
<action name="validate-all" />
More information about the cluster-commits
mailing list