Module: check_mk
Branch: master
Commit: f113b9dc2c1d971879aa30d28b0cdd337a47306e
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=f113b9dc2c1d97…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Wed Dec 26 20:34:26 2018 +0100
New host bulk API calls
Added a new API call "add_hosts" which does the same work as the
"add_host" calls with the difference that it may create multiple
hosts.
The request must contain a single key "hosts" which must be a list
containing the single host specifications equal to the add_host call.
Change-Id: I4314b54c7c9868d5ed02fb8b566310a3c0160e04
---
cmk/gui/plugins/webapi/webapi.py | 9 +++++++++
tests/integration/cmk/gui/test_webapi.py | 10 ++++++++++
tests/testlib/__init__.py | 20 ++++++++++++++++++++
3 files changed, 39 insertions(+)
diff --git a/cmk/gui/plugins/webapi/webapi.py b/cmk/gui/plugins/webapi/webapi.py
index 27c90b7..9e9daff 100644
--- a/cmk/gui/plugins/webapi/webapi.py
+++ b/cmk/gui/plugins/webapi/webapi.py
@@ -216,6 +216,10 @@ class APICallHosts(APICallCollection):
"handler": self._add,
"locking": True,
},
+ "add_hosts": {
+ "handler": self._add_hosts,
+ "locking": True,
+ },
"edit_host": {
"handler": self._edit,
"locking": True,
@@ -282,6 +286,11 @@ class APICallHosts(APICallCollection):
cluster_nodes = map(str, cluster_nodes)
watolib.Folder.folder(folder_path).create_hosts([(hostname, attributes,
cluster_nodes)])
+ def _add_hosts(self, request):
+ validate_request_keys(request, required_keys=["hosts"])
+ for host_request in request["hosts"]:
+ self._add(host_request)
+
def _edit(self, request):
validate_request_keys(
request,
diff --git a/tests/integration/cmk/gui/test_webapi.py
b/tests/integration/cmk/gui/test_webapi.py
index c513722..298a3fd 100644
--- a/tests/integration/cmk/gui/test_webapi.py
+++ b/tests/integration/cmk/gui/test_webapi.py
@@ -59,6 +59,16 @@ def test_add_host_no_folder_create(web):
assert "Unable to create parent folder" in exc_msg
+def test_add_hosts(web):
+ hosts = ["test-hosts1", "test-hosts2"]
+ try:
+ web.add_hosts([(hostname, "", {
+ "ipaddress": "127.0.0.1",
+ }) for hostname in hosts])
+ finally:
+ web.delete_hosts(hosts)
+
+
def test_get_all_hosts_basic(web):
try:
web.add_host(
diff --git a/tests/testlib/__init__.py b/tests/testlib/__init__.py
index 743772b..14f00e0 100644
--- a/tests/testlib/__init__.py
+++ b/tests/testlib/__init__.py
@@ -1263,6 +1263,26 @@ class CMKWebSession(WebSession):
assert host["path"] == folder
assert host["attributes"] == attributes
+ # hosts: List of tuples of this structure: (hostname, folder_path, attributes)
+ def add_hosts(self, create_hosts):
+ hosts = [{
+ "hostname": hostname,
+ "folder": folder,
+ "attributes": attributes,
+ "create_folders": True,
+ } for hostname, folder, attributes in create_hosts]
+
+ result = self._api_request("webapi.py?action=add_hosts", {
+ "request": json.dumps({
+ "hosts": hosts,
+ }),
+ })
+
+ assert result is None
+ hosts = self.get_all_hosts()
+ for hostname, _folder, _attributes in create_hosts:
+ assert hostname in hosts
+
def get_host(self, hostname, effective_attributes=False):
result = self._api_request(
"webapi.py?action=get_host", {