vmware inventory script enhancements (#17106)

* Allow the user to disable certificate verification
* Allow the user to find VMs only in specific clusters
pull/17129/head
jctanner 8 years ago committed by GitHub
parent b617d62203
commit 14da357feb

@ -27,6 +27,10 @@ guests_only = True
# not be returned. # not be returned.
# prefix_filter = test_ # prefix_filter = test_
# Specify a cluster filter list (colon delimited). Only clusters matching by
# name will be scanned for virtualmachines
#clusters = cluster1,cluster2
[auth] [auth]
# Specify hostname or IP address of vCenter/ESXi server. A port may be # Specify hostname or IP address of vCenter/ESXi server. A port may be
@ -41,3 +45,6 @@ user = ihasaccess
# Specify a password to access the vCenter host. This setting may also be # Specify a password to access the vCenter host. This setting may also be
# defined with the VMWARE_PASSWORD environment variable. # defined with the VMWARE_PASSWORD environment variable.
password = ssshverysecret password = ssshverysecret
# Force SSL certificate checking by default or ignore self-signed certs.
#sslcheck=True

@ -35,6 +35,7 @@ import json
import logging import logging
import optparse import optparse
import os import os
import ssl
import sys import sys
import time import time
import ConfigParser import ConfigParser
@ -54,7 +55,7 @@ logging.getLogger('suds').addHandler(NullHandler())
from psphere.client import Client from psphere.client import Client
from psphere.errors import ObjectNotFoundError from psphere.errors import ObjectNotFoundError
from psphere.managedobjects import HostSystem, VirtualMachine, ManagedObject, Network from psphere.managedobjects import HostSystem, VirtualMachine, ManagedObject, Network, ClusterComputeResource
from suds.sudsobject import Object as SudsObject from suds.sudsobject import Object as SudsObject
@ -90,6 +91,28 @@ class VMwareInventory(object):
auth_password = os.environ.get('VMWARE_PASSWORD') auth_password = os.environ.get('VMWARE_PASSWORD')
if not auth_password and self.config.has_option('auth', 'password'): if not auth_password and self.config.has_option('auth', 'password'):
auth_password = self.config.get('auth', 'password') auth_password = self.config.get('auth', 'password')
sslcheck = os.environ.get('VMWARE_SSLCHECK')
if not sslcheck and self.config.has_option('auth', 'sslcheck'):
sslcheck = self.config.get('auth', 'sslcheck')
if not sslcheck:
sslcheck = True
else:
if sslcheck.lower() in ['no', 'false']:
sslcheck = False
else:
sslcheck = True
# Limit the clusters being scanned
self.filter_clusters = os.environ.get('VMWARE_CLUSTERS')
if not self.filter_clusters and self.config.has_option('defaults', 'clusters'):
self.filter_clusters = self.config.get('defaults', 'clusters')
if self.filter_clusters:
self.filter_clusters = [x.strip() for x in self.filter_clusters.split(',') if x.strip()]
# Override certificate checks
if not sslcheck:
if hasattr(ssl, '_create_unverified_context'):
ssl._create_default_https_context = ssl._create_unverified_context
# Create the VMware client connection. # Create the VMware client connection.
self.client = Client(auth_host, auth_user, auth_password) self.client = Client(auth_host, auth_user, auth_password)
@ -314,8 +337,19 @@ class VMwareInventory(object):
else: else:
prefix_filter = None prefix_filter = None
if self.filter_clusters:
# Loop through clusters and find hosts:
hosts = []
for cluster in ClusterComputeResource.all(self.client):
if cluster.name in self.filter_clusters:
for host in cluster.host:
hosts.append(host)
else:
# Get list of all physical hosts
hosts = HostSystem.all(self.client)
# Loop through physical hosts: # Loop through physical hosts:
for host in HostSystem.all(self.client): for host in hosts:
if not self.guests_only: if not self.guests_only:
self._add_host(inv, 'all', host.name) self._add_host(inv, 'all', host.name)

Loading…
Cancel
Save