Module: check_mk
Branch: master
Commit: 7bd0362b5d01852ecdf0cb40aa4f0f08503a8046
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=7bd0362b5d0185…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Thu Nov 15 22:43:05 2018 +0100
Dynamic configuration: Add distributed WATO support
In distributed WATO setups there is only one site where changes to the
Check_MK configuration can be made. This is the central site. However,
there are a lot of situations where the source for the dynamic
configuration, e.g. a Kubernetes instance, is only reachable from a remote
Check_MK site.
This means that we need to split up the DCD connection logic into two
phases.
In phase 1 the connection on the remote site talks to the source system,
e.g. the Kubernetes instance, and creates some kind of "configuration
snapshot". This information may be a collection of Pods, containers and
so on which will be used to update the Check_MK configuration in the
next step.
The DCD on the central site is communicating with the DCD on the remote
site to get the latest "configuration snapshot". With this knowledge the
phase 2 is launched. In this phase the connection is comparing the phase
1 information with data fetched from the Web API of the central WATO
site and deciding to create, update or delete objects in the Check_MK
configuration. These updates are made immediately to the configuration
and activated once it's allowed.
* The DCD now knows whether or not it's running in a distributed WATO
remote site
* Split connection execute() into two phases
* Moved phase execution logic to the Connector() base class
* Improved test coverage
CMK-1140
Change-Id: I51e7f0dc1e9df7e9c8c25a0598c3cf94292666ed
---
cmk/gui/plugins/wato/__init__.py | 1 +
cmk/gui/plugins/wato/utils/__init__.py | 1 +
cmk/gui/watolib.py | 4 ++--
tests/unit/cmk/gui/test_watolib.py | 1 +
4 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/cmk/gui/plugins/wato/__init__.py b/cmk/gui/plugins/wato/__init__.py
index fae2a3e..c7f150a 100644
--- a/cmk/gui/plugins/wato/__init__.py
+++ b/cmk/gui/plugins/wato/__init__.py
@@ -106,6 +106,7 @@ from cmk.gui.plugins.wato.utils import (
WatoBackgroundJob,
wato_confirm,
wato_fileheader,
+ register_hook,
WatoMode,
SimpleModeType,
SimpleListMode,
diff --git a/cmk/gui/plugins/wato/utils/__init__.py
b/cmk/gui/plugins/wato/utils/__init__.py
index 8a5c47b..0352822 100644
--- a/cmk/gui/plugins/wato/utils/__init__.py
+++ b/cmk/gui/plugins/wato/utils/__init__.py
@@ -99,6 +99,7 @@ from cmk.gui.watolib import (
add_change,
log_audit,
site_neutral_path,
+ register_hook,
register_rulegroup,
register_rule,
declare_host_attribute,
diff --git a/cmk/gui/watolib.py b/cmk/gui/watolib.py
index 021f87f..d75909c 100644
--- a/cmk/gui/watolib.py
+++ b/cmk/gui/watolib.py
@@ -99,7 +99,7 @@ import cmk.gui.gui_background_job as gui_background_job
import cmk.gui.weblib as weblib
from cmk.gui.i18n import _u, _
from cmk.gui.globals import html
-from cmk.gui.htmllib import HTML
+from cmk.gui.htmllib import HTML, Encoder
from cmk.gui.log import logger
from cmk.gui.exceptions import MKGeneralException, MKAuthException, MKUserError,
RequestTimeout
from cmk.gui.valuespec import (
@@ -4661,7 +4661,7 @@ def do_remote_automation(site, command, vars_):
raise MKAutomationException(_("You are not logged into the remote
site."))
url = base_url + "automation.py?" + \
- html.urlencode_vars([
+ Encoder().urlencode_vars([
("command", command),
("secret", secret),
("debug", config.debug and '1' or '')
diff --git a/tests/unit/cmk/gui/test_watolib.py b/tests/unit/cmk/gui/test_watolib.py
index cb8a97f..3579145 100644
--- a/tests/unit/cmk/gui/test_watolib.py
+++ b/tests/unit/cmk/gui/test_watolib.py
@@ -61,6 +61,7 @@ def test_registered_automation_commands():
assert registered == sorted([
'activate-changes',
'check-analyze-config',
+ 'execute-dcd-command',
'network-scan',
'push-snapshot',
])