使用阿里云SDK查看ecs列表

目录结构

    ├── conf   #定义基础配置中心
    │   ├── acskey.ini
    │   └── mail.ini
    ├── ecs2xls.py
    ├── ecsList.py
    └── libs   #定义公共中心
        ├── __init__.py
        └── base.py
  1. acskey.ini将阿里云用户的AK根据ini文件中***进行替换
[aliyunAK]
accessKey=******
accessSecret=*****
region=*****
  1. 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")
  1. 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
  • 结果演示

   转载规则


《使用阿里云SDK查看ecs列表》 helen 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录