248 lines
11 KiB
Plaintext
248 lines
11 KiB
Plaintext
# -*- coding: utf-8 -*-
|
||
# @Time: 2023/8/29 11:06
|
||
|
||
class KYYAliECS:
|
||
def __init__(self):
|
||
# self.access_key_id = 'LTAI5tSX7wQnsx6dRfUc3Wfe'
|
||
# self.access_key_secret = 'bWiuPh0eCWIaaXXpF9axsPVHX6kWzY'
|
||
|
||
self.access_key_id = 'LTAI5tGYr9XoLaJD1vBR8Vu7'
|
||
self.access_key_secret = 'jbFPoDHinlCOMXhIfQLag9nWX78IMb'
|
||
self.sms_client = self.create_client()
|
||
|
||
def create_client(self):
|
||
"""
|
||
使用AK&SK初始化账号Client
|
||
@param access_key_id:
|
||
@param access_key_secret:
|
||
@return: Client
|
||
@throws Exception
|
||
"""
|
||
config = open_api_models.Config(
|
||
access_key_id=self.access_key_id,
|
||
access_key_secret=self.access_key_secret
|
||
)
|
||
# Endpoint 请参考 https://api.aliyun.com/product/Ecs
|
||
config.endpoint = f'ecs-cn-hangzhou.aliyuncs.com'
|
||
return Ecs20140526Client(config)
|
||
|
||
async def get_describe_regions(self, nss):
|
||
"""
|
||
instance_charge_type
|
||
PrePaid:包年包月。此时,您必须确认自己的账号支持余额支付或者信用支付,否则将报错InvalidPayMethod
|
||
PostPaid:按量付费
|
||
SpotWithPriceLimit: 枚举值
|
||
默认值为PostPaid。
|
||
resource_type:
|
||
instance:ECS实例
|
||
disk:磁盘
|
||
reservedinstance:预留实例券
|
||
scu:存储容量单位包
|
||
默认值:instance
|
||
accept_language:
|
||
zh-CN:中文。
|
||
en-US:英文。
|
||
ja:日文。
|
||
默认值为zh-CN。
|
||
:return:
|
||
"""
|
||
describe_regions_request = ecs_20140526_models.DescribeRegionsRequest(
|
||
instance_charge_type=nss.get('instance_charge_type'),
|
||
resource_type=nss.get('resource_type'),
|
||
accept_language=nss.get('accept_language')
|
||
)
|
||
runtime = util_models.RuntimeOptions()
|
||
resp = await self.sms_client.describe_regions_with_options_async(describe_regions_request, runtime)
|
||
# ConsoleClient.log(UtilClient.to_jsonstring(resp))
|
||
return UtilClient.to_jsonstring(resp)
|
||
|
||
async def describe_available_resource(self, ns={}):
|
||
describe_available_resource_request = ecs_20140526_models.DescribeAvailableResourceRequest(
|
||
region_id=ns.get('region_id'),
|
||
memory=ns.get('memory'),
|
||
resource_type=ns.get('resource_type'),
|
||
scope=ns.get('scope'),
|
||
cores=ns.get('cores'),
|
||
network_category=ns.get('network_category'),
|
||
data_disk_category=ns.get('data_disk_category'),
|
||
system_disk_category=ns.get('system_disk_category'),
|
||
instance_type=ns.get('instance_type'),
|
||
dedicated_host_id=ns.get('dedicated_host_id'),
|
||
io_optimized=ns.get('io_optimized'),
|
||
zone_id=ns.get('zone_id'),
|
||
destination_resource=ns.get('destination_resource'),
|
||
spot_duration=ns.get('spot_duration'),
|
||
spot_strategy=ns.get('spot_strategy'),
|
||
instance_charge_type=ns.get('instance_charge_type')
|
||
)
|
||
runtime = util_models.RuntimeOptions()
|
||
try:
|
||
# 复制代码运行请自行打印 API 的返回值
|
||
result = await self.sms_client.describe_available_resource_with_options_async(describe_available_resource_request, runtime)
|
||
return result
|
||
except Exception as error:
|
||
# 如有需要,请打印 error
|
||
return UtilClient.assert_as_string(error.message)
|
||
|
||
async def describe_instance_types(self, ns={}):
|
||
describe_instance_types_request = ecs_20140526_models.DescribeInstanceTypesRequest(
|
||
instance_type_family=ns.get('instance_type_family'),
|
||
instance_types=ns.get('instance_types'),
|
||
minimum_cpu_core_count=ns.get('minimum_cpu_core_count'),
|
||
maximum_cpu_core_count=ns.get('maximum_cpu_core_count'),
|
||
minimum_memory_size=ns.get('minimum_memory_size'),
|
||
maximum_memory_size=ns.get('maximum_memory_size'),
|
||
minimum_gpuamount=ns.get('minimum_gpuamount'),
|
||
maximum_gpuamount=ns.get('maximum_gpuamount'),
|
||
gpuspec=ns.get('gpuspec'),
|
||
instance_category=ns.get('instance_category'),
|
||
cpu_architecture=ns.get('cpu_architecture'),
|
||
minimum_cpu_speed_frequency=ns.get('minimum_cpu_speed_frequency'),
|
||
maximum_cpu_speed_frequency=ns.get('maximum_cpu_speed_frequency'),
|
||
minimum_cpu_turbo_frequency=ns.get('minimum_cpu_turbo_frequency'),
|
||
maximum_cpu_turbo_frequency=ns.get('maximum_cpu_turbo_frequency'),
|
||
physical_processor_model=ns.get('physical_processor_model'),
|
||
instance_family_level=ns.get('instance_family_level'),
|
||
minimum_instance_pps_rx=ns.get('minimum_instance_pps_rx'),
|
||
minimum_instance_pps_tx=ns.get('minimum_instance_pps_tx'),
|
||
minimum_instance_bandwidth_rx=ns.get('minimum_instance_bandwidth_rx'),
|
||
minimum_instance_bandwidth_tx=ns.get('minimum_instance_bandwidth_tx'),
|
||
minimum_primary_eni_queue_number=ns.get('minimum_primary_eni_queue_number'),
|
||
minimum_secondary_eni_queue_number=ns.get('minimum_secondary_eni_queue_number'),
|
||
minimum_eni_quantity=ns.get('minimum_eni_quantity'),
|
||
minimum_queue_pair_number=ns.get('minimum_queue_pair_number'),
|
||
minimum_eri_quantity=ns.get('minimum_eri_quantity'),
|
||
minimum_eni_private_ip_address_quantity=ns.get('minimum_eni_private_ip_address_quantity'),
|
||
minimum_eni_ipv_6address_quantity=ns.get('minimum_eni_ipv_6address_quantity'),
|
||
minimum_local_storage_amount=ns.get('minimum_local_storage_amount'),
|
||
minimum_local_storage_capacity=ns.get('minimum_local_storage_capacity'),
|
||
minimum_disk_quantity=ns.get('minimum_disk_quantity'),
|
||
local_storage_category=ns.get('local_storage_category'),
|
||
nvme_support=ns.get('nvme_support'),
|
||
minimum_baseline_credit=ns.get('minimum_baseline_credit'),
|
||
minimum_initial_credit=ns.get('minimum_initial_credit'),
|
||
max_results=ns.get('max_results'),
|
||
next_token=ns.get('next_token'),
|
||
)
|
||
runtime = util_models.RuntimeOptions()
|
||
try:
|
||
# 复制代码运行请自行打印 API 的返回值
|
||
result = await self.sms_client.describe_instance_types_with_options_async(describe_instance_types_request, runtime)
|
||
return result
|
||
except Exception as error:
|
||
# 如有需要,请打印 error
|
||
return UtilClient.assert_as_string(error.message)
|
||
|
||
async def describe_price(self, ns={}):
|
||
scheduler_options = ecs_20140526_models.DescribePriceRequestSchedulerOptions(
|
||
dedicated_host_id='dh-bp67acfmxazb4p****'
|
||
)
|
||
data_disk_0 = ecs_20140526_models.DescribePriceRequestDataDisk(
|
||
category='cloud_ssd',
|
||
size=3000,
|
||
performance_level='PL1'
|
||
)
|
||
# 快速购买 默认存在
|
||
system_disk = ecs_20140526_models.DescribePriceRequestSystemDisk(
|
||
category=ns.get('system_disk').get('category'),
|
||
size=ns.get('system_disk').get('size')
|
||
)
|
||
describe_price_request = ecs_20140526_models.DescribePriceRequest(
|
||
region_id=ns.get('region_id'),
|
||
resource_type=ns.get('resource_type'),
|
||
image_id=ns.get('image_id'),
|
||
instance_type=ns.get('instance_type'),
|
||
dedicated_host_type=ns.get('dedicated_host_type'),
|
||
io_optimized=ns.get('io_optimized'),
|
||
instance_network_type=ns.get('instance_network_type'),
|
||
internet_charge_type=ns.get('internet_charge_type'),
|
||
internet_max_bandwidth_out=ns.get('internet_max_bandwidth_out'),
|
||
system_disk=system_disk,
|
||
data_disk=ns.get('data_disk'),
|
||
period=ns.get('period'),
|
||
price_unit=ns.get('price_unit'),
|
||
amount=ns.get('amount'),
|
||
offering_type=ns.get('offering_type'),
|
||
instance_amount=ns.get('instance_amount'),
|
||
scope=ns.get('scope'),
|
||
platform=ns.get('platform'),
|
||
capacity=ns.get('capacity'),
|
||
assurance_times=ns.get('assurance_times'),
|
||
instance_cpu_core_count=ns.get('instance_cpu_core_count'),
|
||
isp=ns.get('isp'),
|
||
instance_type_list=ns.get('instance_type_list'),
|
||
spot_strategy=ns.get('spot_strategy'),
|
||
spot_duration=ns.get('spot_duration'),
|
||
zone_id=ns.get('zone_id'),
|
||
scheduler_options=ns.get('scheduler_options')
|
||
)
|
||
runtime = util_models.RuntimeOptions()
|
||
try:
|
||
result = await self.sms_client.describe_price_with_options_async(describe_price_request, runtime)
|
||
return result
|
||
except Exception as error:
|
||
return UtilClient.assert_as_string(error.message)
|
||
|
||
async def describe_images(self, ns={}):
|
||
describe_images_request = ecs_20140526_models.DescribeImagesRequest(
|
||
region_id='cn-qingdao'
|
||
# region_id=ns.get('region_id'),
|
||
# show_expired=ns.get('show_expired'),
|
||
# is_support_io_optimized=ns.get('is_support_io_optimized'),
|
||
# is_support_cloudinit=ns.get('is_support_cloudinit'),
|
||
# ostype=ns.get('ostype'),
|
||
# architecture=ns.get('architecture'),
|
||
# usage=ns.get('usage'),
|
||
# dry_run=ns.get('dry_run'),
|
||
# action_type=ns.get('action_type'),
|
||
# resource_group_id=ns.get('resource_group_id'),
|
||
# is_public=ns.get('is_public'),
|
||
# image_owner_id=ns.get('image_owner_id'),
|
||
# page_number=ns.get('page_number'),
|
||
# page_size=ns.get('page_size'),
|
||
)
|
||
runtime = util_models.RuntimeOptions()
|
||
try:
|
||
result = await self.sms_client.describe_images_with_options_async(describe_images_request, runtime)
|
||
return result
|
||
except Exception as error:
|
||
# 如有需要,请打印 error
|
||
return UtilClient.assert_as_string(error.message)
|
||
|
||
async def DescribeRegions(ns={}):
|
||
"""
|
||
获取可用区域
|
||
:param ns:
|
||
:return:
|
||
"""
|
||
# ns = {
|
||
# 'instance_charge_type': 'PrePaid',
|
||
# 'resource_type': 'instance',
|
||
# 'accept_language': 'zh-CN'
|
||
# # 'resource_type': 'disk'
|
||
# }
|
||
nss = {
|
||
'instance_charge_type': ns.get('instance_charge_type'),
|
||
'resource_type': ns.get('resource_type'),
|
||
'accept_language': ns.get('accept_language')
|
||
}
|
||
regions = await KYYAliECS().get_describe_regions(nss)
|
||
result = json.loads(regions)['body']
|
||
result['Regions']['Region_filter'] = {'Asia_China': [], 'Asia_Other': [], 'Europe_America': [], 'Middle_East': []}
|
||
for content in result['Regions']['Region']:
|
||
if 'cn' in content['RegionId']:
|
||
result['Regions']['Region_filter']['Asia_China'].append(content)
|
||
elif 'ap' in content['RegionId']:
|
||
result['Regions']['Region_filter']['Asia_Other'].append(content)
|
||
elif 'en' in content['RegionId'] or 'us' in content['RegionId']:
|
||
result['Regions']['Region_filter']['Europe_America'].append(content)
|
||
elif 'me' in content['RegionId']:
|
||
result['Regions']['Region_filter']['Middle_East'].append(content)
|
||
print(result)
|
||
return result
|
||
|
||
ret = await DescribeRegions(params_kw)
|
||
return ret
|
||
|
||
|