Added host inventory option to zabbix_host_facts module (#54341)
This commit is contained in:
parent
73faa376ad
commit
d0efe3d9fe
1 changed files with 36 additions and 7 deletions
|
@ -54,6 +54,13 @@ options:
|
|||
- Remove duplicate host from host result
|
||||
type: bool
|
||||
default: yes
|
||||
host_inventory:
|
||||
description:
|
||||
- List of host inventory keys to display in result.
|
||||
- Whole host inventory is retrieved if keys are not specified.
|
||||
type: list
|
||||
required: false
|
||||
version_added: 2.8
|
||||
extends_documentation_fragment:
|
||||
- zabbix
|
||||
'''
|
||||
|
@ -70,6 +77,21 @@ EXAMPLES = '''
|
|||
timeout: 10
|
||||
exact_match: no
|
||||
remove_duplicate: yes
|
||||
|
||||
- name: Reduce host inventory information to provided keys
|
||||
local_action:
|
||||
module: zabbix_host_facts
|
||||
server_url: http://monitor.example.com
|
||||
login_user: username
|
||||
login_password: password
|
||||
host_name: ExampleHost
|
||||
host_inventory:
|
||||
- os
|
||||
- tag
|
||||
host_ip: 127.0.0.1
|
||||
timeout: 10
|
||||
exact_match: no
|
||||
remove_duplicate: yes
|
||||
'''
|
||||
|
||||
from ansible.module_utils.basic import AnsibleModule
|
||||
|
@ -98,18 +120,19 @@ class Host(object):
|
|||
self._module = module
|
||||
self._zapi = zbx
|
||||
|
||||
def get_hosts_by_host_name(self, host_name, exact_match):
|
||||
def get_hosts_by_host_name(self, host_name, exact_match, host_inventory):
|
||||
""" Get host by host name """
|
||||
search_key = 'search'
|
||||
if exact_match:
|
||||
search_key = 'filter'
|
||||
host_list = self._zapi.host.get({'output': 'extend', 'selectParentTemplates': ['name'], search_key: {'host': [host_name]}})
|
||||
host_list = self._zapi.host.get({'output': 'extend', 'selectParentTemplates': ['name'], search_key: {'host': [host_name]},
|
||||
'selectInventory': host_inventory})
|
||||
if len(host_list) < 1:
|
||||
self._module.fail_json(msg="Host not found: %s" % host_name)
|
||||
else:
|
||||
return host_list
|
||||
|
||||
def get_hosts_by_ip(self, host_ips):
|
||||
def get_hosts_by_ip(self, host_ips, host_inventory):
|
||||
""" Get host by host ip(s) """
|
||||
hostinterfaces = self._zapi.hostinterface.get({
|
||||
'output': 'extend',
|
||||
|
@ -125,7 +148,8 @@ class Host(object):
|
|||
'output': 'extend',
|
||||
'selectGroups': 'extend',
|
||||
'selectParentTemplates': ['name'],
|
||||
'hostids': hostinterface['hostid']
|
||||
'hostids': hostinterface['hostid'],
|
||||
'selectInventory': host_inventory
|
||||
})
|
||||
host[0]['hostinterfaces'] = hostinterface
|
||||
host_list.append(host[0])
|
||||
|
@ -156,7 +180,8 @@ def main():
|
|||
validate_certs=dict(type='bool', required=False, default=True),
|
||||
timeout=dict(type='int', default=10),
|
||||
exact_match=dict(type='bool', required=False, default=False),
|
||||
remove_duplicate=dict(type='bool', required=False, default=True)
|
||||
remove_duplicate=dict(type='bool', required=False, default=True),
|
||||
host_inventory=dict(type='list', default=[], required=False)
|
||||
),
|
||||
supports_check_mode=True
|
||||
)
|
||||
|
@ -175,6 +200,10 @@ def main():
|
|||
timeout = module.params['timeout']
|
||||
exact_match = module.params['exact_match']
|
||||
is_remove_duplicate = module.params['remove_duplicate']
|
||||
host_inventory = module.params['host_inventory']
|
||||
|
||||
if not host_inventory:
|
||||
host_inventory = 'extend'
|
||||
|
||||
zbx = None
|
||||
# login to zabbix
|
||||
|
@ -188,7 +217,7 @@ def main():
|
|||
host = Host(module, zbx)
|
||||
|
||||
if host_name:
|
||||
hosts = host.get_hosts_by_host_name(host_name, exact_match)
|
||||
hosts = host.get_hosts_by_host_name(host_name, exact_match, host_inventory)
|
||||
if is_remove_duplicate:
|
||||
hosts = host.delete_duplicate_hosts(hosts)
|
||||
extended_hosts = []
|
||||
|
@ -200,7 +229,7 @@ def main():
|
|||
module.exit_json(ok=True, hosts=extended_hosts)
|
||||
|
||||
elif host_ips:
|
||||
extended_hosts = host.get_hosts_by_ip(host_ips)
|
||||
extended_hosts = host.get_hosts_by_ip(host_ips, host_inventory)
|
||||
if is_remove_duplicate:
|
||||
hosts = host.delete_duplicate_hosts(extended_hosts)
|
||||
module.exit_json(ok=True, hosts=extended_hosts)
|
||||
|
|
Loading…
Reference in a new issue