@joker, sorry für die späte Antwort. Ja ich mache das mit der 1.6. Derzeit mit der p8, p11 und p12, je nachdem, wo ich gerade unterwegs bin.
Das Ergenbis von api.get_ruleset('active_checks:http')
sieht so aus (wenn noch keine Regel existiert):
{
'configuration_hash': '99914b932bd37a20b983c5e7c90ae93b',
'ruleset': {}
}
ruleset
ist ein dictionary mit key=folder_name
und value=list_of_rules
, also sowas wie
{
'': [ rule1, rule2, rule3 ],
'other_folder': [ rule4 ],
}
Ich hatte noch keine Regel definiert, deswegen ist ruleset
bei mir erstmal ein leeres dictionary. Wenn ich da eine neue Regel im Main directory hinzufügen will, geht das so:
result = api.get_ruleset('active_checks:http')
new_rule = {
'condition': {'host_name': ['localhost']},
'options': {'description': 'SSL Cert'},
'value': {'host': {'virthost': 'host2check'},
'mode': ('cert', {'cert_days': (20, 10)}),
'name': 'SSL Cert host2check'}
}
folder = '' # each rule lives in a folder; '' is the "Main directory"
if new_rule not in result['ruleset'].setdefault(folder, []):
result['ruleset'][folder].append(new_rule)
api.set_ruleset('active_checks:http',
result['ruleset'],
result['configuration_hash'])
Der configuration_hash
ist optional. Wenn Du ihn angibst, prüft checkmk, ob sich der Regelsatz zwischen dem get_ruleset
und dem set_ruleset
verändert hat (z.B. durch andere Skripte oder die GUI) und verweigert dann die Ausführung. Wenn Du ihn weglässt, findet keine solche Prüfung statt und set_ruleset
überschreibt den vorhandenen Regelsatz.
Der einfachste Test ist also:
result = api.get_ruleset('active_checks:http')
api.set_ruleset('active_checks:http', result['ruleset'])
Gruß Dirk