Beispiel #1
0
    def do_delete(self, region_id, instance_id):
        client = AcsClient(self.aliyun_token['id'], self.aliyun_token['secret'], region_id)

        # check status first
        describeInstanceAttributeRequest = DescribeInstanceAttributeRequest.DescribeInstanceAttributeRequest()
        describeInstanceAttributeRequest.set_InstanceId(instance_id)
        describeInstanceAttributeRequest.set_accept_format('json')

        resp = json_decode(client.do_action(describeInstanceAttributeRequest))

        result = {}
        # check if exist
        if 'Code' in resp.keys() and resp['Code'] == 'InvalidInstanceId.NotFound':
            result['text'] = 'delete %s %s failed, %s' % (region_id, instance_id, resp['Code'])
        else:
            if resp['Status'] != 'Stopped':
                result['text'] = 'delete %s %s failed, stop instance first' % (region_id, instance_id)
                result['attachments'] = [{"title": "%s" % resp['InstanceId'], "text": "%s" % resp['Status'], "color": "%s" % self.status_color(resp['Status'])}]
            else:
                deleteInstanceRequest = DeleteInstanceRequest.DeleteInstanceRequest()
                deleteInstanceRequest.set_InstanceId(instance_id)
                deleteInstanceRequest.set_accept_format('json')

                client.do_action(deleteInstanceRequest)
                result['text'] = 'deleting instance %s %s' % (region_id, instance_id)

        return result
Beispiel #2
0
    def wait_for_instance(client, instance_id, target_status):
        while True:
            request = DescribeInstanceAttributeRequest.DescribeInstanceAttributeRequest(
            )
            request.set_InstanceId(instance_id)
            request.set_accept_format("JSON")
            code, headers, body = client.get_response(request)
            if target_status == 'Deleted' and code == 404:
                mylogger.info("delete ecs instance(%s) success" % instance_id)
                break
            if code != 200:
                mylogger.error(
                    "Failed to describe ecs instance, statusCode=%s, message=%s"
                    % (status, body))
                break

            status = json.loads(body).get('Status')
            if status == target_status:
                mylogger.info(
                    "ecs instance(%s) status has changed to %s, wait 20 seconds"
                    % (instance_id, target_status))
                time.sleep(20)
                break
            else:
                mylogger.info(
                    "ecs instance(%s) status is %s, wait for changing to %s" %
                    (instance_id, status, target_status))
                time.sleep(10)
Beispiel #3
0
    def get_aliyun_info(self, InstanceId):
        """
        获取阿里云单机详细信息
        """
        request = DescribeInstanceAttributeRequest.DescribeInstanceAttributeRequest(
        )
        request.set_InstanceId(InstanceId)
        connect = self.aliyun_connect(request)

        return eval(connect)
Beispiel #4
0
def fetch_Instance(instance):
    from aliyunsdkecs.request.v20140526 import DescribeInstanceAttributeRequest
    request = DescribeInstanceAttributeRequest.DescribeInstanceAttributeRequest(
    )
    request.set_accept_format('json')
    request.add_query_param('InstanceId', instance)
    try:
        response = clt.do_action_with_exception(request)
    except:
        return {}
    return json.loads(response.decode('utf-8'))
Beispiel #5
0
 def get_instance(self, instance_id):
     # request = DescribeInstancesRequest.DescribeInstancesRequest()
     request = DescribeInstanceAttributeRequest.DescribeInstanceAttributeRequest(
     )
     self.request_to_json(request)
     request.add_query_param('InstanceId', instance_id)
     try:
         response = self.clt.do_action_with_exception(request)
     except:
         return {}
     return self.get_json_results(response)
Beispiel #6
0
 def get_demo_ecs_attributes(client):
     mylogger.info("trying to get demo instance attributes...", )
     demo_instance_id = os.environ['DEMO_ECS_INSTANCE_ID']
     request = DescribeInstanceAttributeRequest.DescribeInstanceAttributeRequest(
     )
     request.set_accept_format("JSON")
     request.set_InstanceId(demo_instance_id)
     content = client.do_action_with_exception(request)
     response = json.loads(content)
     mylogger.info("success")
     return response.get('ImageId'), response.get('SecurityGroupIds').get(
         'SecurityGroupId')[0]
Beispiel #7
0
 def describe_instance_attribute(self, instance_id=None):
     if instance_id:
         try:
             request = DescribeInstanceAttributeRequest.DescribeInstanceAttributeRequest(
             )
             request.set_accept_format('json')
             request.add_query_param('InstanceId', instance_id)
             response = self.cli.do_action_with_exception(request)
             return response
         except Exception as ee:
             print(ee)
     else:
         print("instance_id is necessary")
Beispiel #8
0
 def ecs_id2ip(self, ecs_id):
     """
     :param ecs_id: str, ecs instance-id
     return: str, ecs instance internal ip
     """
     # DescribeInstanceAttributeRequest
     ecs_req = DescribeInstanceAttributeRequest.DescribeInstanceAttributeRequest(
     )
     ecs_req.add_query_param('InstanceId', ecs_id)
     ecs_res = self.client.do_action_with_exception(ecs_req)
     ecs = json.loads(ecs_res.decode('utf-8'))
     priv_ip = ecs['VpcAttributes']['PrivateIpAddress']['IpAddress']
     pub_ip = ecs['PublicIpAddress']['IpAddress']
     return (priv_ip, pub_ip)
