PYTHON连接VCENTER获取虚拟机的快照信息并打印到EXCEL的简单实现

在同一目录新建一个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()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值