def check_instance_status(self, regionId, instanceIds):
     '''
     获取云主机状态信息
     :param regionId: 区域
     :param instanceIds: 云主机列表
     :return: 云主机状态dict
     '''
     # 云主机ID作为过滤条件
     myFilter = [ Filter(name='instanceId', operator='eq', values=instanceIds) ]
     try:
         myParam = DescribeInstancesParameters(regionId)
         myParam.setFilters(myFilter)
         myRequest = DescribeInstancesRequest(myParam)
         myClient = VmClient(self.credential)
         # 发送请求
         resp = myClient.send(myRequest)
         if resp.error is not None:
             logger.error(resp.error.message)
         # 从返回结果获取云主机状态信息
         instanceStatus = {}
         for ins in resp.result['instances']:
             instanceStatus[ins['instanceId']] = ins['status']
     except Exception, e:
         logger.exception(e)
         sys.exit('error!获取云主机状态失败!')
 def create_instances(self, regionId, az, instanceType, count, imageId, \
                      subnetId, name, password, description=None):
     '''
     创建云主机
     :param regionId: 地域
     :param az: 可用区
     :param instanceType: 实例规格
     :param count: 云主机数量
     :param imageId: 镜像ID
     :param subnetId: 子网ID
     :param name: 云主机name
     :param password: 云主机密码
     :param description: 云主机描述
     :return: 返回云主机ID列表
     '''
     try:
         # 网络配置
         networkinterfaceSpec = NetworkInterfaceSpec(subnetId=subnetId, az=az)
         networkSpec = InstanceNetworkInterfaceAttachmentSpec(networkInterface=networkinterfaceSpec)
         instanceSpec = InstanceSpec(az=az, instanceType=instanceType, imageId=imageId, \
                                     name=name, keyNames=None, primaryNetworkInterface=networkSpec, \
                                     systemDisk=None, dataDisks=None, password=password, \
                                     description=description)
         instanceParam = CreateInstancesParameters(regionId, instanceSpec)
         # 云主机数量
         instanceParam.setMaxCount(count)
         instanceRequest = CreateInstancesRequest(instanceParam)
         instanceClient = VmClient(self.credential)
         # 发送请求
         resp = instanceClient.send(instanceRequest)
         if resp.error is not None:
             logger.error(resp.error.message)
     except Exception, e:
         logger.exception(e)
         sys.exit('error!创建云主机失败!')
 def check_instanceTypes(self, regionId, az, instanceTypes=None):
     '''
     查看实例库存
     :param regionId: 地域
     :param az: 可用区
     :param instanceTypes: 实例规格列表
     :return: 库存dict
     '''
     # 过滤条件:指定规格类型列表+可用区
     myFilter = []
     filter_1 = Filter(name='instanceTypes', operator='eq', values=instanceTypes)
     myFilter.append(filter_1)
     filter_2 = Filter(name='az', operator='eq', values=az)
     myFilter.append(filter_2)
     try:
         # 指定参数
         myParam = DescribeInstanceTypesParameters(regionId)
         myParam.setFilters(myFilter)
         myRequest = DescribeInstanceTypesRequest(myParam)
         myClient = VmClient(self.credential)
         # 发送请求
         resp = myClient.send(myRequest)
         if resp.error is not None:
             logger.error(resp.error.message)
     except Exception, e:
         logger.exception(e)
         sys.exit('error!获取云主机库存失败!')
    def __init__(self, access_key, secret_key, regionId, instanceId,
                 elasticIpId):
        self.regionId = regionId
        # Instance ID: e.g. 'i-8hw0v3puvw'
        self.instanceId = instanceId
        # Elastic ip ID: e.g. 'fip-w97my7txc1'
        self.elasticIpId = elasticIpId

        self.credential = Credential(access_key, secret_key)
        self.client = VmClient(self.credential)
        print 'Client created...'
    def get_vnc(self, regionId, instanceId):

        try:
            myParam = DescribeInstanceVncUrlParameters(regionId, instanceId)
            myRequest = DescribeInstanceVncUrlRequest(myParam)
            myClient = VmClient(self.credential)
            resp = myClient.send(myRequest)
            if resp.error is not None:
                logger.error(resp.error.message)
                sys.exit('获取云主机Vnc地址失败!')
            vncUrl = resp.result['vncUrl'].encode('utf-8')
        except Exception, e:
            logger.exception(e)
            sys.exit('error!获取云主机Vnc地址失败!')
