check-mk/debian/paths.py.icinga

218 lines
9.5 KiB
Python

#!/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()