@@ -55,7 +55,7 @@ class ZbxTemplate(object):
5555 ('snmpv3_contextname', None), ('snmpv3_securityname', None),
5656 ('snmpv3_securitylevel', 0), ('snmpv3_authprotocol', 0),
5757 ('snmpv3_authpassphrase', None), ('snmpv3_privprotocol', 0),
58- ('snmpv3_privpassphrase', None), ('formula', 1),
58+ ('snmpv3_privpassphrase', None), ('logtimefmt', None), (' formula', 1),
5959 ('delay_flex', None), ('params', None),
6060 ('ipmi_sensor', None), ('data_type', 0), ('authtype', 0),
6161 ('username', None), ('password', None), ('publickey', None),
@@ -89,14 +89,20 @@ class ZbxTemplate(object):
8989 ('calc_fnc', 2), ('type', Template.GRAPH_TYPE.normal)
9090 ]
9191
92+ condition_defaults = [
93+ ('macro', None), ('value', 0),
94+ ('operator', None),
95+ ('formulaid', None)
96+ ]
97+
9298 discovery_defaults = [
9399 ('name', None), ('type', 2), ('snmp_community', None),
94100 ('snmp_oid', None), ('delay', 60), ('status', 0),
95101 ('allowed_hosts', None), ('snmpv3_contextname', None),
96102 ('snmpv3_securityname', None), ('snmpv3_securitylevel', 0),
97103 ('snmpv3_authprotocol', 0), ('snmpv3_authpassphrase', None),
98104 ('snmpv3_privprotocol', 0), ('snmpv3_privpassphrase', None),
99- ('delay_flex', None), ('params', None), ('filter', None),
105+ ('delay_flex', None), ('params', None),
100106 ('ipmi_sensor', None), ('authtype', 0),
101107 ('username', None), ('password', None), ('publickey', None),
102108 ('privatekey', None), ('port', None), ('lifetime', 7),
@@ -194,7 +200,23 @@ def graph(self, args={}, xml_key='graph'):
194200 self._format_args(self.graph_values_defaults, args),
195201 graph_items, xml_key)
196202
197- def discovery_rule(self, rule={}, items=[], triggers=[], graphs=[]):
203+ # condition for template creation for zabbix version 4.4
204+ def condition(self, args={}, xml_key='condition'):
205+ try:
206+ conditions = args['condition']
207+ except KeyError:
208+ raise LookupError(
209+ 'Miss item in conditions: {0}.'.format(args))
210+ res = ''
211+ for idx, item in enumerate(conditions):
212+ res += '<{1}>{0}</{1}>'.format(
213+ self._format_args(self.condition_defaults, item),
214+ xml_key)
215+ res = '<conditions>' + res + '</conditions>' + '<formula/><evaltype>0</evaltype>'
216+
217+ return res
218+
219+ def discovery_rule(self, rule={},conditions=[], items=[], triggers=[], graphs=[]):
198220
199221 result_items = '<item_prototypes>'
200222 for item in items:
@@ -214,10 +236,25 @@ def discovery_rule(self, rule={}, items=[], triggers=[], graphs=[]):
214236 graph, xml_key='graph_prototype')
215237 result_graphs += '</graph_prototypes>'
216238
217- result = '<discovery_rule>{0}{1}{2}{3}</discovery_rule>'
239+ if len(conditions) > 0:
240+
241+ result_conditions = '<filter>'
242+ for condition in conditions:
243+ result_conditions += self.condition(
244+ condition, xml_key='condition')
245+ result_conditions += '</filter>'
246+ else:
247+ result = '<discovery_rule>{0}{1}{2}{3}</discovery_rule>'
248+ if ('filter', None) not in self.discovery_defaults:
249+ self.discovery_defaults.append(('filter', None))
250+ return result.format(
251+ self._format_args(self.discovery_defaults, rule),
252+ result_items, result_triggers, result_graphs)
253+
254+ result = '<discovery_rule>{0}{1}{2}{3}{4}</discovery_rule>'
218255 return result.format(
219256 self._format_args(self.discovery_defaults, rule),
220- result_items, result_triggers, result_graphs)
257+ result_conditions, result_items, result_triggers, result_graphs)
221258
222259 def _application(self):
223260 result = '<applications><application><name>{0}'
0 commit comments