Allow setting the visible name of a host in zabbix (#2919)

In Zabbix, the visible name defaults to the hostname.  This is not very
useful if you try to manage vmware VMs as the so called host_name within
zabbix must be set to the vcenter UUID.

This patch allows you to provide an alias which will be shown with
zabbix.  If its not supplied it will default to host_name.
This commit is contained in:
Jason Cormie 2016-11-07 21:11:22 +00:00 committed by Matt Clay
parent e33303acd5
commit 78e8709085

View file

@ -64,6 +64,11 @@ options:
- Name of the host in Zabbix. - Name of the host in Zabbix.
- host_name is the unique identifier used and cannot be updated using this module. - host_name is the unique identifier used and cannot be updated using this module.
required: true required: true
visible_name:
description:
- Visible name of the host in Zabbix.
required: false
version_added: '2.2'
host_groups: host_groups:
description: description:
- List of host groups the host is part of. - List of host groups the host is part of.
@ -127,6 +132,7 @@ EXAMPLES = '''
login_user: username login_user: username
login_password: password login_password: password
host_name: ExampleHost host_name: ExampleHost
visible_name: ExampleName
host_groups: host_groups:
- Example group1 - Example group1
- Example group2 - Example group2
@ -206,26 +212,30 @@ class Host(object):
template_ids.append(template_id) template_ids.append(template_id)
return template_ids return template_ids
def add_host(self, host_name, group_ids, status, interfaces, proxy_id): def add_host(self, host_name, group_ids, status, interfaces, proxy_id, visible_name):
try: try:
if self._module.check_mode: if self._module.check_mode:
self._module.exit_json(changed=True) self._module.exit_json(changed=True)
parameters = {'host': host_name, 'interfaces': interfaces, 'groups': group_ids, 'status': status} parameters = {'host': host_name, 'interfaces': interfaces, 'groups': group_ids, 'status': status}
if proxy_id: if proxy_id:
parameters['proxy_hostid'] = proxy_id parameters['proxy_hostid'] = proxy_id
if visible_name:
parameters['name'] = visible_name
host_list = self._zapi.host.create(parameters) host_list = self._zapi.host.create(parameters)
if len(host_list) >= 1: if len(host_list) >= 1:
return host_list['hostids'][0] return host_list['hostids'][0]
except Exception as e: except Exception as e:
self._module.fail_json(msg="Failed to create host %s: %s" % (host_name, e)) self._module.fail_json(msg="Failed to create host %s: %s" % (host_name, e))
def update_host(self, host_name, group_ids, status, host_id, interfaces, exist_interface_list, proxy_id): def update_host(self, host_name, group_ids, status, host_id, interfaces, exist_interface_list, proxy_id, visible_name):
try: try:
if self._module.check_mode: if self._module.check_mode:
self._module.exit_json(changed=True) self._module.exit_json(changed=True)
parameters = {'hostid': host_id, 'groups': group_ids, 'status': status} parameters = {'hostid': host_id, 'groups': group_ids, 'status': status}
if proxy_id: if proxy_id:
parameters['proxy_hostid'] = proxy_id parameters['proxy_hostid'] = proxy_id
if visible_name:
parameters['name'] = visible_name
self._zapi.host.update(parameters) self._zapi.host.update(parameters)
interface_list_copy = exist_interface_list interface_list_copy = exist_interface_list
if interfaces: if interfaces:
@ -342,7 +352,7 @@ class Host(object):
# check all the properties before link or clear template # check all the properties before link or clear template
def check_all_properties(self, host_id, host_groups, status, interfaces, template_ids, def check_all_properties(self, host_id, host_groups, status, interfaces, template_ids,
exist_interfaces, host, proxy_id): exist_interfaces, host, proxy_id, visible_name):
# get the existing host's groups # get the existing host's groups
exist_host_groups = self.get_host_groups_by_host_id(host_id) exist_host_groups = self.get_host_groups_by_host_id(host_id)
if set(host_groups) != set(exist_host_groups): if set(host_groups) != set(exist_host_groups):
@ -362,10 +372,12 @@ class Host(object):
if set(list(template_ids)) != set(exist_template_ids): if set(list(template_ids)) != set(exist_template_ids):
return True return True
if proxy_id is not None:
if host['proxy_hostid'] != proxy_id: if host['proxy_hostid'] != proxy_id:
return True return True
if host['name'] != visible_name:
return True
return False return False
# link or clear template of the host # link or clear template of the host
@ -428,7 +440,9 @@ def main():
timeout=dict(type='int', default=10), timeout=dict(type='int', default=10),
interfaces=dict(type='list', required=False), interfaces=dict(type='list', required=False),
force=dict(type='bool', default=True), force=dict(type='bool', default=True),
proxy=dict(type='str', required=False) proxy=dict(type='str', required=False),
visible_name=dict(type='str', required=False)
), ),
supports_check_mode=True supports_check_mode=True
) )
@ -442,6 +456,7 @@ def main():
http_login_user = module.params['http_login_user'] http_login_user = module.params['http_login_user']
http_login_password = module.params['http_login_password'] http_login_password = module.params['http_login_password']
host_name = module.params['host_name'] host_name = module.params['host_name']
visible_name = module.params['visible_name']
host_groups = module.params['host_groups'] host_groups = module.params['host_groups']
link_templates = module.params['link_templates'] link_templates = module.params['link_templates']
inventory_mode = module.params['inventory_mode'] inventory_mode = module.params['inventory_mode']
@ -514,10 +529,10 @@ def main():
if len(exist_interfaces) > interfaces_len: if len(exist_interfaces) > interfaces_len:
if host.check_all_properties(host_id, host_groups, status, interfaces, template_ids, if host.check_all_properties(host_id, host_groups, status, interfaces, template_ids,
exist_interfaces, zabbix_host_obj, proxy_id): exist_interfaces, zabbix_host_obj, proxy_id, visible_name):
host.link_or_clear_template(host_id, template_ids) host.link_or_clear_template(host_id, template_ids)
host.update_host(host_name, group_ids, status, host_id, host.update_host(host_name, group_ids, status, host_id,
interfaces, exist_interfaces, proxy_id) interfaces, exist_interfaces, proxy_id, visible_name)
module.exit_json(changed=True, module.exit_json(changed=True,
result="Successfully update host %s (%s) and linked with template '%s'" result="Successfully update host %s (%s) and linked with template '%s'"
% (host_name, ip, link_templates)) % (host_name, ip, link_templates))
@ -525,8 +540,8 @@ def main():
module.exit_json(changed=False) module.exit_json(changed=False)
else: else:
if host.check_all_properties(host_id, host_groups, status, interfaces, template_ids, if host.check_all_properties(host_id, host_groups, status, interfaces, template_ids,
exist_interfaces_copy, zabbix_host_obj, proxy_id): exist_interfaces_copy, zabbix_host_obj, proxy_id, visible_name):
host.update_host(host_name, group_ids, status, host_id, interfaces, exist_interfaces, proxy_id) host.update_host(host_name, group_ids, status, host_id, interfaces, exist_interfaces, proxy_id, visible_name)
host.link_or_clear_template(host_id, template_ids) host.link_or_clear_template(host_id, template_ids)
host.update_inventory_mode(host_id, inventory_mode) host.update_inventory_mode(host_id, inventory_mode)
module.exit_json(changed=True, module.exit_json(changed=True,
@ -552,7 +567,7 @@ def main():
module.fail_json(msg="Specify at least one interface for creating host '%s'." % host_name) module.fail_json(msg="Specify at least one interface for creating host '%s'." % host_name)
# create host # create host
host_id = host.add_host(host_name, group_ids, status, interfaces, proxy_id) host_id = host.add_host(host_name, group_ids, status, interfaces, proxy_id, visible_name)
host.link_or_clear_template(host_id, template_ids) host.link_or_clear_template(host_id, template_ids)
host.update_inventory_mode(host_id, inventory_mode) host.update_inventory_mode(host_id, inventory_mode)
module.exit_json(changed=True, result="Successfully added host %s (%s) and linked with template '%s'" % ( module.exit_json(changed=True, result="Successfully added host %s (%s) and linked with template '%s'" % (