#!/usr/bin/env python import pyVmomi from pyVmomi import vim from pyVmomi import vmodl from pyVim.connect import SmartConnect, Disconnect, SmartConnectNoSSL import atexit import argparse import getpass import sys import time import json def get_args(): parser = argparse.ArgumentParser(description='Arguments for talking to vCenter') # extending disk arguments parser.add_argument('-H', '--host', required=True, action='store', help='vsphere host to connect to') parser.add_argument('-o', '--port', type=int, default=443, action='store', help='port to connect on') parser.add_argument('-u', '--user', required=True, action='store', help='user name to use') parser.add_argument('-p', '--password', required=False, action='store', help='password to use') parser.add_argument('-v', '--vm-name', required=True, action='store', help='name of the vm') parser.add_argument('-S', '--skip-ssl', action='store_true', default=False) args = parser.parse_args() if not args.password: args.password = getpass.getpass(prompt='Enter password: ') return args def get_obj(content, vimtype, name): obj = None container = content.viewManager.CreateContainerView(content.rootFolder, vimtype, True) for c in container.view: if c.name == name: obj = c break return obj def is_disk(device): if isinstance(device, vim.vm.device.VirtualDisk): return True return False def main(): args = get_args() if args.skip_ssl == True: si = SmartConnectNoSSL( host=args.host, user=args.user, pwd=args.password, port=args.port) else: si = SmartConnect( host=args.host, user=args.user, pwd=args.password, port=args.port) atexit.register(Disconnect, si) content = si.RetrieveContent() vm = get_obj(content, [vim.VirtualMachine], args.vm_name) virtualDiskManager = si.content.virtualDiskManager vm_disks = [] disks = [] for device in vm.config.hardware.device: if is_disk(device): vm_disks.append(device) for disk in vm_disks: disks.append(dict( label = disk.deviceInfo.label, uuid = disk.backing.uuid, fullpath = disk.backing.fileName, size = disk.capacityInBytes )) print(json.dumps(disks)) main()