API Call zur Anlage von Hosts

Hallo zusammen,

meine Checkmk-Installation läuft soweit schon sehr zufriedenstellend. Ich bin inzwischen bei der API angekommen. Ich möchte meine Hosts inklusive ihrer Parents in bestimmten Ordnern anlegen. Das reine Anlegen von Hosts klappt auch wunderbar, aber ich schaffe es nicht, die Parents zu definieren.

So lege ich die Hosts an:

$Body = @{
action=“add_host”
_username=“automation”
_secret=“mysecret”
request_format=“json”
output_format=“json”
hostname=“myserver”
folder=“myfolder”
}

Invoke-WebRequest -Uri “https://cmkserver/instance/check_mk/webapi.py” -Body $Body

Wenn ich allerdings ein Parent angebe, bekomme ich eine Fehlermeldung.

Mein Aufruf:

$Body = @{
action=“add_host”
_username=“automation”
_secret=“mysecret”
request_format=“json”
output_format=“json”
hostname=“myserver”
folder=“myfolder”
attributes=@{
parents=“myparenthost”
}
}

Fehler:

{“result”: “Unhandled exception: Traceback (most recent call last):\n File “/omd/sites/myinstance/lib/python/cmk/gui/webapi.py”, line 145, in page_api\n response = _execute_action(api_call, request_object)\n File “/omd/sites/myinstance/lib/python/cmk/gui/webap
i.py”, line 230, in _execute_action\n return _execute_action_no_lock(api_call, request_object)\n File “/omd/sites/myinstance/lib/python/cmk/gui/webapi.py”, line 240, in _execute_action_no_lock\n “result”: api_call"handler",\n File
“/omd/sites/myinstance/lib/python/cmk/gui/plugins/webapi/webapi.py”, line 275, in add\n validate_host_attributes(attributes, new=True)\n File “/omd/sites/myinstance/lib/python/cmk/gui/plugins/webapi/utils.py”, line 119, in validate_host_attributes\n dict(
(key, value) for key, value in attributes.items() if not key.startswith("tag
”)), new)\nAttributeError: ‘unicode’ object has no attribute ‘items’\n", “result_code”: 1}

Ich habe Checkmk in der Raw-Edition in Version 1.6.0p13 im Einsatz. Habt Ihr eine Idee, was ich falsch mache?

Vielen Dank. :slight_smile:

Die WATO-API bedient sich momentan leider noch etwas umständlich, das soll ja in 1.7 mit der REST-API besser werden.

Die Variablen action bis output_format gehören nicht in den Body, sondern direkt als Parameter in die URL. Der Request-Body ist dann eine JSON-Struktur mit dem Rest.

Hi

das ist leider nicht richtig. Wenn ich die von Dir genannte Verfahrensweise nehme, funktioniert der Aufruf gar nicht. Ich habe es wie oben beschrieben mit get_host hinbekommen. add_host funktioniert ja auch, solange ich keine Attribute definiere. :slight_smile:

Warum der Aufruf nicht klappt, wenn ich Benutzername und Co. an die URl hänge, weiß ich nicht, abe die API erkennt dann den reqest-Teil nicht. Muss also auch so klappen, wie oben geschrieben.

Danke trotzdem.

Hallo zusammen,

keine Ahnung warum, aber so funktioniert’s:

$Parent = myparent
$MyHost = myhost

$Body = @{
attributes=@{
parents=@($Parent)
}
} | ConvertTo-Json

$Uri = -join(“https://myserver/myinstance/check_mk/webapi.py?action=add_host&_username=automation&_secret=mysecret&request_format=json&output_format=json&hostname=”, $MyHost, “&folder=myfolder”)
$Data = -join(“request=”, $Body)
$result = Invoke-WebRequest -Uri $Uri -Body $Data -Method Post

Wie immer würde ich bei solchen Problemen hierin verweißen :slight_smile:

Macht die Arbeit wesentlich einfach im Umgang mit der API

2 Likes

Hallo Andreas,

hilft aber nicht, wenn man nativ PowerShell machen möchte. :slight_smile: Für Linux sicher sehr hilfreich.

Das ist ein Argument. Nur wenn du die API häufiger benutzt würde ich empfehlen auch von Windows aus dies mittels der bestehenden Python Bindings zu machen. Hab ich selbst in zwei Systemen im Einsatz.
Geht von Windows aus genau so Problemlos wie von Linux.

1 Like

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.