summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--filter_plugins/oo_filters.py12
-rw-r--r--playbooks/adhoc/noc/create_host.yml55
-rwxr-xr-xroles/os_zabbix/library/zbxapi.py26
3 files changed, 85 insertions, 8 deletions
diff --git a/filter_plugins/oo_filters.py b/filter_plugins/oo_filters.py
index e8f60ca73..aeeeb4b68 100644
--- a/filter_plugins/oo_filters.py
+++ b/filter_plugins/oo_filters.py
@@ -230,6 +230,15 @@ class FilterModule(object):
# Gather up the values for the list of keys passed in
return [x for x in data if x[filter_attr]]
+ @staticmethod
+ def oo_build_zabbix_list_dict(values, string):
+ ''' Build a list of dicts with string as key for each value
+ '''
+ rval = []
+ for value in values:
+ rval.append({string: value})
+ return rval
+
def filters(self):
''' returns a mapping of filters to methods '''
return {
@@ -242,5 +251,6 @@ class FilterModule(object):
"oo_ec2_volume_definition": self.oo_ec2_volume_definition,
"oo_combine_key_value": self.oo_combine_key_value,
"oo_split": self.oo_split,
- "oo_filter_list": self.oo_filter_list
+ "oo_filter_list": self.oo_filter_list,
+ "oo_build_zabbix_list_dict": self.oo_build_zabbix_list_dict
}
diff --git a/playbooks/adhoc/noc/create_host.yml b/playbooks/adhoc/noc/create_host.yml
new file mode 100644
index 000000000..d250e6e69
--- /dev/null
+++ b/playbooks/adhoc/noc/create_host.yml
@@ -0,0 +1,55 @@
+---
+- name: 'Create a host object in zabbix'
+ hosts: localhost
+ gather_facts: no
+ roles:
+ - os_zabbix
+ post_tasks:
+
+ - zbxapi:
+ server: https://noc2.ops.rhcloud.com/zabbix/api_jsonrpc.php
+ zbx_class: Template
+ state: list
+ params:
+ host: ctr_test_kwoodson
+ filter:
+ host:
+ - ctr_kwoodson_test_tmpl
+
+ register: tmpl_results
+
+ - debug: var=tmpl_results
+
+#ansible-playbook -e 'oo_desc=kwoodson test' -e 'oo_name=kwoodson test name' -e 'oo_start=1435715357' -e 'oo_stop=1435718985' -e 'oo_hostids=11549' create_maintenance.yml
+- name: 'Create a host object in zabbix'
+ hosts: localhost
+ gather_facts: no
+ roles:
+ - os_zabbix
+ post_tasks:
+
+ - zbxapi:
+ server: https://noc2.ops.rhcloud.com/zabbix/api_jsonrpc.php
+ zbx_class: Host
+ state: absent
+ params:
+ host: ctr_test_kwoodson
+ interfaces:
+ - type: 1
+ main: 1
+ useip: 1
+ ip: 127.0.0.1
+ dns: ""
+ port: 10050
+ groups:
+ - groupid: 1
+ templates: "{{ tmpl_results.results | oo_collect('templateid') | oo_build_zabbix_list_dict('templateid') }}"
+ output: extend
+ filter:
+ host:
+ - ctr_test_kwoodson
+
+ register: host_results
+
+ - debug: var=host_results
+
diff --git a/roles/os_zabbix/library/zbxapi.py b/roles/os_zabbix/library/zbxapi.py
index b5fa5ee2b..48f294938 100755
--- a/roles/os_zabbix/library/zbxapi.py
+++ b/roles/os_zabbix/library/zbxapi.py
@@ -103,7 +103,6 @@ class ZabbixAPI(object):
# pylint: disable=no-member
# This method does not exist until the metaprogramming executed
- # This is permanently disabled.
results = self.user.login(user=self.username, password=self.password)
if results[0]['status'] == '200':
@@ -251,17 +250,26 @@ def exists(content, key='result'):
return True
-def diff_content(from_zabbix, from_user):
+def diff_content(from_zabbix, from_user, ignore=None):
''' Compare passed in object to results returned from zabbix
'''
- terms = ['search', 'output', 'groups', 'select', 'expand']
+ terms = ['search', 'output', 'groups', 'select', 'expand', 'filter']
+ if ignore:
+ terms.extend(ignore)
regex = '(' + '|'.join(terms) + ')'
retval = {}
for key, value in from_user.items():
if re.findall(regex, key):
continue
- if from_zabbix[key] != str(value):
+ # special case here for templates. You query templates and
+ # the zabbix api returns parentTemplates. These will obviously fail.
+ # So when its templates compare against parentTemplates.
+ if key == 'templates' and from_zabbix.has_key('parentTemplates'):
+ if from_zabbix['parentTemplates'] != value:
+ retval[key] = value
+
+ elif from_zabbix[key] != str(value):
retval[key] = str(value)
return retval
@@ -280,6 +288,7 @@ def main():
params=dict(),
debug=dict(default=False, type='bool'),
state=dict(default='present', type='str'),
+ ignore=dict(default=None, type='list'),
),
#supports_check_mode=True
)
@@ -306,10 +315,12 @@ def main():
zapi = ZabbixAPI(api_data)
+ ignore = module.params['ignore']
zbx_class = module.params.get('zbx_class')
rpc_params = module.params.get('params', {})
state = module.params.get('state')
+
# Get the instance we are trying to call
zbx_class_inst = zapi.__getattribute__(zbx_class.lower())
@@ -337,14 +348,14 @@ def main():
module.exit_json(changed=True, results=content['result'], state="absent")
if state == 'present':
- # It's not there, create it!
+ # It's not there, create it!
if not exists(content):
zbx_action_method = zapi.__getattribute__(zbx_class.capitalize()).__dict__['create']
_, content = zbx_action_method(zbx_class_inst, rpc_params)
module.exit_json(changed=True, results=content['result'], state='present')
- # It's there and the same, do nothing!
- diff_params = diff_content(content['result'][0], rpc_params)
+ # It's there and the same, do nothing!
+ diff_params = diff_content(content['result'][0], rpc_params, ignore)
if not diff_params:
module.exit_json(changed=False, results=content['result'], state="present")
@@ -368,3 +379,4 @@ def main():
from ansible.module_utils.basic import *
main()
+