fence-agents: master - fencing: Correct exit codes for status operation

Marek Grác marx at fedoraproject.org
Mon Oct 19 12:52:08 UTC 2009


Gitweb:        http://git.fedorahosted.org/git/fence-agents.git?p=fence-agents.git;a=commitdiff;h=19c01e65ffe8f0f190682c10347a62d4906f70b6
Commit:        19c01e65ffe8f0f190682c10347a62d4906f70b6
Parent:        e0fae3825aa2aff58cda631e77ea958c02cb1ce8
Author:        Marek 'marx' Grac <mgrac at redhat.com>
AuthorDate:    Mon Oct 19 14:47:12 2009 +0200
Committer:     Marek 'marx' Grac <mgrac at redhat.com>
CommitterDate: Mon Oct 19 14:47:12 2009 +0200

fencing: Correct exit codes for status operation

According to standard operation status should return 0 (if ON) and 2 (if OFF).
In all other cases if operation was succesfull then agent return 0.
---
 fence/agents/alom/fence_alom.py                 |    4 ++-
 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/drac5/fence_drac5.py               |    4 ++-
 fence/agents/eps/fence_eps.py                   |    4 ++-
 fence/agents/ibmblade/fence_ibmblade.py         |    3 +-
 fence/agents/ifmib/fence_ifmib.py               |    4 ++-
 fence/agents/ilo/fence_ilo.py                   |    4 ++-
 fence/agents/ilo_mp/fence_ilo_mp.py             |    4 ++-
 fence/agents/intelmodular/fence_intelmodular.py |    4 ++-
 fence/agents/ipmilan/ipmilan.c                  |   28 ++++++++++++++++++++--
 fence/agents/ldom/fence_ldom.py                 |    6 +++-
 fence/agents/lib/fencing.py.py                  |   12 +++++++--
 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             |    4 ++-
 fence/agents/wti/fence_wti.py                   |    4 ++-
 25 files changed, 121 insertions(+), 34 deletions(-)

diff --git a/fence/agents/alom/fence_alom.py b/fence/agents/alom/fence_alom.py
index 4fffa0a..8793e92 100644
--- a/fence/agents/alom/fence_alom.py
+++ b/fence/agents/alom/fence_alom.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
 	try:
@@ -75,5 +75,7 @@ def main():
 	except pexpect.ExceptionPexpect:
 		pass	                                         
 
+	sys.exit(result)
+
 if __name__ == "__main__":
 	main()
diff --git a/fence/agents/apc/fence_apc.py b/fence/agents/apc/fence_apc.py
index 685a154..92b109c 100755
--- a/fence/agents/apc/fence_apc.py
+++ b/fence/agents/apc/fence_apc.py
@@ -212,7 +212,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
@@ -228,6 +228,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 7e8118e..0c36b66 100644
--- 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 7325ee6..b625968 100644
--- a/fence/agents/baytech/fence_baytech.pl
+++ b/fence/agents/baytech/fence_baytech.pl
@@ -570,7 +570,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 d55f31a..414c260 100644
--- a/fence/agents/bladecenter/fence_bladecenter.py
+++ b/fence/agents/bladecenter/fence_bladecenter.py
@@ -110,7 +110,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
@@ -122,6 +122,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 11382dc..6915f57 100644
--- a/fence/agents/bullpap/fence_bullpap.pl
+++ b/fence/agents/bullpap/fence_bullpap.pl
@@ -297,6 +297,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"
@@ -341,6 +342,9 @@ elsif (/status/)
 	get_power_state $host,$domain,$login,$passwd;
 	$state=$_;
 	$success = 1 if defined $state;
+	if ($state eq "OFF") {
+		$exit_code = 2;
+	}
 }
 else
 {
@@ -351,7 +355,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 d007b72..bd8d858 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 78c4735..5cc1a52 100644
--- a/fence/agents/drac/fence_drac.pl
+++ b/fence/agents/drac/fence_drac.pl
@@ -445,7 +445,7 @@ sub do_action
 		if ($status =~ /^on$/i)
 		{
 			msg "success: already on";
-			return;
+			return 0;
 		}
 			
 		set_power_status on;
@@ -458,7 +458,7 @@ sub do_action
 		if ($status =~ /^off$/i)
 		{
 			msg "success: already off";
-			return;
+			return 0;
 		}
 
 		set_power_status off;
@@ -482,12 +482,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;
 }
 
 #
