@@ -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