VMware: add details about vswitch and dvswitch (#43066)

This fix adds additional details of vswitch and dvswitch and their
respective nics used.

Fixes: #43009

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
pull/43418/head
Abhijeet Kasurde 6 years ago committed by GitHub
parent 1e4831e744
commit 1bab901966
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -22,6 +22,7 @@ description:
- This module can be used to gather facts about vmnics available on the given ESXi host. - This module can be used to gather facts about vmnics available on the given ESXi host.
- If C(cluster_name) is provided, then vmnic facts about all hosts from given cluster will be returned. - If C(cluster_name) is provided, then vmnic facts about all hosts from given cluster will be returned.
- If C(esxi_hostname) is provided, then vmnic facts about given host system will be returned. - If C(esxi_hostname) is provided, then vmnic facts about given host system will be returned.
- Additional details about vswitch and dvswitch with respective vmnic is also provided which is added in 2.7 version.
version_added: '2.5' version_added: '2.5'
author: author:
- Abhijeet Kasurde (@Akasurde) - Abhijeet Kasurde (@Akasurde)
@ -65,14 +66,43 @@ EXAMPLES = r'''
RETURN = r''' RETURN = r'''
hosts_vmnics_facts: hosts_vmnics_facts:
description: description:
- dict with hostname as key and dict with vmnics facts as value - dict with hostname as key and dict with vmnics facts as value.
- details about vswitch and dvswitch is added in version 2.7.
returned: hosts_vmnics_facts returned: hosts_vmnics_facts
type: dict type: dict
sample: { "hosts_vmnics_facts": { "localhost.localdomain": { "all": [ "vmnic0" ], "available": [], "used": [ "vmnic0" ] }}} sample:
{
"10.76.33.204": {
"all": [
"vmnic0",
"vmnic1"
],
"available": [],
"dvswitch": {
"dvs_0002": [
"vmnic1"
]
},
"used": [
"vmnic1",
"vmnic0"
],
"vswitch": {
"vSwitch0": [
"vmnic0"
]
}
}
}
''' '''
try:
from pyVmomi import vim
except ImportError:
pass
from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.vmware import vmware_argument_spec, PyVmomi from ansible.module_utils.vmware import vmware_argument_spec, PyVmomi, get_all_objs
class HostVmnicMgr(PyVmomi): class HostVmnicMgr(PyVmomi):
@ -82,10 +112,23 @@ class HostVmnicMgr(PyVmomi):
esxi_host_name = self.params.get('esxi_hostname', None) esxi_host_name = self.params.get('esxi_hostname', None)
self.hosts = self.get_all_host_objs(cluster_name=cluster_name, esxi_host_name=esxi_host_name) self.hosts = self.get_all_host_objs(cluster_name=cluster_name, esxi_host_name=esxi_host_name)
def find_dvs_by_uuid(self, uuid=None):
dvs_obj = None
if uuid is None:
return dvs_obj
dvswitches = get_all_objs(self.content, [vim.DistributedVirtualSwitch])
for dvs in dvswitches:
if dvs.uuid == uuid:
dvs_obj = dvs
break
return dvs_obj
def gather_host_vmnic_facts(self): def gather_host_vmnic_facts(self):
hosts_vmnic_facts = {} hosts_vmnic_facts = {}
for host in self.hosts: for host in self.hosts:
host_vmnic_facts = dict(all=[], available=[], used=[]) host_vmnic_facts = dict(all=[], available=[], used=[], vswitch=dict(), dvswitch=dict())
host_nw_system = host.configManager.networkSystem host_nw_system = host.configManager.networkSystem
if host_nw_system: if host_nw_system:
nw_config = host_nw_system.networkConfig nw_config = host_nw_system.networkConfig
@ -95,13 +138,20 @@ class HostVmnicMgr(PyVmomi):
proxy_switch_vmnics = [] proxy_switch_vmnics = []
if nw_config.vswitch: if nw_config.vswitch:
for vswitch in nw_config.vswitch: for vswitch in nw_config.vswitch:
host_vmnic_facts['vswitch'][vswitch.name] = []
for vnic in vswitch.spec.bridge.nicDevice: for vnic in vswitch.spec.bridge.nicDevice:
vswitch_vmnics.append(vnic) vswitch_vmnics.append(vnic)
host_vmnic_facts['vswitch'][vswitch.name].append(vnic)
if nw_config.proxySwitch: if nw_config.proxySwitch:
for proxy_config in nw_config.proxySwitch: for proxy_config in nw_config.proxySwitch:
dvs_obj = self.find_dvs_by_uuid(uuid=proxy_config.uuid)
if dvs_obj:
host_vmnic_facts['dvswitch'][dvs_obj.name] = []
for proxy_nic in proxy_config.spec.backing.pnicSpec: for proxy_nic in proxy_config.spec.backing.pnicSpec:
proxy_switch_vmnics.append(proxy_nic.pnicDevice) proxy_switch_vmnics.append(proxy_nic.pnicDevice)
if dvs_obj:
host_vmnic_facts['dvswitch'][dvs_obj.name].append(proxy_nic.pnicDevice)
used_vmics = proxy_switch_vmnics + vswitch_vmnics used_vmics = proxy_switch_vmnics + vswitch_vmnics
host_vmnic_facts['used'] = used_vmics host_vmnic_facts['used'] = used_vmics
@ -122,7 +172,8 @@ def main():
argument_spec=argument_spec, argument_spec=argument_spec,
required_one_of=[ required_one_of=[
['cluster_name', 'esxi_hostname'], ['cluster_name', 'esxi_hostname'],
] ],
supports_check_mode=True,
) )
host_vmnic_mgr = HostVmnicMgr(module) host_vmnic_mgr = HostVmnicMgr(module)

Loading…
Cancel
Save