solution/automation/finance-industry/step/network-attach-cen/cen_service.py (139 lines of code) (raw):
# -*- coding: utf-8 -*-
import sys
import json
from typing import List
from Tea.core import TeaCore
from alibabacloud_cbn20170912.client import Client as CbnClient
from alibabacloud_cbn20170912 import models as cbn_models
from alibabacloud_tea_console.client import Client as ConsoleClient
from alibabacloud_darabonba_env.client import Client as EnvClient
from alibabacloud_sts20150401.client import Client as Sts20150401Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_sts20150401 import models as sts_20150401_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient
class Sts:
def __init__(self):
pass
@staticmethod
def create_client(
access_key_id: str,
access_key_secret: str,
) -> Sts20150401Client:
"""
使用AK&SK初始化账号Client
@param access_key_id:
@param access_key_secret:
@return: Client
@throws Exception
"""
config = open_api_models.Config(
# 您的 AccessKey ID,
access_key_id=access_key_id,
# 您的 AccessKey Secret,
access_key_secret=access_key_secret
)
# 访问的域名
config.endpoint = f'sts.cn-shanghai.aliyuncs.com'
return Sts20150401Client(config)
@staticmethod
def assume_rd_role(account_id, access_key_id, access_key_secret):
client = Sts.create_client(access_key_id, access_key_secret)
assume_role_request = sts_20150401_models.AssumeRoleRequest(
role_arn='acs:ram::' + account_id + ':role/ResourceDirectoryAccountAccessRole',
role_session_name='management-account-programmaticUser'
)
runtime = util_models.RuntimeOptions()
try:
resp = client.assume_role_with_options(assume_role_request, runtime)
body_dict = resp.body.to_map()
return body_dict['Credentials']
except Exception as error:
print(UtilClient.assert_as_string(error.message))
def parse_json(content):
try:
return json.loads(content)
except Exception as e:
return None
def get_config_value(file_path, key):
config_value = ''
with open(file_path, 'r') as f:
line = f.readline()
while True:
if not line:
break
if not line.startswith('#') and key in line:
line_kv_list = line.split('=')
config_value = line_kv_list[1].strip().strip('"').strip('\'')
break
line = f.readline()
print(config_value)
return config_value
class CenService:
def __init__(self):
pass
@staticmethod
def create_cen_client(
rd_account_id: str,
access_key_id: str,
access_key_secret: str
) -> CbnClient:
"""
扮演成员账号角色
"""
rd_role_credentials = Sts.assume_rd_role(rd_account_id, access_key_id, access_key_secret)
config = open_api_models.Config()
config.access_key_id = rd_role_credentials['AccessKeyId']
config.access_key_secret = rd_role_credentials['AccessKeySecret']
config.security_token = rd_role_credentials['SecurityToken']
return CbnClient(config)
@staticmethod
def check_transit_router_service(client: CbnClient):
"""
CheckTransitRouterService 查询当前阿里云账号是否开通转发路由器服务
"""
req = cbn_models.CheckTransitRouterServiceRequest()
resp = client.check_transit_router_service(req)
ConsoleClient.log(UtilClient.to_jsonstring(TeaCore.to_map(resp.body)))
return TeaCore.to_map(resp.body).get('Enabled')
@staticmethod
async def check_transit_router_service_async(
client: CbnClient,
) -> None:
"""
CheckTransitRouterService 查询当前阿里云账号是否开通转发路由器服务
"""
req = cbn_models.CheckTransitRouterServiceRequest()
resp = await client.check_transit_router_service_async(req)
ConsoleClient.log(UtilClient.to_jsonstring(TeaCore.to_map(resp.body)))
return
@staticmethod
def open_transit_router_service(
client: CbnClient,
) -> None:
"""
OpenTransitRouterService 开通转发路由器服务
"""
req = cbn_models.OpenTransitRouterServiceRequest()
resp = client.open_transit_router_service(req)
ConsoleClient.log(UtilClient.to_jsonstring(TeaCore.to_map(resp.body)))
return
@staticmethod
async def open_transit_router_service_async(
client: CbnClient,
) -> None:
"""
OpenTransitRouterService 开通转发路由器服务
"""
req = cbn_models.OpenTransitRouterServiceRequest()
resp = await client.open_transit_router_service_async(req)
ConsoleClient.log(UtilClient.to_jsonstring(TeaCore.to_map(resp.body)))
return
@staticmethod
def open_tr_service(rd_account_id: str):
client = CenService.create_cen_client(rd_account_id,
EnvClient.get_env('ALICLOUD_ACCESS_KEY'),
EnvClient.get_env('ALICLOUD_SECRET_KEY'))
ConsoleClient.log('---------查询当前阿里云账号是否开通转发路由器服务----------')
is_open = CenService.check_transit_router_service(client)
if not is_open:
ConsoleClient.log('-----------------开通转发路由器服务中..--------------------')
CenService.open_transit_router_service(client)
ConsoleClient.log('-----------------已开通转发路由器服务--------------------')
else:
ConsoleClient.log('-----------------之前已开通转发路由器服务,结束--------------------')
@staticmethod
async def main_async(
args: List[str],
) -> None:
client = CenService.create_cen_client(EnvClient.get_env('ALICLOUD_ACCESS_KEY'),
EnvClient.get_env('ALICLOUD_SECRET_KEY'))
ConsoleClient.log('---------查询当前阿里云账号是否开通转发路由器服务----------')
await CenService.check_transit_router_service_async(client)
ConsoleClient.log('-----------------开通转发路由器服务--------------------')
await CenService.open_transit_router_service_async(client)
if __name__ == '__main__':
'''
获取共享服务账号ID
sys.argv[1] = '../../settings.tfvars'
sys.argv[2] = 'shared_service_account_id'
'''
shared_service_account_id = get_config_value(sys.argv[1], sys.argv[2])
'''
共享服务账号中开通转发路由器服务
'''
CenService.open_tr_service(shared_service_account_id)