文章目录
前言
在使用京东云的过程中发现,在云主机导出界面中,导出云主机时并不能一起导出云主机对应的磁盘大小,只能去云磁盘界面去导数据,但是这样有一个问题,当我打开两个execl文件时发现,当一台云主机有多个磁盘时,在进行一一查找云主机的磁盘就比较困难而且麻烦。因此,编写了一个python脚本,通过调用京东云sdk实现导出主机ID、主机IP、主机系统盘、主机磁盘并保存到execl文件中,方便后期维护整理,就不用两个文件再一一对比了。
一、python脚本
1、下载京东云sdk
pip install -U jdcloud_sdk
2、编写python调用脚本
from jdcloud_sdk.core.credential import Credential
from jdcloud_sdk.services.vm.client.VmClient import VmClient
from jdcloud_sdk.services.vm.apis.DescribeInstancesRequest import DescribeInstancesParameters, DescribeInstancesRequest
import json
from openpyxl import Workbook
# 设置Access Key ID和Secret Access Key
access_key = 'xxx'
secret_key = 'xxx'
credential = Credential(access_key, secret_key)
# 创建 VmClient 对象
vm_client = VmClient(credential)
# 分页参数
page_size = 50 # 每页返回 50 条记录
page_number = 1 # 从第 1 页开始查询
total_count = None # 记录总数
instances = [] # 保存所有主机信息的列表
# 创建一个Workbook对象
wb = Workbook()
# 获取默认的sheet
sheet = wb.active
# 设置表头
sheet['A1'] = 'Instance ID'
sheet['B1'] = 'Private IP'
sheet['C1'] = 'System Disk Size (GB)'
sheet['D1'] = 'Data Disk Size (GB)'
try:
while total_count is None or len(instances) < total_count:
# 设置查询参数
parameters = DescribeInstancesParameters('cn-north-1') # 设置地域为华北1
parameters.setPageNumber(page_number)
parameters.setPageSize(page_size)
# 创建 DescribeInstancesRequest 对象
request = DescribeInstancesRequest(parameters)
# 发送请求并获取响应
response = vm_client.send(request)
# 处理响应
if response.error is not None:
print(f'请求失败:{response.error.code} - {response.error.message}')
break
instances.extend(response.result['instances'])
total_count = response.result['totalCount']
print(f'已获取 {len(instances)} / {total_count} 台主机信息')
page_number += 1
print(f'共获取到 {len(instances)} 台主机信息')
# 将主机信息写入表格
row_num = 2 # 从第二行开始写入数据
for instance in instances:
instance_id = instance['instanceId']
private_ip = instance['privateIpAddress']
try:
system_disk_size = instance.get('systemDisk', {}).get('cloudDisk',{}).get('diskSizeGB', 0)
except KeyError:
system_disk_size = -111 # 没有系统盘
data_disk_size = 0
if 'dataDisks' in instance:
for disk in instance['dataDisks']:
try:
data_disk_size += disk.get('cloudDisk',{}).get('diskSizeGB', 0)
except KeyError:
data_disk_size=-222 # 没有数据盘
sheet[f'A{row_num}'] = instance_id
sheet[f'B{row_num}'] = private_ip
sheet[f'C{row_num}'] = system_disk_size
sheet[f'D{row_num}'] = data_disk_size
row_num += 1
# 保存Excel文件
wb.save('host_info.xlsx')
except Exception as e:
print('获取云主机信息时出现错误:{}'.format(str(e)))
二、结果展示
总结
通过编写python调用京东云sdk脚本,极大的提高了环境运维整理效率。而且能一目了然的看到每个实例对应的磁盘信息,减少了手动整理对比时间。