File 0001-Update-fence_aliyun.py-279.patch of Package fence-agents.14952
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