In my vSphere Client, I have two servers, Dev and Prod. Using the getallvms.py script found at https://github.com/vmware/pyvmomi-community-samples.git, only the VMs in Prod are listed, but none of the VMs in Dev are found.
The code doesn’t seem to show a way to select a server. How do you set the server so that all the VMs in Dev can be listed?
#!/usr/bin/env python
# (copyright removed for brevity)
"""
Python program for listing the VMs on an ESX / vCenter host
"""
import re
from pyVmomi import vmodl, vim
from tools import cli, service_instance
def print_vm_info(virtual_machine):
"""
Print information for a particular virtual machine or recurse into a
folder with depth protection
"""
# print statement removed for brevity
def main():
"""
Simple command-line program for listing the virtual machines on a system.
"""
parser = cli.Parser()
parser.add_custom_argument('-f', '--find', required=False,
action='store', help='String to match VM names')
args = parser.get_args()
si = service_instance.connect(args)
try:
content = si.RetrieveContent()
container = content.rootFolder # starting point to look into
view_type = [vim.VirtualMachine] # object types to look for
recursive = True # whether we should look into it recursively
container_view = content.viewManager.CreateContainerView(
container, view_type, recursive)
children = container_view.view
if args.find is not None:
pat = re.compile(args.find, re.IGNORECASE)
for child in children:
if args.find is None:
print_vm_info(child)
else:
if pat.search(child.summary.config.name) is not None:
print_vm_info(child)
except vmodl.MethodFault as error:
print("Caught vmodl fault : " + error.msg)
return -1
return 0
# Start program
if __name__ == "__main__":
main()