Module: check_mk
Branch: master
Commit: 5766f9e98598f5169e319ce471c8f3d664504c33
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=5766f9e98598f5…
Author: Sven Panne <sp(a)mathias-kettner.de>
Date: Fri Jun 8 14:18:46 2018 +0200
Fix dependencies of core-related modules, part 7.
Combine the config generation hook and the precompilation hook into a single
data structure, see:
https://refactoring.com/catalog/introduceParameterObject.html
This dict (what else? ;-) acts as a pseudo-class for now. We will change
that into a real class soon, removing some duplication on the way, too.
Change-Id: I10ecfdbd46f6cf7c154e0370267f29d183d08db4
---
cmk_base/automations/check_mk.py | 47 ++++++++++++++++++++++++++++++----------
cmk_base/core.py | 10 ++++-----
cmk_base/core_config.py | 14 ++++++------
cmk_base/discovery.py | 6 ++---
cmk_base/modes/check_mk.py | 17 ++++++++++-----
5 files changed, 62 insertions(+), 32 deletions(-)
diff --git a/cmk_base/automations/check_mk.py b/cmk_base/automations/check_mk.py
index 355bede..74f8f9f 100644
--- a/cmk_base/automations/check_mk.py
+++ b/cmk_base/automations/check_mk.py
@@ -721,6 +721,39 @@ class AutomationRestart(Automation):
else:
return "restart"
+ # TODO: _cmc_file, _create_config_hook, _precompile_hook, _create_core are
copy-n-pasted from cmk_base.modes.check_mk.
+ @staticmethod
+ def _cmc_file(options):
+ return options["cmc-file"] if options and "cmc-file" in
options else "config"
+
+
+ @staticmethod
+ def _create_config_hook(options):
+ from cmk_base.config import monitoring_core
+ if monitoring_core == "cmc":
+ from cmk_base.cee.core_cmc import create_config_hook as cch
+ create_config_hook = lambda: cch(AutomationRestart._cmc_file(options))
+ else:
+ from cmk_base.core_nagios import create_config_hook
+ return create_config_hook
+
+
+ @staticmethod
+ def _precompile_hook():
+ from cmk_base.config import monitoring_core
+ if monitoring_core == "cmc":
+ from cmk_base.cee.core_cmc import precompile_hook
+ else:
+ from cmk_base.core_nagios import precompile_hook
+ return precompile_hook
+
+
+ # TODO: Change this naive dict representation of a core object into a real class!
+ @staticmethod
+ def _create_core(options=None):
+ return {"create_config":
AutomationRestart._create_config_hook(options),
+ "precompile": AutomationRestart._precompile_hook()}
+
# TODO: Cleanup duplicate code with cmk_base.core.do_restart()
def execute(self, args):
@@ -763,13 +796,9 @@ class AutomationRestart(Automation):
else:
backup_path = None
+ core = AutomationRestart._create_core()
try:
- if config.monitoring_core == "cmc":
- from cmk_base.cee.core_cmc import create_config_hook as cch
- create_config_hook = lambda: cch("config")
- else:
- from cmk_base.core_nagios import create_config_hook
- configuration_warnings =
core_config.create_core_config(create_config_hook)
+ configuration_warnings = core_config.create_core_config(core)
try:
from cmk_base.cee.agent_bakery import bake_on_restart
@@ -788,11 +817,7 @@ class AutomationRestart(Automation):
if backup_path:
os.remove(backup_path)
- if config.monitoring_core == "cmc":
- from cmk_base.cee.core_cmc import precompile_hook
- else:
- from cmk_base.core_nagios import precompile_hook
- precompile_hook()
+ core["precompile"]()
cmk_base.core.do_core_action(self._mode())
else:
diff --git a/cmk_base/core.py b/cmk_base/core.py
index 39e6ce6..c540e23 100644
--- a/cmk_base/core.py
+++ b/cmk_base/core.py
@@ -60,12 +60,12 @@ _restart_lock_fd = None
# | Invoke actions affecting the core like reload/restart |
# '----------------------------------------------------------------------'
-def do_reload(create_config_hook, precompile_hook):
- do_restart(create_config_hook, precompile_hook, only_reload=True)
+def do_reload(core):
+ do_restart(core, only_reload=True)
# TODO: Cleanup duplicate code with automation_restart()
-def do_restart(create_config_hook, precompile_hook, only_reload=False):
+def do_restart(core, only_reload=False):
try:
backup_path = None
@@ -83,7 +83,7 @@ def do_restart(create_config_hook, precompile_hook, only_reload=False):
backup_path = None
try:
- core_config.do_create_config(create_config_hook, with_agents=True)
+ core_config.do_create_config(core, with_agents=True)
except Exception, e:
# TODO: Replace by MKBailOut()/MKTerminate()?
console.error("Error creating configuration: %s\n" % e)
@@ -97,7 +97,7 @@ def do_restart(create_config_hook, precompile_hook, only_reload=False):
if backup_path:
os.remove(backup_path)
- precompile_hook()
+ core["precompile"]()
do_core_action(only_reload and "reload" or "restart")
else:
diff --git a/cmk_base/core_config.py b/cmk_base/core_config.py
index a045d0d..03544f2 100644
--- a/cmk_base/core_config.py
+++ b/cmk_base/core_config.py
@@ -218,10 +218,10 @@ def check_icmp_arguments_of(hostname, add_defaults=True,
family=None):
# '----------------------------------------------------------------------'
# TODO: Move to modes?
-def do_create_config(create_config_hook, with_agents):
+def do_create_config(core, with_agents):
console.output("Generating configuration for core (type %s)..." %
config.monitoring_core)
- create_core_config(create_config_hook)
+ create_core_config(core)
console.output(tty.ok + "\n")
if with_agents:
@@ -232,12 +232,12 @@ def do_create_config(create_config_hook, with_agents):
pass
-def create_core_config(create_config_hook):
+def create_core_config(core):
initialize_warnings()
_verify_non_duplicate_hosts()
_verify_non_deprecated_checkgroups()
- create_config_hook()
+ core["create_config"]()
cmk.password_store.save(config.stored_passwords)
return get_configuration_warnings()
@@ -266,11 +266,11 @@ def _verify_non_duplicate_hosts():
"This might lead to invalid/incomplete monitoring for these
hosts." % ", ".join(duplicates))
-def do_update(create_config_hook, precompile_hook, with_precompile):
+def do_update(core, with_precompile):
try:
- do_create_config(create_config_hook, with_agents=with_precompile)
+ do_create_config(core, with_agents=with_precompile)
if with_precompile:
- precompile_hook()
+ core["precompile"]()
except Exception, e:
console.error("Configuration Error: %s\n" % e)
diff --git a/cmk_base/discovery.py b/cmk_base/discovery.py
index 95ad494..32137ec 100644
--- a/cmk_base/discovery.py
+++ b/cmk_base/discovery.py
@@ -461,7 +461,7 @@ def _get_autodiscovery_dir():
return cmk.paths.var_dir + '/autodiscovery'
-def discover_marked_hosts(create_config_hook, precompile_hook):
+def discover_marked_hosts(core):
console.verbose("Doing discovery for all marked hosts:\n")
autodiscovery_dir = _get_autodiscovery_dir()
@@ -497,9 +497,9 @@ def discover_marked_hosts(create_config_hook, precompile_hook):
if activation_required:
console.verbose("\nRestarting monitoring core with updated
configuration...\n")
if config.monitoring_core == "cmc":
- cmk_base.core.do_reload(create_config_hook, precompile_hook)
+ cmk_base.core.do_reload(core)
else:
- cmk_base.core.do_restart(create_config_hook, precompile_hook)
+ cmk_base.core.do_restart(core)
def _discover_marked_host(hostname, all_hosts, now_ts, oldest_queued):
diff --git a/cmk_base/modes/check_mk.py b/cmk_base/modes/check_mk.py
index 57584d6..6f191c8 100644
--- a/cmk_base/modes/check_mk.py
+++ b/cmk_base/modes/check_mk.py
@@ -1013,7 +1013,7 @@ def _cmc_file(options):
return options["cmc-file"] if options and "cmc-file" in options
else "config"
-def _create_config_hook(options=None):
+def _create_config_hook(options):
from cmk_base.config import monitoring_core
if monitoring_core == "cmc":
from cmk_base.cee.core_cmc import create_config_hook as cch
@@ -1032,9 +1032,14 @@ def _precompile_hook():
return precompile_hook
+# TODO: Change this naive dict representation of a core object into a real class!
+def _create_core(options=None):
+ return {"create_config": _create_config_hook(options),
"precompile": _precompile_hook()}
+
+
def mode_update_no_precompile(options):
from cmk_base.core_config import do_update
- do_update(_create_config_hook(options), _precompile_hook(), with_precompile=False)
+ do_update(_create_core(options), with_precompile=False)
modes.register(Mode(
long_option="update-no-precompile",
@@ -1091,7 +1096,7 @@ modes.register(Mode(
def mode_update(options):
from cmk_base.core_config import do_update
- do_update(_create_config_hook(options), _precompile_hook(), with_precompile=True)
+ do_update(_create_core(options), with_precompile=True)
modes.register(Mode(
long_option="update",
@@ -1130,7 +1135,7 @@ modes.register(Mode(
def mode_restart():
import cmk_base.core
- cmk_base.core.do_restart(_create_config_hook(), _precompile_hook())
+ cmk_base.core.do_restart(_create_core())
modes.register(Mode(
long_option="restart",
@@ -1152,7 +1157,7 @@ modes.register(Mode(
def mode_reload():
import cmk_base.core
- cmk_base.core.do_reload(_create_config_hook(), _precompile_hook())
+ cmk_base.core.do_reload(_create_core())
modes.register(Mode(
long_option="reload",
@@ -1404,7 +1409,7 @@ modes.register(Mode(
def mode_discover_marked_hosts():
import cmk_base.discovery as discovery
- discovery.discover_marked_hosts(_create_config_hook(), _precompile_hook())
+ discovery.discover_marked_hosts(_create_core())
modes.register(Mode(
long_option="discover-marked-hosts",