Gitweb:
http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=...
Commit: bd170f06917930694790c2a69281cb6110902293
Parent: c774ea0aabf408e80e1afd9f2caf40b4834c6a5e
Author: Marek 'marx' Grac <mgrac(a)redhat.com>
AuthorDate: Tue Apr 20 19:07:32 2010 +0200
Committer: Marek 'marx' Grac <mgrac(a)redhat.com>
CommitterDate: Tue Apr 20 19:07:32 2010 +0200
fencing: Correct return codes for operation 'status'
Fixes all perl + python based fence agents (except fence_scsi)
Resolves: rhbz#583034 (partially)
---
fence/agents/apc/fence_apc.py | 4 +++-
fence/agents/apc_snmp/fence_apc_snmp.py | 3 ++-
fence/agents/baytech/fence_baytech.pl | 8 +++++++-
fence/agents/bladecenter/fence_bladecenter.py | 4 +++-
fence/agents/bullpap/fence_bullpap.pl | 6 +++++-
fence/agents/cisco_mds/fence_cisco_mds.py | 4 +++-
fence/agents/drac/fence_drac.pl | 17 ++++++++++++-----
fence/agents/drac/fence_drac5.py | 6 ++++--
fence/agents/eps/fence_eps.py | 4 +++-
fence/agents/ibmblade/fence_ibmblade.py | 3 ++-
fence/agents/ilo/fence_ilo.py | 4 +++-
fence/agents/ilo_mp/fence_ilo_mp.py | 4 +++-
fence/agents/lib/fencing.py.py | 10 ++++++++--
fence/agents/lpar/fence_lpar.py | 3 ++-
fence/agents/rsa/fence_rsa.py | 6 ++++--
fence/agents/rsb/fence_rsb.py | 8 ++++++++
fence/agents/sanbox2/fence_sanbox2.py | 4 +++-
fence/agents/virsh/fence_virsh.py | 3 ++-
fence/agents/vmware/fence_vmware.py | 3 ++-
fence/agents/wti/fence_wti.py | 4 +++-
20 files changed, 82 insertions(+), 26 deletions(-)
diff --git a/fence/agents/apc/fence_apc.py b/fence/agents/apc/fence_apc.py
index 3a8c194..2985072 100755
--- a/fence/agents/apc/fence_apc.py
+++ b/fence/agents/apc/fence_apc.py
@@ -213,7 +213,7 @@ def main():
## Operate the fencing device
####
conn = fence_login(options)
- fence_action(conn, options, set_power_status, get_power_status, get_power_status)
+ result = fence_action(conn, options, set_power_status, get_power_status,
get_power_status)
##
## Logout from system
@@ -229,6 +229,8 @@ def main():
pass
except pexpect.ExceptionPexpect:
pass
+
+ sys.exit(result)
if __name__ == "__main__":
main()
diff --git a/fence/agents/apc_snmp/fence_apc_snmp.py
b/fence/agents/apc_snmp/fence_apc_snmp.py
index 943902c..d2d67b2 100755
--- a/fence/agents/apc_snmp/fence_apc_snmp.py
+++ b/fence/agents/apc_snmp/fence_apc_snmp.py
@@ -192,7 +192,8 @@ def main():
show_docs(options)
# Operate the fencing device
- fence_action(FencingSnmp(options), options, set_power_status, get_power_status,
get_outlets_status)
+ result = fence_action(FencingSnmp(options), options, set_power_status, get_power_status,
get_outlets_status)
+ sys.exit(result)
if __name__ == "__main__":
main()
diff --git a/fence/agents/baytech/fence_baytech.pl
b/fence/agents/baytech/fence_baytech.pl
index 39d91da..1549430 100755
--- a/fence/agents/baytech/fence_baytech.pl
+++ b/fence/agents/baytech/fence_baytech.pl
@@ -583,7 +583,13 @@ elsif ($action =~ /status/i)
{
print "Outlet '$bt_name' is $bt_state and is ".
(($bt_locked eq "")?"not ":"")."Locked\n";
- $exit=0;
+
+ if ($bt_state =~ /on/i)
+ {
+ $exit=0;
+ } else {
+ $exit=2;
+ }
}
elsif ($bt_locked ne "")
{
diff --git a/fence/agents/bladecenter/fence_bladecenter.py
b/fence/agents/bladecenter/fence_bladecenter.py
index b5b2238..0cc189c 100755
--- a/fence/agents/bladecenter/fence_bladecenter.py
+++ b/fence/agents/bladecenter/fence_bladecenter.py
@@ -111,7 +111,7 @@ def main():
## Operate the fencing device
######
conn = fence_login(options)
- fence_action(conn, options, set_power_status, get_power_status, get_blades_list)
+ result = fence_action(conn, options, set_power_status, get_power_status,
get_blades_list)
##
## Logout from system
@@ -123,6 +123,8 @@ def main():
pass
except pexpect.ExceptionPexpect:
pass
+
+ sys.exit(result)
if __name__ == "__main__":
main()
diff --git a/fence/agents/bullpap/fence_bullpap.pl
b/fence/agents/bullpap/fence_bullpap.pl
index a53c8e1..a63b19c 100755
--- a/fence/agents/bullpap/fence_bullpap.pl
+++ b/fence/agents/bullpap/fence_bullpap.pl
@@ -309,6 +309,7 @@ elsif (/^status$/i) { $action = "status"; }
#
$success=0;
$_ = $action;
+my $exit_code=0;
if (/(on|off)/)
{
my $timeout = 120; # 120 = max of (60, 120). Max timeout for "on"
@@ -353,6 +354,9 @@ elsif (/status/)
get_power_state $host,$domain,$login,$passwd;
$state=$_;
$success = 1 if defined $state;
+ if ($state eq "OFF") {
+ $exit_code = 2;
+ }
}
else
{
@@ -363,7 +367,7 @@ if ($success)
{
print "success: domain $domain $action". ((defined $state) ? ":
$state":"")
."\n" unless defined $quiet;
- exit 0;
+ exit $exit_code;
}
else
{
diff --git a/fence/agents/cisco_mds/fence_cisco_mds.py
b/fence/agents/cisco_mds/fence_cisco_mds.py
index cd25e96..032983d 100644
--- a/fence/agents/cisco_mds/fence_cisco_mds.py
+++ b/fence/agents/cisco_mds/fence_cisco_mds.py
@@ -113,7 +113,9 @@ def main():
port_oid=cisco_port2oid(options["-n"])
# Operate the fencing device
- fence_action(FencingSnmp(options), options, set_power_status, get_power_status,
get_outlets_status)
+ result = fence_action(FencingSnmp(options), options, set_power_status, get_power_status,
get_outlets_status)
+
+ sys.exit(result)
if __name__ == "__main__":
main()
diff --git a/fence/agents/drac/fence_drac.pl b/fence/agents/drac/fence_drac.pl
index 3d8c497..e6dfbd9 100755
--- a/fence/agents/drac/fence_drac.pl
+++ b/fence/agents/drac/fence_drac.pl
@@ -457,7 +457,7 @@ sub do_action
if ($status =~ /^on$/i)
{
msg "success: already on";
- return;
+ return 0;
}
set_power_status on;
@@ -470,7 +470,7 @@ sub do_action
if ($status =~ /^off$/i)
{
msg "success: already off";
- return;
+ return 0;
}
set_power_status off;
@@ -494,12 +494,19 @@ sub do_action
elsif ($action =~ /^status$/i)
{
msg "status: $status";
- return;
+ if ($status =~ /on/i)
+ {
+ return 0;
+ } else {
+ return 2;
+ }
}
else
{
fail "failed: unrecognised action: '$action'";
}
+
+ return 0;
}
#
@@ -663,10 +670,10 @@ elsif ($drac_version eq $DRAC_VERSION_MC)
unless defined $modulename;
}
-do_action;
+my $res = do_action;
logout;
-exit 0;
+exit $res;
diff --git a/fence/agents/drac/fence_drac5.py b/fence/agents/drac/fence_drac5.py
index d93501a..11d8434 100755
--- a/fence/agents/drac/fence_drac5.py
+++ b/fence/agents/drac/fence_drac5.py
@@ -98,7 +98,7 @@ def main():
options["-c"] = "\$"
show_docs(options)
-
+
##
## Operate the fencing device
######
@@ -115,7 +115,7 @@ def main():
## Assume this is DRAC 5 by default as we don't want to break anything
options["model"]="DRAC 5"
- fence_action(conn, options, set_power_status, get_power_status, get_list_devices)
+ result = fence_action(conn, options, set_power_status, get_power_status,
get_list_devices)
##
## Logout from system
@@ -127,6 +127,8 @@ def main():
pass
except pexpect.ExceptionPexpect:
pass
+
+ sys.exit(result)
if __name__ == "__main__":
main()
diff --git a/fence/agents/eps/fence_eps.py b/fence/agents/eps/fence_eps.py
index 1660931..daec240 100644
--- a/fence/agents/eps/fence_eps.py
+++ b/fence/agents/eps/fence_eps.py
@@ -110,7 +110,9 @@ def main():
show_docs(options)
#Run fence action. Conn is None, beacause we always need open new http connection
- fence_action(None, options, set_power_status, get_power_status,get_power_status)
+ result = fence_action(None, options, set_power_status,
get_power_status,get_power_status)
+
+ sys.exit(result)
if __name__ == "__main__":
main()
diff --git a/fence/agents/ibmblade/fence_ibmblade.py
b/fence/agents/ibmblade/fence_ibmblade.py
index 08022ea..a0d0884 100644
--- a/fence/agents/ibmblade/fence_ibmblade.py
+++ b/fence/agents/ibmblade/fence_ibmblade.py
@@ -73,7 +73,8 @@ def main():
show_docs(options)
# Operate the fencing device
- fence_action(FencingSnmp(options), options, set_power_status, get_power_status,
get_outlets_status)
+ result = fence_action(FencingSnmp(options), options, set_power_status, get_power_status,
get_outlets_status)
+ sys.exit(result)
if __name__ == "__main__":
main()
diff --git a/fence/agents/ilo/fence_ilo.py b/fence/agents/ilo/fence_ilo.py
index cf2993d..fcf4b0c 100755
--- a/fence/agents/ilo/fence_ilo.py
+++ b/fence/agents/ilo/fence_ilo.py
@@ -107,7 +107,9 @@ def main():
##
## Fence operations
####
- fence_action(conn, options, set_power_status, get_power_status, None)
+ result = fence_action(conn, options, set_power_status, get_power_status, None)
+
+ sys.exit(result)
if __name__ == "__main__":
main()
diff --git a/fence/agents/ilo_mp/fence_ilo_mp.py b/fence/agents/ilo_mp/fence_ilo_mp.py
index 98d7d69..c1ef5da 100644
--- a/fence/agents/ilo_mp/fence_ilo_mp.py
+++ b/fence/agents/ilo_mp/fence_ilo_mp.py
@@ -65,7 +65,7 @@ def main():
##
## Fence operations
####
- fence_action(conn, options, set_power_status, get_power_status)
+ result = fence_action(conn, options, set_power_status, get_power_status)
try:
conn.send("exit\r\n")
@@ -74,5 +74,7 @@ def main():
except pexpect.ExceptionPexpect:
pass
+ sys.exit(result)
+
if __name__ == "__main__":
main()
diff --git a/fence/agents/lib/fencing.py.py b/fence/agents/lib/fencing.py.py
index b54d1a8..a7647f7 100644
--- a/fence/agents/lib/fencing.py.py
+++ b/fence/agents/lib/fencing.py.py
@@ -387,7 +387,7 @@ def fail_usage(message = ""):
if len(message) > 0:
sys.stderr.write(message+"\n")
sys.stderr.write("Please use '-h' for usage\n")
- sys.exit(EC_BAD_ARGS)
+ sys.exit(EC_GENERIC_ERROR)
def fail(error_code):
message = {
@@ -400,7 +400,7 @@ def fail(error_code):
EC_STATUS_HMC : "Failed: Either unable to obtaion correct plug status, partition
is not available or incorrect HMC version used"
}[error_code] + "\n"
sys.stderr.write(message)
- sys.exit(error_code)
+ sys.exit(EC_GENERIC_ERROR)
def usage(avail_opt):
global all_opt
@@ -703,6 +703,8 @@ def show_docs(options, docs = None):
sys.exit(0)
def fence_action(tn, options, set_power_fn, get_power_fn, get_outlet_list = None):
+ result = 0
+
## Process options that manipulate fencing device
#####
if (options["-o"] == "list") and (0 ==
options["device_opt"].count("port")) and (0 ==
options["device_opt"].count("partition")):
@@ -784,8 +786,12 @@ 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()
+ if status.upper() == "OFF":
+ result = 2
elif options["-o"] == "monitor":
1
+
+ return result
def fence_login(options):
force_ipvx=""
diff --git a/fence/agents/lpar/fence_lpar.py b/fence/agents/lpar/fence_lpar.py
index 3a22edc..a2b672c 100755
--- a/fence/agents/lpar/fence_lpar.py
+++ b/fence/agents/lpar/fence_lpar.py
@@ -168,7 +168,7 @@ def main():
## Operate the fencing device
####
conn = fence_login(options)
- fence_action(conn, options, set_power_status, get_power_status, get_lpar_list)
+ result = fence_action(conn, options, set_power_status, get_power_status, get_lpar_list)
##
## Logout from system
@@ -181,5 +181,6 @@ def main():
except pexpect.ExceptionPexpect:
pass
+ sys.exit(result)
if __name__ == "__main__":
main()
diff --git a/fence/agents/rsa/fence_rsa.py b/fence/agents/rsa/fence_rsa.py
index ed794fa..e9eac5f 100755
--- a/fence/agents/rsa/fence_rsa.py
+++ b/fence/agents/rsa/fence_rsa.py
@@ -64,7 +64,7 @@ def main():
## Operate the fencing device
######
conn = fence_login(options)
- fence_action(conn, options, set_power_status, get_power_status, None)
+ result = fence_action(conn, options, set_power_status, get_power_status, None)
##
## Logout from system
@@ -75,7 +75,9 @@ def main():
except exceptions.OSError:
pass
except pexpect.ExceptionPexpect:
- pass
+ pass
+
+ sys.exit(result)
if __name__ == "__main__":
main()
diff --git a/fence/agents/rsb/fence_rsb.py b/fence/agents/rsb/fence_rsb.py
index 25a2826..a98c0f5 100755
--- a/fence/agents/rsb/fence_rsb.py
+++ b/fence/agents/rsb/fence_rsb.py
@@ -60,6 +60,9 @@ def main():
POWER_STATUS = 2
POWER_REBOOT = 3
+ STATUS_ON = 0
+ STATUS_OFF = 2
+
power_command_issued = 0
address = ""
@@ -73,6 +76,8 @@ def main():
standard_err = 2
+ result = 0
+
completed_action = 0
#set up regex list
@@ -382,8 +387,10 @@ def main():
print "Determining power state..."
if power_state == 1:
print "Server is On"
+ result = STATUS_ON
elif power_state == 0:
print "Server is Off"
+ result = STATUS_OFF
else:
os.write(standard_err, ("FENCE: Cannot determine power state: %s" %
buf))
sys.exit(1)
@@ -397,6 +404,7 @@ def main():
sock.write("\r")
sock.close()
+ sys.exit(result)
if __name__ == "__main__":
main()
diff --git a/fence/agents/sanbox2/fence_sanbox2.py
b/fence/agents/sanbox2/fence_sanbox2.py
index 4581974..12c0e2e 100644
--- a/fence/agents/sanbox2/fence_sanbox2.py
+++ b/fence/agents/sanbox2/fence_sanbox2.py
@@ -139,7 +139,7 @@ def main():
sys.stderr.write("Failed: Unable to switch to admin section\n")
sys.exit(EC_GENERIC_ERROR)
- fence_action(conn, options, set_power_status, get_power_status, get_list_devices)
+ result = fence_action(conn, options, set_power_status, get_power_status,
get_list_devices)
##
## Logout from system
@@ -153,5 +153,7 @@ def main():
except pexpect.ExceptionPexpect:
pass
+ sys.exit(result)
+
if __name__ == "__main__":
main()
diff --git a/fence/agents/virsh/fence_virsh.py b/fence/agents/virsh/fence_virsh.py
index 7913cd2..9cb5a12 100644
--- a/fence/agents/virsh/fence_virsh.py
+++ b/fence/agents/virsh/fence_virsh.py
@@ -83,7 +83,7 @@ def main():
## Operate the fencing device
conn = fence_login(options)
- fence_action(conn, options, set_power_status, get_power_status, get_outlets_status)
+ result = fence_action(conn, options, set_power_status, get_power_status,
get_outlets_status)
## Logout from system
try:
@@ -94,5 +94,6 @@ def main():
except pexpect.ExceptionPexpect:
pass
+ sys.exit(result)
if __name__ == "__main__":
main()
diff --git a/fence/agents/vmware/fence_vmware.py b/fence/agents/vmware/fence_vmware.py
index 7e51df5..a5e2277 100644
--- a/fence/agents/vmware/fence_vmware.py
+++ b/fence/agents/vmware/fence_vmware.py
@@ -310,8 +310,9 @@ def main():
fail_usage("Unsupported version of vmrun command! You must use at least version
%d!"%(VMRUN_MINIMUM_REQUIRED_VERSION))
# Operate the fencing device
- fence_action(None, options, set_power_status, get_power_status, get_outlets_status)
+ result = fence_action(None, options, set_power_status, get_power_status,
get_outlets_status)
+ sys.exit(result)
if __name__ == "__main__":
main()
diff --git a/fence/agents/wti/fence_wti.py b/fence/agents/wti/fence_wti.py
index 888695f..3198aeb 100755
--- a/fence/agents/wti/fence_wti.py
+++ b/fence/agents/wti/fence_wti.py
@@ -131,7 +131,7 @@ def main():
else:
conn = fence_login(options)
- fence_action(conn, options, set_power_status, get_power_status, get_power_status)
+ result = fence_action(conn, options, set_power_status, get_power_status,
get_power_status)
##
## Logout from system
@@ -143,6 +143,8 @@ def main():
pass
except pexpect.ExceptionPexpect:
pass
+
+ sys.exit(result)
if __name__ == "__main__":
main()