ecs_sdk.py 模型类视图
# sample api to list aliyun open api.
import json
import re
import logging
from aliyunsdkcore import client
from aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequest
from aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequest
from aliyunsdkecs.request.v20140526.DescribeRegionsRequest import DescribeRegionsRequest
from aliyunsdkecs.request.v20140526.DescribeAvailableResourceRequest import DescribeAvailableResourceRequest
from aliyunsdkecs.request.v20140526.StartInstanceRequest import StartInstanceRequest
from aliyunsdkecs.request.v20140526.StopInstanceRequest import StopInstanceRequest
from django.http import JsonResponse
acc_id = "XXXXX"
acc_key = "XXXXX"
region = "cn-hangzhou"
class AliyunEcsCreate(object):
# 初始化对象信息:AccessKeyId,AccessKeySecret,Region
def __init__(self, AccessKeyId, AccessKeySecret, Region):
self.AccessKeyId = AccessKeyId
self.AccessKeySecret = AccessKeySecret
self.Region = Region
# 启动实例
def StartInstance(self, region_id, InstanceId):
"""
启动实例
:param region_id: 地域
:param InstanceId: 实例ID
:return:
"""
startclt = client.AcsClient(self.AccessKeyId, self.AccessKeySecret, region_id)
startreq = StartInstanceRequest()
startreq.set_action_name('StartInstance')
startreq.set_accept_format('json')
startreq.set_InstanceId(InstanceId)
start = json.loads(startclt.do_action_with_exception(startreq), encoding='utf-8')
return JsonResponse(data=start)
def StopInstance(self, region_id, InstanceId):
"""
启动实例
:param region_id: 地域
:param InstanceId: 实例ID
:return:
"""
startclt = client.AcsClient(self.AccessKeyId, self.AccessKeySecret, region_id)
startreq = StopInstanceRequest()
startreq.set_action_name('StopInstance')
startreq.set_accept_format('json')
startreq.set_InstanceId(InstanceId)
stop = json.loads(startclt.do_action_with_exception(startreq), encoding='utf-8')
return JsonResponse(data=stop)
def DescribeInstanceList(self):
ecs_obj = client.AcsClient(self.AccessKeyId, self.AccessKeySecret,self.Region)
regions_req = DescribeInstancesRequest()
regions_req.set_accept_format('json')
ecs_ret = json.loads(ecs_obj.do_action_with_exception(regions_req), encoding='utf-8')
instances = []
for i in ecs_ret['Instances']['Instance']:
obj = i['InstanceId']
instances.append(obj)
return instances
# 获取单条数据
def DescribeInstance(self):
"""
地域
:return: {'cn-qingdao': '华北 1'}
"""
ecs_obj = client.AcsClient(self.AccessKeyId, self.AccessKeySecret)
ecs_obj_req = DescribeInstancesRequest()
# ecs_obj_req.set_InstanceIds(InstanceId)
ecs_obj_req.set_accept_format('json')
regions_ret = json.loads(ecs_obj.do_action_with_exception(ecs_obj_req), encoding='utf-8')
# regions = {}
# for i in regions_ret['Regions']['Region']:
# regions[i['RegionId']] = i['LocalName']
# return regions
return regions_ret
# 获取地域信息
def DescribeRegions(self):
"""
地域
:return: {'cn-qingdao': '华北 1'}
"""
regions_obj = client.AcsClient(self.AccessKeyId, self.AccessKeySecret)
regions_req = DescribeRegionsRequest()
regions_req.set_accept_format('json')
regions_ret = json.loads(regions_obj.do_action_with_exception(regions_req), encoding='utf-8')
regions = {}
for i in regions_ret['Regions']['Region']:
regions[i['RegionId']] = i['LocalName']
return regions
def DescribeAvailableResource(self, InstanceChargeType, region_id, DestinationResource=None, ZoneId=None):
"""
可用资源查询接口
:param region_id: 地域
:param DestinationResource: 查询的资源类型
:return:
"""
resourceclt = client.AcsClient(self.AccessKeyId, self.AccessKeySecret, region_id)
resourcereq = DescribeAvailableResourceRequest()
# if DestinationResource == 'InstanceType':
# resourcereq.set_ZoneId(ZoneId)
# resourcereq.set_IoOptimized('optimized')
# resourcereq.set_InstanceChargeType(InstanceChargeType)
# resourcereq.set_DestinationResource(DestinationResource)
# resourcereq.set_accept_format('json')
resourcere = json.loads(resourceclt.do_action_with_exception(resourcereq), encoding='utf-8')
return resourcere
def AvailableZones(self, InstanceChargeType,region_id):
# region_id = self.Region
# print(region_id)
"""
可用区
:param region_id: 计费方式 地域
:return: ['cn-huhehaote-a', 'cn-huhehaote-b']
"""
zonesre = self.DescribeAvailableResource(InstanceChargeType, region_id, 'Zone')
print(zonesre)
zones = []
for i in zonesre['AvailableZones']['AvailableZone']:
zones.append(i['ZoneId'])
return zones
# # fee_type = "PostPaid"
# # regions = ecs_obj.DescribeRegions()
# # print(regions)
# # instances = ecs_obj.DescribeInstances()
# # # zones = ecs_obj.AvailableZones(fee_type,region)
# # print(instances)
# # # availables = ecs_obj.DescribeAvailableResource()
# # start = ecs_obj.StartInstance(region_id=region,InstanceId=instances[0])
# # print(start)
# # print(zones)
ecs_obj = AliyunEcsCreate(acc_id,acc_key,region)
instance = "i-bp11itscfjcatu93k6fb"
instance_info = ecs_obj.DescribeInstance()
print(instance_info)
# instance_info_01 = instance_info["Instances"]
# instance_info_01_info = instance_info["Instances"]['Instance']
# print(instance_info)
# print(instance_info_01)
# print(instance_info_01_info)
#
# for i in instance_info_01_info:
# print(i)