Beispiel #9
0
def get_aliyun_ecs_by_instance_id(instance_id):
    """
    根据可用区ID和实例ID查询实例属性
    :param instance_id:
    :return:
    """
    aliyun_client = get_aliyun_client()
    # 获取实例属性.
    aliyun_request = DescribeInstanceAttributeRequest.DescribeInstanceAttributeRequest(
    )
    aliyun_request.set_accept_format('json')
    aliyun_request.set_InstanceId(instance_id)

    aliyun_response = aliyun_client.do_action_with_exception(aliyun_request)
    return json.loads(aliyun_response)
Beispiel #10
0
    def do_show(self, region_id, instance_id):
        client = AcsClient(self.aliyun_token['id'], self.aliyun_token['secret'], region_id)
        describeInstanceAttributeRequest = DescribeInstanceAttributeRequest.DescribeInstanceAttributeRequest()
        describeInstanceAttributeRequest.set_InstanceId(instance_id)
        describeInstanceAttributeRequest.set_accept_format('json')

        resp = json_decode(client.do_action(describeInstanceAttributeRequest))
        result = {}
        result['text'] = 'show %s %s' % (region_id, instance_id)
        if 'Code' in resp.keys() and resp['Code'] == 'InvalidInstanceId.NotFound':
            result['text'] = 'show %s %s failed, %s' % (region_id, instance_id, resp['Code'])
        else:
            if resp['InstanceNetworkType'] == 'classic':
                result['attachments'] = [{"title": "%s (%s)" % (resp['InstanceName'], resp['InstanceId']), "text": "InstanceType: %s\nMemory: %s MB\nCpu: %s\nZoneId: %s\nRegionId: %s\nStatus: %s\nIoOptimized: %s\nInstanceNetworkType: %s\nPublicIpAddress: %s\nCreationTime: %s\nExpiredTime: %s" % (resp['InstanceType'], resp['Memory'], resp['Cpu'], resp['ZoneId'], resp['RegionId'], resp['Status'], resp['IoOptimized'], resp['InstanceNetworkType'], ', '.join(resp['PublicIpAddress']['IpAddress']), resp['CreationTime'], resp['ExpiredTime']), "color": "%s" % self.status_color(resp['Status'])}]
            elif resp['InstanceNetworkType'] == 'vpc':
                result['attachments'] = [{"title": "%s (%s)" % (resp['InstanceName'], resp['InstanceId']), "text": "InstanceType: %s\nMemory: %s MB\nCpu: %s\nZoneId: %s\nRegionId: %s\nStatus: %s\nIoOptimized: %s\nInstanceNetworkType: %s\nEipAddress: %s\nCreationTime: %s\nExpiredTime: %s" % (resp['InstanceType'], resp['Memory'], resp['Cpu'], resp['ZoneId'], resp['RegionId'], resp['Status'], resp['IoOptimized'], resp['InstanceNetworkType'], resp['EipAddress']['IpAddress'], resp['CreationTime'], resp['ExpiredTime']), "color": "%s" % self.status_color(resp['Status'])}]

        return result
Beispiel #11
0
    def do_list(self, region_id):
        client = AcsClient(self.aliyun_token['id'], self.aliyun_token['secret'], region_id)
        describeInstanceStatusRequest = DescribeInstanceStatusRequest.DescribeInstanceStatusRequest()
        # TODO: set_PageSize, set_PageNumber
        describeInstanceStatusRequest.set_accept_format('json')

        resp = json_decode(client.do_action(describeInstanceStatusRequest))
        result = {}
        result['text'] = 'list %s\ntotal: %s' % (region_id, resp['TotalCount'])
        result['attachments'] = []
        for i in resp['InstanceStatuses']['InstanceStatus']:
            describeInstanceAttributeRequest = DescribeInstanceAttributeRequest.DescribeInstanceAttributeRequest()
            describeInstanceAttributeRequest.set_InstanceId(i['InstanceId'])
            describeInstanceAttributeRequest.set_accept_format('json')

            resp1 = json_decode(client.do_action(describeInstanceAttributeRequest))

            result['attachments'].append({"title": "%s (%s)" % (resp1['InstanceName'], resp1['InstanceId']), "text": "%s" % resp1['Status'], "color": "%s" % self.status_color(resp1['Status'])})

        return result
Beispiel #12
0
        break

#remix_req = DescribeLoadBalancersRelatedEcsRequest.DescribeLoadBalancersRelatedEcsRequest()
remix_req = DescribeLoadBalancerAttributeRequest.DescribeLoadBalancerAttributeRequest(
)
remix_req.add_query_param('LoadBalancerId', remix_slb_id)

# Print response, show remix slb related ecs:
remix_res = client.do_action_with_exception(remix_req)
remix_slb = json.loads(remix_res.decode('utf-8'))
print(json.dumps(remix_slb, indent=2))

# list all ecs-id as remix elb backend:
remix_slb_backends = remix_slb['BackendServers']['BackendServer']
remix_slb_backend_ids = []
for backend in remix_slb_backends:
    print(backend['ServerId'])
    remix_slb_backend_ids.append(backend['ServerId'])

# remix ecs-id to ecs-ip:
print("########### SLB Backend ECS Info ###########")
remix_ecs_ip = []
for id in remix_slb_backend_ids:
    # use fun DescribeInstanceAttributeRequest
    ecs_req = DescribeInstanceAttributeRequest.DescribeInstanceAttributeRequest(
    )
    ecs_req.add_query_param('InstanceId', id)
    ecs_res = client.do_action_with_exception(ecs_req)
    ecs = json.loads(ecs_res.decode('utf-8'))
    print(json.dumps(ecs, indent=2))