@@ -651,10 +658,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/drac5/fence_drac5.py b/fence/agents/drac5/fence_drac5.py
index d7fbdaa..ab5056b 100644
--- a/fence/agents/drac5/fence_drac5.py
+++ b/fence/agents/drac5/fence_drac5.py
@@ -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 604a481..d9118a7 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 4ff334e..4548a29 100644
--- a/fence/agents/ibmblade/fence_ibmblade.py
+++ b/fence/agents/ibmblade/fence_ibmblade.py
@@ -74,7 +74,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/ifmib/fence_ifmib.py b/fence/agents/ifmib/fence_ifmib.py
index 7645afa..159554e 100644
--- a/fence/agents/ifmib/fence_ifmib.py
+++ b/fence/agents/ifmib/fence_ifmib.py
@@ -131,7 +131,9 @@ 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 574f944..0ff40d7 100755
--- a/fence/agents/ilo/fence_ilo.py
+++ b/fence/agents/ilo/fence_ilo.py
@@ -105,7 +105,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 dfd4c1e..2ddd733 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")
@@ -73,6 +73,8 @@ def main():
 		pass
 	except pexpect.ExceptionPexpect:
 		pass
+	
+	sys.exit(result)
 
 if __name__ == "__main__":
 	main()
diff --git a/fence/agents/intelmodular/fence_intelmodular.py b/fence/agents/intelmodular/fence_intelmodular.py
index a03e4a6..c943c1e 100644
--- a/fence/agents/intelmodular/fence_intelmodular.py
+++ b/fence/agents/intelmodular/fence_intelmodular.py
@@ -80,7 +80,9 @@ 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/ipmilan/ipmilan.c b/fence/agents/ipmilan/ipmilan.c
index e001f3d..ad35001 100644
--- a/fence/agents/ipmilan/ipmilan.c
+++ b/fence/agents/ipmilan/ipmilan.c
@@ -34,6 +34,19 @@
 
 #define DEFAULT_METHOD "onoff"
 
+/* We should follow FenceAgentsAPI standard*/
+#define ERR_OFF_SUCCESSFUL 0
+#define ERR_OFF_FAIL       1
+
+#define ERR_ON_SUCCESSFUL 0
+#define ERR_ON_FAIL       1
+
+#define ERR_STATUS_ON     0
+#define ERR_STATUS_FAIL   1
+#define ERR_STATUS_OFF    2
+
+#define ERR_OK            0
+
 #define log(lvl, fmt, args...) fprintf(stderr, fmt, ##args)
 #include <libgen.h>
 #include "copyright.cf"
@@ -844,6 +857,7 @@ main(int argc, char **argv)
 	int timeout=DEFAULT_TIMEOUT;
 	int cipher=-1;
 	int print_final_status=1;
+	int translated_ret = -1;
 
 	memset(ip, 0, sizeof(ip));
 	memset(authtype, 0, sizeof(authtype));
@@ -1013,19 +1027,22 @@ main(int argc, char **argv)
 		} else {
 			/* Original onoff method */
 			ret = ipmi_off(i);
-			if (ret != 0)
+			translated_ret = (ret==0?ERR_OFF_SUCCESSFUL:ERR_OFF_FAIL);
+			if (ret != 0) {
 				goto out;
+			}
 			ret = ipmi_on(i);
 		}
 	} else if (!strcasecmp(op, "on")) {
 		printf("Powering on machine @ IPMI:%s...", ip);
 		fflush(stdout);
 		ret = ipmi_on(i);
-
+		translated_ret = (ret==0?ERR_ON_SUCCESSFUL:ERR_ON_FAIL);
 	} else if (!strcasecmp(op, "off")) {
 		printf("Powering off machine @ IPMI:%s...", ip);
 		fflush(stdout);
 		ret = ipmi_off(i);
+		translated_ret = (ret==0?ERR_ON_SUCCESSFUL:ERR_ON_FAIL);
 	} else if (!strcasecmp(op, "status") || !strcasecmp(op, "monitor")) {
 		printf("Getting status of IPMI:%s...",ip);
 		fflush(stdout);
@@ -1034,26 +1051,31 @@ main(int argc, char **argv)
 		case STATE_ON:
 		  if (!strcasecmp(op, "status"))
 			    printf("Chassis power = On\n");
+			translated_ret = ERR_STATUS_ON;
 			ret = 0;
 			break;
 		case STATE_OFF:
 		  if (!strcasecmp(op, "status"))
 			    printf("Chassis power = Off\n");
+			translated_ret = ERR_STATUS_OFF;
 			ret = 0;
 			break;
 		default:
 		  if (!strcasecmp(op, "status"))
 			    printf("Chassis power = Unknown\n");
+			translated_ret = ERR_STATUS_FAIL;
 			ret = 1;
 			break;
 		}
 	} else if (!strcasecmp(op, "list")) {
 	  printf("%s\n","N/A");
 	  ret=0;
+	  translated_ret = ERR_OK;
 	  print_final_status=0;
 	} else if (!strcasecmp(op, "metadata")) {
 	  print_xml_metadata(pname);
 	  ret=0;
+	  translated_ret = ERR_OK;
 	  print_final_status=0;
 	}
 
