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:
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