File 0001-Update-fence_aliyun.py-279.patch of Package fence-agents.12642

From b6fe4dc4c742dc1d9375db9a1b1527cd418b6ebd Mon Sep 17 00:00:00 2001
From: chen dong <51401223+dongchen126@users.noreply.github.com>
Date: Wed, 24 Jul 2019 18:04:12 +0800
Subject: [PATCH 1/1] Update fence_aliyun.py (#279)

fence_aliyun: add ram role support

- Add ram role for security
- Add region provider for private zone functionality
---
 agents/aliyun/fence_aliyun.py        | 28 +++++++++++++++++++++-------
 tests/data/metadata/fence_aliyun.xml |  5 +++++
 2 files changed, 26 insertions(+), 7 deletions(-)

diff --git a/agents/aliyun/fence_aliyun.py b/agents/aliyun/fence_aliyun.py
index d780e2ab..3bc825fe 100644
--- a/agents/aliyun/fence_aliyun.py
+++ b/agents/aliyun/fence_aliyun.py
@@ -15,6 +15,7 @@ try:
 	from aliyunsdkecs.request.v20140526.StartInstanceRequest import StartInstanceRequest
 	from aliyunsdkecs.request.v20140526.StopInstanceRequest import StopInstanceRequest
 	from aliyunsdkecs.request.v20140526.RebootInstanceRequest import RebootInstanceRequest
+	from aliyunsdkcore.profile import region_provider
 except ImportError:
 	pass
 
@@ -121,12 +122,20 @@ def define_new_opts():
 		"required" : "0",
 		"order" : 4
 	}
+	all_opt["ram_role"] = {
+		"getopt": ":",
+		"longopt": "ram-role",
+		"help": "--ram-role=[name]        Ram Role",
+		"shortdesc": "Ram Role.",
+		"required": "0",
+		"order": 5
+	}
 
 # Main agent method
 def main():
 	conn = None
 
-	device_opt = ["port", "no_password", "region", "access_key", "secret_key"]
+	device_opt = ["port", "no_password", "region", "access_key", "secret_key", "ram_role"]
 
 	atexit.register(atexit_handler)
 
@@ -144,13 +153,18 @@ def main():
 
 	run_delay(options)
 
-	if "--region" in options and "--access-key" in options and "--secret-key" in options:  
+	if "--region" in options:
 		region = options["--region"]
-		access_key = options["--access-key"]
-		secret_key = options["--secret-key"]
-		conn = client.AcsClient(access_key, secret_key, region)
-
-
+		if "--access-key" in options and "--secret-key" in options:
+			access_key = options["--access-key"]
+			secret_key = options["--secret-key"]
+			conn = client.AcsClient(access_key, secret_key, region)
+		elif "--ram-role" in options:
+			ram_role = options["--ram-role"]
+			role = EcsRamRoleCredential(ram_role)
+			conn = client.AcsClient(region_id=region, credential=role)
+		region_provider.modify_point('Ecs', region, 'ecs.%s.aliyuncs.com' % region)
+		
 	# Operate the fencing device
 	result = fence_action(conn, options, set_power_status, get_power_status, get_nodes_list)
 	sys.exit(result)
diff --git a/tests/data/metadata/fence_aliyun.xml b/tests/data/metadata/fence_aliyun.xml
index b41d82bf..2de3a8aa 100644
--- a/tests/data/metadata/fence_aliyun.xml
+++ b/tests/data/metadata/fence_aliyun.xml
@@ -33,6 +33,11 @@
 		<content type="string"  />
 		<shortdesc lang="en">Secret Key.</shortdesc>
 	</parameter>
+	<parameter name="ram_role" unique="0" required="0">
+		<getopt mixed="--ram-role=[name]" />
+		<content type="string"  />
+		<shortdesc lang="en">Ram Role.</shortdesc>
+	</parameter>
 	<parameter name="quiet" unique="0" required="0">
 		<getopt mixed="-q, --quiet" />
 		<content type="boolean"  />
-- 
2.16.4

openSUSE Build Service is sponsored by