目录结构
├── conf #定义基础配置中心
│ ├── acskey.ini
│ └── mail.ini
├── ecs2xls.py
├── ecsList.py
└── libs #定义公共中心
├── __init__.py
└── base.py
- acskey.ini将阿里云用户的AK根据ini文件中***进行替换
[aliyunAK]
accessKey=******
accessSecret=*****
region=*****
- base.py中利用global定义全局变量(accessKey、accessSecret、region)
# -*- coding: utf-8 -*-
import importlib
import configparser
import sys
#importlib.reload(sys)
#利用configparser读取ini文件内容
config = configparser.ConfigParser()
#注:这个conf/路径不要写错
config.read("conf/acskey.ini")
global region, accessKey, accessSecret
accessKey = config.get("aliyunAK", "accessKey")
accessSecret = config.get("aliyunAK", "accessSecret")
region = config.get("aliyunAK", "region")
- libs/init.py中,定义跨路径模块调用的路径
__all__ = ['base']
注意:全局变量引用请使用如下方式
#声明全局变量的模块
from libs.base import *
根据上面设置完成,程序直接引用变量名即可
通过阿里云SDK获取ECS列表
注意:具体参数请查看阿里云SDK
连接地址:https://help.aliyun.com/document_detail/25506.html?spm=a2c4g.11186623.2.16.6b2815304wYt7L#doc-api-Ecs-DescribeInstances
- 编辑Python脚本文件:ecsList.py
import os
import sys
import json
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkecs.request.v20140526 import DescribeInstancesRequest
from aliyunsdkecs.request.v20140526 import StopInstanceRequest
import datetime
from prettytable import PrettyTable
from libs.base import *
#定义标题
title_list = ["实例名称","操作系统","vpc私网IP","外网IP","内网IP","cpu核数","内存(GB)","状态","付费方式","创建时间","到期时间"]
data_list = []
def utc2local(utctime):
dt = datetime.datetime.strptime(utctime, "%Y-%m-%dT%H:%MZ") + datetime.timedelta(hours=8)
return dt
clt = AcsClient(accessKey,accessSecret,region)
print(region, accessKey, accessSecret)
pt = PrettyTable(title_list)
pt.align["实例ID"] = "l"
pt.padding_width = 2
request = DescribeInstancesRequest.DescribeInstancesRequest()
request.set_accept_format('json')
request.set_PageSize('100')
result = clt.do_action_with_exception(request)
ecsinfo = json.loads((result), encoding='utf-8')
ecslist = ecsinfo['Instances']['Instance']
for instance in ecslist:
instancename = instance['InstanceName'] # 服务器主机名
osname = instance['OSName'] # 系统名称
try:
final_priip = ""
priip = instance['VpcAttributes']['PrivateIpAddress']['IpAddress'] # 定义vpc、IP
for i in range(len(priip)):
if i == 0:
final_priip = priip[i]
else:
final_priip = final_priip + " , " + priip[i]
except:
final_priip = "None"
try:
final_pubip = ""
pubip = instance['PublicIpAddress']['IpAddress']
for i in range(len(pubip)):
if i == 0:
final_pubip = str(pubip[i])
else:
final_pubip = final_pubip + " , " + str(pubip[i])
except:
final_pubip = "None"
try:
final_innerip = ""
innerip = instance['InnerIpAddress']['IpAddress']
for j in range(len(innerip)):
if j == 0:
final_innerip = str(innerip[j])
else:
final_innerip = final_innerip + " , " + str(innerip[j])
except:
final_innerip = "None"
cpu = instance['Cpu']
mem = instance['Memory'] / 1024
status = instance['Status']
instancechargetype = instance['InstanceChargeType']
if instancechargetype == 'PrePaid':
instancechargetype = '预付费'
elif instancechargetype == 'PostPaid':
instancechargetype = '后付费'
else:
instancechargetype = 'None'
createtime = instance['CreationTime']
expiredtime = instance['ExpiredTime']
pt.add_row([instancename, osname, final_priip, final_pubip, final_innerip, cpu, mem, status, instancechargetype,
utc2local(createtime), utc2local(expiredtime)])
data_list.extend([[instancename, osname, final_priip, final_pubip, final_innerip, cpu, mem, status,
instancechargetype, str(utc2local(createtime)), str(utc2local(expiredtime))]])
print(pt)
- 运行
python3 ecsList.py
- 结果演示