1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00

Update vmware_inventory (#26308)

Fix adds
* Exception handling
* Unit tests

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
This commit is contained in:
Abhijeet Kasurde 2017-07-18 16:50:23 +05:30 committed by jctanner
parent 4e01397817
commit f7c8e7bdab
2 changed files with 39 additions and 25 deletions

View file

@ -39,14 +39,12 @@ from six.moves import configparser
from time import time from time import time
from jinja2 import Environment from jinja2 import Environment
HAS_PYVMOMI = False
try:
from pyVmomi import vim
from pyVim.connect import SmartConnect, Disconnect
HAS_PYVMOMI = True try:
from pyVmomi import vim, vmodl
from pyVim.connect import SmartConnect, Disconnect
except ImportError: except ImportError:
pass sys.exit("ERROR: This inventory script required 'pyVmomi' Python module, it was not able to load it")
try: try:
import json import json
@ -119,14 +117,12 @@ class VMWareInventory(object):
env.filters['regex_match'] = regex_match env.filters['regex_match'] = regex_match
# translation table for attributes to fetch for known vim types # translation table for attributes to fetch for known vim types
if not HAS_PYVMOMI:
vimTable = {} vimTable = {
else: vim.Datastore: ['_moId', 'name'],
vimTable = { vim.ResourcePool: ['_moId', 'name'],
vim.Datastore: ['_moId', 'name'], vim.HostSystem: ['_moId', 'name'],
vim.ResourcePool: ['_moId', 'name'], }
vim.HostSystem: ['_moId', 'name'],
}
@staticmethod @staticmethod
def _empty_inventory(): def _empty_inventory():
@ -347,13 +343,21 @@ class VMWareInventory(object):
''' Make API calls ''' ''' Make API calls '''
instances = [] instances = []
si = SmartConnect(**inkwargs) try:
si = SmartConnect(**inkwargs)
except ssl.SSLError as connection_error:
if '[SSL: CERTIFICATE_VERIFY_FAILED]' in str(connection_error) and self.validate_certs:
sys.exit("Unable to connect to ESXi server due to %s, "
"please specify validate_certs=False and try again" % connection_error)
except Exception as exc:
self.debugl("Unable to connect to ESXi server due to %s" % exc)
sys.exit("Unable to connect to ESXi server due to %s" % exc)
self.debugl('retrieving all instances') self.debugl('retrieving all instances')
if not si: if not si:
print("Could not connect to the specified host using specified " sys.exit("Could not connect to the specified host using specified "
"username and password") "username and password")
return -1
atexit.register(Disconnect, si) atexit.register(Disconnect, si)
content = si.RetrieveContent() content = si.RetrieveContent()
@ -384,12 +388,16 @@ class VMWareInventory(object):
instance_tuples.append((instance, ifacts)) instance_tuples.append((instance, ifacts))
self.debugl('facts collected for all instances') self.debugl('facts collected for all instances')
cfm = content.customFieldsManager try:
if cfm is not None and cfm.field: cfm = content.customFieldsManager
for f in cfm.field: if cfm is not None and cfm.field:
if f.managedObjectType == vim.VirtualMachine: for f in cfm.field:
self.custom_fields[f.key] = f.name if f.managedObjectType == vim.VirtualMachine:
self.debugl('%d custom fieds collected' % len(self.custom_fields)) self.custom_fields[f.key] = f.name
self.debugl('%d custom fields collected' % len(self.custom_fields))
except vmodl.RuntimeFault as exc:
self.debugl("Unable to gather custom fields due to %s" % exc.msg)
return instance_tuples return instance_tuples
def instances_to_inventory(self, instances): def instances_to_inventory(self, instances):

View file

@ -3,11 +3,17 @@ import os
import pickle import pickle
import unittest import unittest
import sys import sys
from nose.plugins.skip import SkipTest
try:
from pyVmomi import vim, vmodl
except ImportError:
raise SkipTest("test_vmware_inventory.py requires the python module 'pyVmomi'")
try: try:
from vmware_inventory import VMWareInventory from vmware_inventory import VMWareInventory
except ImportError: except ImportError:
from nose.plugins.skip import SkipTest
raise SkipTest("test_vmware_inventory.py requires the python module 'vmware_inventory'") raise SkipTest("test_vmware_inventory.py requires the python module 'vmware_inventory'")
# contrib's dirstruct doesn't contain __init__.py files # contrib's dirstruct doesn't contain __init__.py files