zoukankan      html  css  js  c++  java
  • python获取aliyun ECS实例

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    # Description : get ecs from aliyun
    # Author      : quke
    # Date        : 2017-05-16
    
    import json
    import math
    import time
    import random
    import datetime
    import sqlite3
    from aliyunsdkcore import client
    from aliyunsdkecs.request.v20140526 import DescribeInstancesRequest
    
    def coroutine(func):
        def start(*args, **kwargs):
            g = func(*args, **kwargs)
            g.next()
            return g
        return start
    
    @coroutine
    def get_aliyun_ecs(key, secret, zone):
        '''
        aliyun显示每页最大显示数量PageSize 100条
        https://help.aliyun.com/document_detail/35112.html
        '''
        Client = client.AcsClient(key, secret, zone)
    
        request = DescribeInstancesRequest.DescribeInstancesRequest()
        request.set_accept_format('json')
        request.set_PageSize(100)
        response = None
    
        while True:
            pageNumber = (yield response)
            print pageNumber
            request = DescribeInstancesRequest.DescribeInstancesRequest()
            request.set_accept_format('json')
            request.set_PageSize(100)
            request.set_PageNumber(pageNumber)
            response = json.loads(Client.do_action_with_exception(request))
    
    def format_data(jsonData):
        instances = jsonData.get('Instances').get('Instance')
        result = []
    
        for line in instances:
            data = (
                line.get('ZoneId'),
                line.get('InstanceId'),
                line.get('HostName'),
                line.get('InnerIpAddress').get('IpAddress')[0] if line.get('InnerIpAddress').get('IpAddress') else 'null',
                line.get('PublicIpAddress').get('IpAddress')[0] if line.get('PublicIpAddress').get('IpAddress') else 'null',
                u'%d核|%dG' %(line.get('Cpu'),int(line.get('Memory'))/1024),
                datetime.datetime.strptime(line.get('CreationTime'), '%Y-%m-%dT%H:%MZ').strftime('%Y-%m-%d %H:%M:%S'),
                datetime.datetime.strptime(line.get('ExpiredTime'), '%Y-%m-%dT%H:%MZ').strftime('%Y-%m-%d %H:%M:%S'),
            )
            result.append(data)
    
        return result
    
    def insertDB(data):
        conn = sqlite3.connect('/Users/quke/db.sqlite3')
        cursor = conn.cursor()
    
        for line in data:
            cursor.execute('insert into cmdb_aliyunecs("region","instanceId","hostname","inner_ip","outer_ip","hardware","creationTime","expiredTime") values(?,?,?,?,?,?,?,?)', line)
        conn.commit()
    
    if __name__ == '__main__':
        # region https://help.aliyun.com/document_detail/28908.html
        regions = ('cn-beijing', 'cn-hangzhou', 'cn-hongkong', 'us-east-1')
        for region in regions:
            print region
            aliyun_ecs=get_aliyun_ecs('key','secret', region)
            jsonData = aliyun_ecs.send(1)
            formated_data = format_data(jsonData)
            insertDB(formated_data)
    
            totalCount = jsonData.get('TotalCount')
            totalPage = int(math.ceil(totalCount/float(100))) + 1
    
            for pageNumber in range(2, totalPage):
                time.sleep(random.random())
                jsonData = aliyun_ecs.send(pageNumber)
                formated_data = format_data(jsonData)
                insertDB(formated_data)
    

      

  • 相关阅读:
    GitHub 和 Gitee 开源免费 10 个超赞后台管理面板,看完惊呆了!
    LeetCode234.回文链表
    LeetCode104.二叉树的最大深度
    LeetCode142.环形链表II(链表中环的入口节点)
    云原生动态周刊:你订阅 GitHub README 播客了吗?
    云原生爱好者周刊:Crossplane 成为 CNCF 孵化项目
    凌晨 12 点突发 istio 生产事故!一顿操作猛如虎解决了
    新东方在有状态服务 In K8s 的实践
    面向无人驾驶 “云端大脑” 可用性的云原生实践
    Qunar 云原生容器化落地实践
  • 原文地址:https://www.cnblogs.com/txwsqk/p/6863263.html
Copyright © 2011-2022 走看看