Module: check_mk
Branch: master
Commit: bf6add740aa6f6f39189b0e27cf344c57d14a643
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=bf6add740aa6f6…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Sun Feb 10 17:04:56 2019 +0100
DCD: Cleaned up cross component import
The DCD was previously directly executing a remote automation call to a
WATO remote site for gathering information from the remote DCD instance.
At the moment this call is used for fetching phase 1 results from remote
sites.
This was done by using cmk.gui.watolib code, which should not be
imported by another component than the GUI. To solve this we now use a
new Web API call which makes the DCD cleanly operate on the Web API of
the local site. The Web API is then using it's configuration and code to
make the connection to the remote site and returns the result to the
DCD.
Change-Id: I6fe7f76b2b4d66e58a6174e9d7c95005fb9aecae
---
.../plugins/webapi/execute_remote_automation.py | 60 ++++++++++++++++++++++
tests/unit/cmk/gui/test_webapi_unit.py | 1 +
2 files changed, 61 insertions(+)
diff --git a/cmk/gui/plugins/webapi/execute_remote_automation.py
b/cmk/gui/plugins/webapi/execute_remote_automation.py
new file mode 100644
index 0000000..0d5ee7b
--- /dev/null
+++ b/cmk/gui/plugins/webapi/execute_remote_automation.py
@@ -0,0 +1,60 @@
+#!/usr/bin/env python
+# -*- encoding: utf-8; py-indent-offset: 4 -*-
+# +------------------------------------------------------------------+
+# | ____ _ _ __ __ _ __ |
+# | / ___| |__ ___ ___| | __ | \/ | |/ / |
+# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / |
+# | | |___| | | | __/ (__| < | | | | . \ |
+# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ |
+# | |
+# | Copyright Mathias Kettner 2014 mk(a)mathias-kettner.de |
+# +------------------------------------------------------------------+
+#
+# This file is part of Check_MK.
+# The official homepage is at
http://mathias-kettner.de/check_mk.
+#
+# check_mk is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation in version 2. check_mk is distributed
+# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with-
+# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE. See the GNU General Public License for more de-
+# tails. You should have received a copy of the GNU General Public
+# License along with GNU Make; see the file COPYING. If not, write
+# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+# Boston, MA 02110-1301 USA.
+
+from typing import Dict, List # pylint: disable=unused-import
+
+import cmk.gui.config as config
+from cmk.gui.i18n import _
+from cmk.gui.exceptions import MKUserError
+from cmk.gui.plugins.webapi import (
+ APICallCollection,
+ api_call_collection_registry,
+)
+
+import cmk.gui.watolib.automations
+
+
+(a)api_call_collection_registry.register
+class APICallExecuteRemoteAutomation(APICallCollection):
+ def get_api_calls(self):
+ return {
+ "execute_remote_automation": {
+ "handler": self._execute_remote_automation,
+ "required_keys": ["site_id", "command",
"command_args"],
+ # TODO: Add a dedicated permission for this
+ "required_permissions": ["wato.dcd_connections"],
+ },
+ }
+
+ def _execute_remote_automation(self, request):
+ if request["site_id"] not in config.sitenames():
+ raise MKUserError("site_id", _("This site does not
exist."))
+
+ if request["site_id"] not in dict(config.wato_slave_sites()):
+ raise MKUserError("site_id", _("This site is not a distributed
WATO site."))
+
+ return cmk.gui.watolib.automations.do_remote_automation(
+ config.site(request["site_id"]), request["command"],
request["command_args"])
diff --git a/tests/unit/cmk/gui/test_webapi_unit.py
b/tests/unit/cmk/gui/test_webapi_unit.py
index b3319a1..7c15611 100644
--- a/tests/unit/cmk/gui/test_webapi_unit.py
+++ b/tests/unit/cmk/gui/test_webapi_unit.py
@@ -10,6 +10,7 @@ def test_registered_api_call_collections():
for action in cls().get_api_calls().iterkeys())
assert sorted(registered_api_actions) == sorted([
'activate_changes',
+ 'execute_remote_automation',
'add_contactgroup',
'add_folder',
'add_host',