kboss/b/ali/DescribeRegions.dspy
2025-07-16 14:27:17 +08:00

248 lines
11 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -*- 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:
instanceECS实例
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