218 lines
9.5 KiB
Plaintext
218 lines
9.5 KiB
Plaintext
|
#!/usr/bin/python
|
||
|
# -*- encoding: utf-8; py-indent-offset: 4 -*-
|
||
|
# +------------------------------------------------------------------+
|
||
|
# | ____ _ _ __ __ _ __ |
|
||
|
# | / ___| |__ ___ ___| | __ | \/ | |/ / |
|
||
|
# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / |
|
||
|
# | | |___| | | | __/ (__| < | | | | . \ |
|
||
|
# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ |
|
||
|
# | |
|
||
|
# | Copyright Mathias Kettner 2016 mk@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.
|
||
|
|
||
|
"""This module serves the path structure of the Check_MK environment
|
||
|
to all components of Check_MK."""
|
||
|
|
||
|
import os
|
||
|
|
||
|
from .exceptions import MKGeneralException
|
||
|
|
||
|
# TODO: Clean this up one day by using the way recommended by gettext.
|
||
|
# (See https://docs.python.org/2/library/gettext.html). For this we
|
||
|
# need the path to the locale files here.
|
||
|
try:
|
||
|
_
|
||
|
except NameError:
|
||
|
_ = lambda x: x # Fake i18n when not available
|
||
|
|
||
|
|
||
|
#
|
||
|
# First declare the possible paths for the linters. Then set it within _set_paths()
|
||
|
#
|
||
|
|
||
|
# TODO: Add piggyback_dir and use it in code
|
||
|
omd_root = None
|
||
|
default_config_dir = None
|
||
|
main_config_file = None
|
||
|
final_config_file = None
|
||
|
local_config_file = None
|
||
|
check_mk_config_dir = None
|
||
|
modules_dir = None
|
||
|
var_dir = None
|
||
|
log_dir = None
|
||
|
autochecks_dir = None
|
||
|
precompiled_hostchecks_dir= None
|
||
|
snmpwalks_dir = None
|
||
|
counters_dir = None
|
||
|
tcp_cache_dir = None
|
||
|
tmp_dir = None
|
||
|
logwatch_dir = None
|
||
|
nagios_objects_file = None
|
||
|
nagios_command_pipe_path = None
|
||
|
check_result_path = None
|
||
|
nagios_status_file = None
|
||
|
nagios_conf_dir = None
|
||
|
nagios_config_file = None
|
||
|
nagios_startscript = None
|
||
|
nagios_binary = None
|
||
|
apache_config_dir = None
|
||
|
htpasswd_file = None
|
||
|
livestatus_unix_socket = None
|
||
|
pnp_rraconf_dir = None
|
||
|
livebackendsdir = None
|
||
|
|
||
|
share_dir = None
|
||
|
checks_dir = None
|
||
|
notifications_dir = None
|
||
|
inventory_dir = None
|
||
|
check_manpages_dir = None
|
||
|
agents_dir = None
|
||
|
mibs_dir = None
|
||
|
web_dir = None
|
||
|
pnp_templates_dir = None
|
||
|
doc_dir = None
|
||
|
locale_dir = None
|
||
|
bin_dir = None
|
||
|
lib_dir = None
|
||
|
mib_dir = None
|
||
|
|
||
|
# TODO: Add active_checks_dir and make it used in code
|
||
|
local_share_dir = None
|
||
|
local_checks_dir = None
|
||
|
local_notifications_dir = None
|
||
|
local_inventory_dir = None
|
||
|
local_check_manpages_dir = None
|
||
|
local_agents_dir = None
|
||
|
local_mibs_dir = None
|
||
|
local_web_dir = None
|
||
|
local_pnp_templates_dir = None
|
||
|
local_doc_dir = None
|
||
|
local_locale_dir = None
|
||
|
local_bin_dir = None
|
||
|
local_lib_dir = None
|
||
|
local_mib_dir = None
|
||
|
|
||
|
|
||
|
def _set_paths():
|
||
|
omd_root = _omd_root()
|
||
|
|
||
|
globals().update({
|
||
|
"omd_root" : omd_root,
|
||
|
"default_config_dir" : os.path.join(omd_root, "etc/check_mk"),
|
||
|
"main_config_file" : os.path.join(omd_root, "etc/check_mk/main.mk"),
|
||
|
"final_config_file" : os.path.join(omd_root, "etc/check_mk/final.mk"),
|
||
|
"local_config_file" : os.path.join(omd_root, "etc/check_mk/local.mk"),
|
||
|
"check_mk_config_dir" : os.path.join(omd_root, "etc/check_mk/conf.d"),
|
||
|
"modules_dir" : os.path.join(omd_root, "share/check_mk/modules"),
|
||
|
"var_dir" : os.path.join(omd_root, "var/check_mk"),
|
||
|
"log_dir" : os.path.join(omd_root, "var/log"),
|
||
|
"autochecks_dir" : os.path.join(omd_root, "var/check_mk/autochecks"),
|
||
|
"precompiled_hostchecks_dir" : os.path.join(omd_root, "var/check_mk/precompiled"),
|
||
|
"snmpwalks_dir" : os.path.join(omd_root, "var/check_mk/snmpwalks"),
|
||
|
"counters_dir" : os.path.join(omd_root, "tmp/check_mk/counters"),
|
||
|
"tcp_cache_dir" : os.path.join(omd_root, "tmp/check_mk/cache"),
|
||
|
"tmp_dir" : os.path.join(omd_root, "tmp/check_mk"),
|
||
|
"logwatch_dir" : os.path.join(omd_root, "var/check_mk/logwatch"),
|
||
|
"nagios_startscript" : os.path.join(omd_root, "etc/init.d/iginga"),
|
||
|
|
||
|
# Switched via symlinks on icinga/nagios change
|
||
|
"nagios_conf_dir" : os.path.join(omd_root, "etc/icinga/conf.d"),
|
||
|
"nagios_objects_file" : os.path.join(omd_root, "etc/icinga/conf.d/check_mk_objects.cfg"),
|
||
|
"check_result_path" : os.path.join(omd_root, "tmp/nagios/checkresults"),
|
||
|
"nagios_status_file" : os.path.join(omd_root, "tmp/nagios/status.dat"),
|
||
|
|
||
|
"apache_config_dir" : os.path.join(omd_root, "etc/apache"),
|
||
|
"htpasswd_file" : os.path.join(omd_root, "etc/htpasswd"),
|
||
|
"livestatus_unix_socket" : os.path.join(omd_root, "tmp/run/live"),
|
||
|
"pnp_rraconf_dir" : os.path.join(omd_root, "share/check_mk/pnp-rraconf"),
|
||
|
"livebackendsdir" : os.path.join(omd_root, "share/check_mk/livestatus"),
|
||
|
})
|
||
|
|
||
|
_set_core_specific_paths()
|
||
|
_set_overridable_paths()
|
||
|
_set_overridable_paths(local=True)
|
||
|
|
||
|
|
||
|
def _omd_root():
|
||
|
return os.environ.get("OMD_ROOT", "")
|
||
|
#try:
|
||
|
#except KeyError:
|
||
|
# raise MKGeneralException(_("OMD_ROOT environment variable not set. You can "
|
||
|
# "only execute this in an OMD site."))
|
||
|
|
||
|
|
||
|
def _set_core_specific_paths():
|
||
|
omd_root = _omd_root()
|
||
|
core = _get_core_name()
|
||
|
|
||
|
if core == "icinga":
|
||
|
globals().update({
|
||
|
"nagios_binary" : os.path.join(omd_root, "bin/icinga"),
|
||
|
"nagios_config_file" : os.path.join(omd_root, "tmp/icinga/icinga.cfg"),
|
||
|
"nagios_command_pipe_path" : os.path.join(omd_root, "tmp/run/icinga.cmd"),
|
||
|
})
|
||
|
else:
|
||
|
globals().update({
|
||
|
# debian override of default for icinga, to avoid needing an
|
||
|
# etc/omd/site.conf
|
||
|
"nagios_binary" : os.path.join(omd_root, "bin/icinga"),
|
||
|
"nagios_config_file" : os.path.join(omd_root, "tmp/icinga/nagios.cfg"),
|
||
|
"nagios_command_pipe_path" : os.path.join(omd_root, "tmp/run/icinga.cmd"),
|
||
|
})
|
||
|
|
||
|
|
||
|
# TODO: Find a better way to determine the currently configured core.
|
||
|
# For example generalize the etc/check_mk/conf.d/microcore.mk which is written by the CORE
|
||
|
# hook -> Change the name to core.mk and write it for all configured cores.
|
||
|
def _get_core_name():
|
||
|
try:
|
||
|
for l in open(os.path.join(omd_root, "etc/omd/site.conf")):
|
||
|
if l.startswith("CONFIG_CORE='"):
|
||
|
return l.split("'")[1]
|
||
|
except IOError, e:
|
||
|
# At least in test environment the file is not available. We only added this try/except for
|
||
|
# this case. This should better be solved in a cleaner way.
|
||
|
if e.errno == 2:
|
||
|
pass
|
||
|
else:
|
||
|
raise
|
||
|
|
||
|
|
||
|
def _set_overridable_paths(local=False):
|
||
|
rel_base = "local" if local else ""
|
||
|
var_prefix = "local_" if local else ""
|
||
|
|
||
|
globals().update({
|
||
|
var_prefix+"share_dir" : os.path.join(omd_root, rel_base, "share/check_mk"),
|
||
|
var_prefix+"checks_dir" : os.path.join(omd_root, rel_base, "share/check_mk/checks"),
|
||
|
var_prefix+"notifications_dir" : os.path.join(omd_root, rel_base, "share/check_mk/notifications"),
|
||
|
var_prefix+"inventory_dir" : os.path.join(omd_root, rel_base, "share/check_mk/inventory"),
|
||
|
var_prefix+"check_manpages_dir" : os.path.join(omd_root, rel_base, "share/check_mk/checkman"),
|
||
|
var_prefix+"agents_dir" : os.path.join(omd_root, rel_base, "share/check_mk/agents"),
|
||
|
var_prefix+"mibs_dir" : os.path.join(omd_root, rel_base, "share/check_mk/mibs"),
|
||
|
var_prefix+"web_dir" : os.path.join(omd_root, rel_base, "share/check_mk/web"),
|
||
|
var_prefix+"pnp_templates_dir" : os.path.join(omd_root, rel_base, "share/check_mk/pnp-templates"),
|
||
|
var_prefix+"doc_dir" : os.path.join(omd_root, rel_base, "share/doc/check_mk"),
|
||
|
var_prefix+"locale_dir" : os.path.join(omd_root, rel_base, "share/check_mk/locale"),
|
||
|
var_prefix+"bin_dir" : os.path.join(omd_root, rel_base, "bin"),
|
||
|
var_prefix+"lib_dir" : os.path.join(omd_root, rel_base, "lib"),
|
||
|
var_prefix+"mib_dir" : os.path.join(omd_root, rel_base, "share/snmp/mibs"),
|
||
|
})
|
||
|
|
||
|
|
||
|
_set_paths()
|