在同一目录新建一个pwds.txt
写上vcenter的IP地址或域名,有权限查询快照的用户名,密码,用一个空格分隔
# -*- coding: utf-8 -*-
import atexit
import argparse
import sys
import time
import ssl
from pyVmomi import vim, vmodl
from pyVim.task import WaitForTask
from pyVim import connect
from pyVim.connect import Disconnect, SmartConnect, GetSi
import datetime
import xlsxwriter
reload(sys)
sys.setdefaultencoding('utf-8')
def get_all_hosts(si):
hosts = []
content = si.RetrieveContent()
subFolders = content.rootFolder.childEntity
for sf in subFolders:
children = sf.hostFolder.childEntity
for computeresource in children:
if computeresource.__class__.__name__ == "vim.ClusterComputeResource":
for host in computeresource.host:
if host.summary.runtime.connectionState == 'connected':
hosts.append(host)
elif computeresource.__class__.__name__ == 'vim.Folder':
for folder in computeresource.childEntity:
for host in folder.host:
if host.summary.runtime.connectionState == 'connected':
hosts.append(host)
else:
print "skip---"
continue
return hosts
def get_all_vm_snapshots(vm):
results = []
try:
rootSnapshots = vm.snapshot.rootSnapshotList
except:
rootSnapshots = []
for snapshot in rootSnapshots:
results.append(snapshot)
results += get_child_snapshots(snapshot)
return results
def get_child_snapshots(snapshot):
results = []
snapshots = snapshot.childSnapshotList
for snapshot in snapshots:
results.append(snapshot)
results += get_child_snapshots(snapshot)
return results
if __name__ == '__main__':
from pyVim.connect import SmartConnectNoSSL, Disconnect
#si = SmartConnectNoSSL(host="vcenter", user='users', pwd='pwds', port=443)
myfile = open("pwds.txt", 'r')
lines=myfile.readlines()
line0=lines[0]
con = line0.split()
hosts=con[0].strip()
users=con[1].strip()
pwds=con[2].strip()
si = SmartConnectNoSSL(host=hosts,user=users,pwd=pwds, port=443)
atexit.register(Disconnect, si)
hosts = get_all_hosts(si)
#snapshots = {}
nowtime = time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime(time.time())) + ""
filenames = nowtime + 'snapshots.xlsx'
workbook1 = xlsxwriter.Workbook(filenames)
worksheet = workbook1.add_worksheet()
t1 = '虚拟机快照信息的统计'
format = workbook1.add_format()
format.set_bold()
yellow = workbook1.add_format({'align': 'center', 'valign': 'vcenter', 'font_size': 22, 'fg_color': 'FFC1C1'})
yellow.set_bold()
# worksheet.merge_range(0,0,0,4,t1,yellow)
worksheet.merge_range('A1:B1',t1,yellow)
worksheet.set_row(0, 38)
worksheet.set_column("A:A",30)
worksheet.set_column("B:B",60)
title = [u'虚拟机名称',u'快照名称']
format = workbook1.add_format()
# worksheet.set_column(0,15,20)
format = workbook1.add_format({'align': 'center','valign': 'vcenter'})
format.set_bold()
worksheet.write_row('A2', title, format)
worksheet.set_row(1, 25)
row = 2
for host in hosts:
vms = host.vm
for vm in vms:
snapshots = get_all_vm_snapshots(vm)
if len(snapshots) > 0:
#lenvmsnaps=len(snapshots)
print(vm.name)+ "---"
worksheet.write(row,0,vm.name)
rows = row
for snapshot in snapshots:
print snapshot.name
worksheet.write(rows,1,snapshot.name)
rows=rows+1
print "*****"
row=row+len(snapshots)
workbook1.close()