class AssociateElasticIpToVmDemo(object):
    """
    Associate an elastic ip with an instance(Firstly need the instance ID and elastic ip ID
    """
    def __init__(self, access_key, secret_key, regionId, instanceId,
                 elasticIpId):
        self.regionId = regionId
        # Instance ID: e.g. 'i-8hw0v3puvw'
        self.instanceId = instanceId
        # Elastic ip ID: e.g. 'fip-w97my7txc1'
        self.elasticIpId = elasticIpId

        self.credential = Credential(access_key, secret_key)
        self.client = VmClient(self.credential)
        print 'Client created...'

    def associateEIP(self):
        myParam = AssociateElasticIpParameters(self.regionId, self.instanceId,
                                               self.elasticIpId)
        myRequest = AssociateElasticIpRequest(myParam)
        resp = self.client.send(myRequest)

        if resp.error is not None:
            print resp.error.code, resp.error.message

        return resp
 def attach_disk(self, regionId, instanceId, diskId):
     '''
     挂载云盘至云主机
     :param regionId: 区域
     :param instanceId: 云主机ID
     :param diskId: 云盘ID
     :return: 成功0
     '''
     try:
         myParam = AttachDiskParameters(regionId, instanceId, diskId)
         myRequest = AttachDiskRequest(parameters=myParam)
         myClient = VmClient(self.credential)
         resp = myClient.send(myRequest)
         if resp.error is not None:
             logger.error(resp.error.message)
             sys.exit('error!挂载云盘失败!')
     except Exception, e:
         logger.exception(e)
         sys.exit('error!挂载云盘失败!')
 def associate_eip(self, regionId, instanceId, eipId):
     '''
     绑定弹性IP至云主机
     :param regionId: 区域
     :param instanceId: 云主机ID
     :param eipId: 弹性IP id
     :return: 绑定成功的弹性IP id
     '''
     try:
         myParam = AssociateElasticIpParameters(regionId, instanceId, eipId)
         myRequest = AssociateElasticIpRequest(myParam)
         myClient = VmClient(self.credential)
         # 发送请求
         resp = myClient.send(myRequest)
         if resp.error is not None:
             logger.error(resp.error.message)
     except Exception, e:
         logger.exception(e)
         sys.exit('error!绑定弹性IP失败!')
Example #9
0
azs = ['cn-east-2a', 'cn-east-2b']
instanceTypes = ['g.s1.small', 'g.s1.micro']
myFilter = []

filter_1 = Filter(name='instanceTypes', operator='eq', values=instanceTypes)
myFilter.append(filter_1)
filter_2 = Filter(name='az', operator='eq', values=azs)
myFilter.append(filter_2)

myParam = DescribeInstanceTypesParameters(regionId=regionId)
myParam.setFilters(myFilter)

myRequest = DescribeInstanceTypesRequest(parameters=myParam)

myCredential = Credential(access_key, secret_key)
myClient = VmClient(myCredential)

print 'Sending request...'
resp = myClient.send(myRequest)

for i in resp.result['instanceTypes']:
    print 'family: ', i['family']
    print 'instanceType: ', i['instanceType'], '\n'
# family:  g.s
# instanceType:  g.s1.micro
#
# family:  g.s
# instanceType:  g.s1.small
print json.dumps(resp.result, indent=2)
# {
#   "totalCount": 2,