File 0003-fence_gce-add-power-cycle-as-default-method.patch of Package fence-agents.10129

From 8ae1af8068d1718a861a25bf954e14392384fa55 Mon Sep 17 00:00:00 2001
From: Helen Koike <helen.koike@collabora.com>
Date: Wed, 4 Jul 2018 09:25:46 -0300
Subject: [PATCH 3/7] fence_gce: add power cycle as default method

Add function to power cycle an instance and set cycle as the default
method to reboot.
---
 agents/gce/fence_gce.py           | 21 +++++++++++++++++++--
 tests/data/metadata/fence_gce.xml |  8 ++++++++
 2 files changed, 27 insertions(+), 2 deletions(-)

diff --git a/fence/agents/gce/fence_gce.py b/fence/agents/gce/fence_gce.py
index e53dc5a6..3f77dc24 100644
--- a/fence/agents/gce/fence_gce.py
+++ b/fence/agents/gce/fence_gce.py
@@ -83,6 +83,21 @@ def set_power_status(conn, options):
 		fail_usage("Failed: set_power_status: {}".format(str(err)))
 
 
+def power_cycle(conn, options):
+	try:
+		LOGGER.info('Issuing reset of %s in zone %s' % (options["--plug"], options["--zone"]))
+		operation = conn.instances().reset(
+				project=options["--project"],
+				zone=options["--zone"],
+				instance=options["--plug"]).execute()
+		wait_for_operation(conn, options["--project"], options["--zone"], operation)
+		LOGGER.info('Reset of %s in zone %s complete' % (options["--plug"], options["--zone"]))
+		return True
+	except Exception as err:
+		LOGGER.error("Failed: power_cycle: {}".format(str(err)))
+		return False
+
+
 def get_instance(conn, project, zone, instance):
 	request = conn.instances().get(
 			project=project, zone=zone, instance=instance)
@@ -161,13 +176,15 @@ def main():
 
 	hostname = platform.node()
 
-	device_opt = ["port", "no_password", "zone", "project", "logging"]
+	device_opt = ["port", "no_password", "zone", "project", "logging", "method"]
 
 	atexit.register(atexit_handler)
 
 	define_new_opts()
 
 	all_opt["power_timeout"]["default"] = "60"
+	all_opt["method"]["default"] = "cycle"
+	all_opt["method"]["help"] = "-m, --method=[method]          Method to fence (onoff|cycle) (Default: cycle)"
 
 	options = check_input(device_opt, process_input(device_opt))
 
@@ -225,7 +242,7 @@ def main():
 			fail_usage("Failed retrieving GCE zone. Please provide --zone option: {}".format(str(err)))
 
 	# Operate the fencing device
-	result = fence_action(conn, options, set_power_status, get_power_status, get_nodes_list)
+	result = fence_action(conn, options, set_power_status, get_power_status, get_nodes_list, power_cycle)
 	sys.exit(result)
 
 if __name__ == "__main__":
diff --git a/tests/data/metadata/fence_gce.xml b/tests/data/metadata/fence_gce.xml
index 507b8385..f522550f 100644
--- a/tests/data/metadata/fence_gce.xml
+++ b/tests/data/metadata/fence_gce.xml
@@ -10,6 +10,14 @@ For instructions see: https://cloud.google.com/compute/docs/tutorials/python-gui
 		<content type="string" default="reboot"  />
 		<shortdesc lang="en">Fencing action</shortdesc>
 	</parameter>
+	<parameter name="method" unique="0" required="0">
+		<getopt mixed="-m, --method=[method]" />
+		<content type="select" default="cycle"  >
+			<option value="onoff" />
+			<option value="cycle" />
+		</content>
+		<shortdesc lang="en">Method to fence</shortdesc>
+	</parameter>
 	<parameter name="plug" unique="0" required="1" obsoletes="port">
 		<getopt mixed="-n, --plug=[id]" />
 		<content type="string"  />
-- 
2.16.4

openSUSE Build Service is sponsored by