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失败!')
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,