#!/usr/bin/env python
# coding: utf-8
# author: Wang XiaoQiang '''
功能介绍:
1、调用阿里云API,收集所有区域 ECS 信息
2、将需要的数据整理、生成 Excel 文档
3、关于阿里 sdk 的安装,api 的调用请参考阿里云官网
4、xlsxwriter 请参考这里:http://xlsxwriter.readthedocs.org/
''' import json, sys try:
from termcolor import colored
from xlsxwriter import workbook
from aliyunsdkcore import client
from aliyunsdkecs.request.v20140526 import DescribeInstancesRequest
except ImportError as e:
print(colored('%s : %s' % ('Error', e), 'red'))
exit(9) reload(sys) sys.setdefaultencoding('utf8') def get_sys_info(key, secret, zone):
'''
1、获取该区域全部主机详细信息
2、参数:cn-qingdao、cn-hangzhou、cn-beijing 等
'''
# 与阿里云建立有效连接
clt = client.AcsClient(key, secret, zone)
# 获取该区域全部实例详细信息
request = DescribeInstancesRequest.DescribeInstancesRequest()
# 将数据格式化成 json,默认为 XML
request.set_accept_format('json')
# 发起请求,获取数据
result = json.loads(clt.do_action(request)).get('Instances').get('Instance') return result def format_data(data_info):
'''
从全部数据中整理出需要的数据
'''
result = [] for line in data_info:
data = (
line.get('InstanceId'),
line.get('ZoneId'),
line.get('HostName'),
line.get('InstanceName'),
line.get('PublicIpAddress').get('IpAddress')[0],
line.get('InnerIpAddress').get('IpAddress')[0],
line.get('Cpu'),
line.get('Memory'),
line.get('InternetMaxBandwidthOut'),
line.get('Status'),
line.get('CreationTime'),
line.get('ExpiredTime')
)
result.append(data) return result def write_excel(file, data):
'''
1、设置 Excel 样式
2、将数据写入到 Excel 中
'''
# 生成 Excel 文件
work = workbook.Workbook(file)
# 建立工作表,表名默认
worksheet = work.add_worksheet()
# 设置字体加粗、字体大小
format_title = work.add_format({'bold': True, 'font_size': 16})
# 设置水平对齐、垂直对齐
format_title.set_align('center')
format_title.set_align('vcenter') format_body = work.add_format({'font_size': 14})
# 设置样式,行高、列宽
worksheet.set_row(0, 25)
worksheet.set_column(0, 0, 30)
worksheet.set_column(1, 1, 20)
worksheet.set_column(2, 3, 28)
worksheet.set_column(4, 5, 25)
worksheet.set_column(6, 6, 12)
worksheet.set_column(7, 9, 16)
worksheet.set_column(10, 11, 25)
# 定义表头
title = (
'实例 ID',
'所在区域',
'主机名称',
'主机别名',
'公网地址',
'私网地址',
'CPU 核数',
'内存大小 MB',
'网络带宽 MB',
'运行状态',
'创建时间',
'过期时间'
) row = 0
col = 0
# 表头写入文件,引用样式
for item in title:
worksheet.write(row, col, item, format_title)
col+=1
# 内容写入文件,引用样式
for line in data:
row+=1
col = 0
for key in line:
worksheet.write(row, col, key, format_body)
col+=1 work.close() def main(): key = 'Access Key Id'
secret = 'Access Key Secret'
zones = ['cn-beijing', 'cn-shanghai', 'cn-qingdao', 'cn-hangzhou'] filename = './aliyunSystemToExcel.xlsx' result = [] for zone in zones:
info = get_sys_info(key, secret, zone)
data = format_data(info) [ result.append(line) for line in data ] write_excel(filename, result) if __name__ == '__main__':
main()

Python 调用阿里云 API 收集 ECS 数据的更多相关文章

  1. 用Python调用华为云API接口发短信

    [摘要] 用Python调用华为云API接口实现发短信,当然能给调用发短信接口前提条件是通过企业实名认证,而且有一个通过审核的短信签名,话不多说,showcode #!/usr/bin/python3 ...

  2. python 调用阿里云服务器api创建服务器

    首先安装阿里云SDK pip install aliyun-python-sdk-core pip install aliyun-python-sdk-ecs 可以配合jenkins传递参数 #!/u ...

  3. 调用阿里云API 的demo示例(java/python)

    Java 示例 // 创建DefaultAcsClient实例并初始化 DefaultProfile profile = DefaultProfile.getProfile(vo.getAliRegi ...

  4. 用Python调用阿里云的短信接口

    #!/usr/bin/env python# -*- coding:utf-8 -*-# Author:Frank import uuidimport datetimeimport hmacimpor ...

  5. 【阿里云API】 阿里云API调用的若干说明

    阿里云API 为了监控我们使用的一些阿里云产品,需要些一些脚本,定时调用这些脚本来获得相关阿里云产品的信息. ■ 概述 调用阿里云API大约分成两类方法,一个是直接从HTTP协议开始,自己根据阿里云的 ...

  6. 阿里云 API 签名机制的 Python 实现

    在调用阿里云 API 的时候,最让人头疼的就是 API 的签名(Signature)机制,阿里云在通用文档中也有专项说明,但是仅仅有基于 Java 的实现代码示例.所以这里基于 Python 来分析下 ...

  7. 通过SDK和API获取阿里云RDS的监控数据

    阿里云的RDS自带的监控系统获取数据不怎么直观,想要通过API获取数据通过zabbix显示,因为网上资料缺乏和其他一些原因,获取API签名很困难,但使用阿里云的SDK可以完美避开获取签名的步骤. 阿里 ...

  8. zabbix通过SDK和API获取阿里云RDS的监控数据

    阿里云的RDS自带的监控系统获取数据不怎么直观,想要通过API获取数据通过zabbix显示,因为网上资料缺乏和其他一些原因,获取API签名很困难,但使用阿里云的SDK可以完美避开获取签名的步骤. 阿里 ...

  9. C#调用阿里云CDN API刷新缓存

    使用CDN必须要解决CDN缓存的问题,要么在每次更新文件时生成不同的URL,要么在每次更新文件时刷新CDN缓存.我们在一个实际应用场景中用到了后者,所以需要调用阿里云CDN的API进行缓存刷新的操作. ...

随机推荐

  1. POJ1201 Intervals【差分约束系统】

    Description You are given n closed, integer intervals [ai, bi] and n integers c1, ..., cn. Write a p ...

  2. 如何实现一个可以用 await 异步等待的 Awaiter

    .NET 和 C# 共同给我们带来的 async/await 异步编程模型(TAP)用起来真的很爽.为了实现异步等待,我们只需要在一切能够能够异步等待的方法前面加上 await 即可.能够异步等待的最 ...

  3. Redis 字符串与哈希

    /*** * 字符串 redis里的字符串 ***/ //设置key的值 redis 127.0.0.1:6379> set key 'my name is imay' //设置值的过期时间 ( ...

  4. timequest 中set input delay set output delay 的使用

    set_input_delay/ set_output_delay TimeQuest出现以后,随之 set input delay 与 set output delay 也跟着出现,该约束命令用“外 ...

  5. C# winform中自定义用户控件 然后在页面中调用用户控件的事件

    下面是用户控件的代码: using System; using System.Collections.Generic; using System.ComponentModel; using Syste ...

  6. Java 设计模式之建造者模式(四)

    原文地址:Java 设计模式之建造者模式(四) 博客地址:http://www.extlight.com 一.前言 今天继续介绍 Java 设计模式中的创建型模式--建造者模式.上篇设计模式的主题为 ...

  7. 从内存的角度观察 堆、栈、全局区(静态区)(static)、文字常量区、程序代码区

    之前写了一篇堆栈的,这里再补充下内存其他的区域 1.栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈. 2.堆区(heap) — 一般由程 ...

  8. expdp实现oracle远程服务器导出到本地

    expdp导出 expdp user/pwd@orcl directory=dd network_link=dblink dumpfile=fileName.dmp //user为本地用户名 //ne ...

  9. Metaweblog博客分发体验

    在8月份OpenLiveWriter 这篇文章使用博客客户端撰写做了metaweblog的个人服务,支持通过OpenLiveWriter发博客到本站(OurJS),然后再分发到其他博客平台(目前就os ...

  10. IDEA開發 java web 初步

    作爲一個小白,我也不知道爲啥同學們喜歡用IDEA開發,而不選擇eclipse,但是在項目學習中eclipse卻真的多次出現問題,無奈之下,本人也安裝了一個IDEA作爲學習使用.參考了博客開始使用這個工 ...