@@ -1068,5 +1090,5 @@ out:
 	  else
 	    printf("Failed\n");
 	}
-	return ret;
+	return translated_ret;
 }
diff --git a/fence/agents/ldom/fence_ldom.py b/fence/agents/ldom/fence_ldom.py
index 4806982..94d1429 100644
--- a/fence/agents/ldom/fence_ldom.py
+++ b/fence/agents/ldom/fence_ldom.py
@@ -105,7 +105,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
@@ -116,7 +116,9 @@ def main():
 	except exceptions.OSError:
 		pass
 	except pexpect.ExceptionPexpect:
-		pass	
+		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 a099a0a..566cebf 100644
--- a/fence/agents/lib/fencing.py.py
+++ b/fence/agents/lib/fencing.py.py
@@ -363,7 +363,7 @@ def atexit_handler():
 		os.close(1)
 	except IOError:
 		sys.stderr.write("%s failed to close standard output\n"%(sys.argv[0]))
-		sys.exit(1)
+		sys.exit(EC_GENERIC_ERROR)
 
 def version(command, release, build_date, copyright_notice):
 	print command, " ", release, " ", build_date
@@ -374,7 +374,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 = {
@@ -387,7 +387,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
@@ -678,6 +678,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")):
@@ -744,8 +746,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 451ca93..37ff2b4 100644
--- a/fence/agents/lpar/fence_lpar.py
+++ b/fence/agents/lpar/fence_lpar.py
@@ -161,7 +161,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
@@ -174,5 +174,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 16457a9..583a84a 100644
--- a/fence/agents/rsa/fence_rsa.py
+++ b/fence/agents/rsa/fence_rsa.py
@@ -62,7 +62,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
@@ -73,7 +73,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 1df0374..77ac26b 100644
--- a/fence/agents/rsb/fence_rsb.py
+++ b/fence/agents/rsb/fence_rsb.py
@@ -56,6 +56,9 @@ def main():
   POWER_STATUS = 2
   POWER_REBOOT = 3
 
+  STATUS_ON = 0
+  STATUS_OFF = 2
+
   power_command_issued = 0 
 
   address = ""
@@ -69,6 +72,8 @@ def main():
 
   standard_err = 2
 
+  result = 0
+
   #set up regex list
   USERNAME = 0
   PASSWORD = 1
@@ -368,8 +373,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)
@@ -382,6 +389,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 d1e65cf..38adaa2 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 7ef71a3..7d883dd 100644
--- a/fence/agents/virsh/fence_virsh.py
+++ b/fence/agents/virsh/fence_virsh.py
@@ -82,7 +82,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:
@@ -93,5 +93,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 63e9360..b7a8eeb 100644
--- a/fence/agents/vmware/fence_vmware.py
+++ b/fence/agents/vmware/fence_vmware.py
@@ -310,7 +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 514bc9d..f5eb169 100644
--- a/fence/agents/wti/fence_wti.py
+++ b/fence/agents/wti/fence_wti.py
@@ -130,7 +130,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
@@ -142,6 +142,8 @@ def main():
 		pass
 	except pexpect.ExceptionPexpect:
 		pass
+		
+	sys.exit(result)
 
 if __name__ == "__main__":
 	main()


More information about the cluster-commits mailing list