Module: check_mk
Branch: master
Commit: fec8bb40437c9cd4c533ec5bc8939e8307afae0a
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=fec8bb40437c9c…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Sun Apr 29 08:35:25 2012 +0200
make host_extra_conf["parents"] have precedence
---
ChangeLog | 3 +++
modules/check_mk.py | 10 +++++++---
2 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index e4fdc4d..6cb2349 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,9 @@
Core:
* FIX: fixed SNMP info declaration in checks: could be garbled
up in rare cases
+ * avoid duplicate parents definition, when using 'parents' and
+ extra_host_conf["parents"] at the same time. The later one has
+ precedence.
Multisite:
* Logwatch: Colorizing OK state blocks correctly
diff --git a/modules/check_mk.py b/modules/check_mk.py
index a1b0c66..4243f45 100755
--- a/modules/check_mk.py
+++ b/modules/check_mk.py
@@ -1507,8 +1507,12 @@ def create_nagios_hostdefs(outfile, hostname):
outfile.write(" contact_groups\t\t%s\n" % ",".join(cgrs))
contactgroups_to_define.update(cgrs)
+ # Get parents manually defined via extra_host_conf["parents"]. Only honor
+ # variable "parents" and implicit parents if this setting is empty
+ extra_conf_parents = host_extra_conf(hostname, extra_host_conf.get("parents", []))
+
# Parents for non-clusters
- if not is_clust:
+ if not extra_conf_parents and not is_clust:
parents_list = parents_of(hostname)
if len(parents_list) > 0:
outfile.write(" parents\t\t\t%s\n" % (",".join(parents_list)))
@@ -1522,13 +1526,13 @@ def create_nagios_hostdefs(outfile, hostname):
node_ips = [ lookup_ipaddress(h) for h in nodes ]
alias = "cluster of %s" % ", ".join(nodes)
outfile.write(" _NODEIPS\t\t\t%s\n" % " ".join(node_ips))
- outfile.write(" parents\t\t\t%s\n" % ",".join(nodes))
+ if not extra_conf_parents:
+ outfile.write(" parents\t\t\t%s\n" % ",".join(nodes))
# Host check uses (service-) IP address if available
if ip:
outfile.write(" check_command\t\t\tcheck-mk-ping\n")
-
# Output alias, but only if it's not define in extra_host_conf
aliases = host_extra_conf(hostname, extra_host_conf.get("alias", []))
if len(aliases) == 0:
Module: check_mk
Branch: master
Commit: de1803410c61c7912902dc8ccc4981027e9314c5
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=de1803410c61c7…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Sat Apr 28 18:30:52 2012 +0200
WATO: configure parents of hosts
Still some code in modules/check_mk.py is neccessary in
order to avoid duplicate parent definitions
---
ChangeLog | 2 +
web/htdocs/check_mk.css | 6 ++++-
web/htdocs/valuespec.py | 2 +-
web/htdocs/wato.css | 1 -
web/htdocs/wato.py | 4 +-
web/plugins/wato/builtin_attributes.py | 36 ++++++++++++++++++++++++++++---
6 files changed, 42 insertions(+), 9 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 2797dad..e4fdc4d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -25,6 +25,8 @@
* New button "Recursive Inventory" on folder: Allows to do
a recursive inventory over all hosts. Also allows to selectively
retry only hosts that have failed in a previous inventory.
+ * You can configure parents now (via a host attribute, no rules are
+ neccessary).
* FIX: fix page header after confirmation dialogs
* FIX: Fixed umlaut problem in host aliases and ip addresses created by WATO
* FIX: Fixed exception caused by validation problems during editing tags in WATO
diff --git a/web/htdocs/check_mk.css b/web/htdocs/check_mk.css
index f867b5f..21cda92 100644
--- a/web/htdocs/check_mk.css
+++ b/web/htdocs/check_mk.css
@@ -390,9 +390,13 @@ table.valuespec_listof option[selected] {
font-weight: bold;
}
+div.listofstrings > div {
+ margin-bottom: 2px;
+}
+
div.listofstrings.horizontal > div {
float: left;
- margin-right: 5px;
+ margin-right: 2px;
}
table.listchoice {
diff --git a/web/htdocs/valuespec.py b/web/htdocs/valuespec.py
index ec9953d..2bb608c 100644
--- a/web/htdocs/valuespec.py
+++ b/web/htdocs/valuespec.py
@@ -266,7 +266,7 @@ class TextAscii(ValueSpec):
def __init__(self, **kwargs):
ValueSpec.__init__(self, **kwargs)
self._label = kwargs.get("label")
- self._size = kwargs.get("size", 30)
+ self._size = kwargs.get("size", 25)
self._strip = kwargs.get("strip", True)
self._allow_empty = kwargs.get("allow_empty", True)
self._none_is_empty = kwargs.get("none_is_empty", False)
diff --git a/web/htdocs/wato.css b/web/htdocs/wato.css
index 826c4bf..864949c 100644
--- a/web/htdocs/wato.css
+++ b/web/htdocs/wato.css
@@ -488,7 +488,6 @@ table.validationerror img {
margin-top: 10px;
margin-bottom: 10px;
padding: 5px 8px;
- width: 834px;
-moz-border-radius: 3px;
background-image: url("images/form_background.png");
background-repeat: repeat;
diff --git a/web/htdocs/wato.py b/web/htdocs/wato.py
index 95d3b54..fbb7fd2 100644
--- a/web/htdocs/wato.py
+++ b/web/htdocs/wato.py
@@ -72,7 +72,7 @@
# ".total_hosts" -> recursive number of hosts, computed on demand by
# num_hosts_in()
# ".siteid" -> This attribute is mandatory for host objects and optional for folder
-# objects. In case of hosts and single WATO setup it is always none.
+# objects. In case of hosts and single WATO setup it is always None.
#
#
# g_folder -> The folder object representing the folder the user is
@@ -3707,7 +3707,7 @@ class Attribute:
# A simple text attribute. It is stored in
# a Python unicode string
class TextAttribute(Attribute):
- def __init__(self, name, title, help = None, default_value="", mandatory=False, allow_empty=True, size=20):
+ def __init__(self, name, title, help = None, default_value="", mandatory=False, allow_empty=True, size=25):
Attribute.__init__(self, name, title, help, default_value)
self._mandatory = mandatory
self._allow_empty = allow_empty
diff --git a/web/plugins/wato/builtin_attributes.py b/web/plugins/wato/builtin_attributes.py
index 1ec9c75..3f8311f 100644
--- a/web/plugins/wato/builtin_attributes.py
+++ b/web/plugins/wato/builtin_attributes.py
@@ -46,18 +46,46 @@ declare_host_attribute(TextAttribute("ipaddress", _("IP address"),
show_in_table = True,
show_in_folder = False)
+# Attribute for configuring parents
class ParentsAttribute(ValueSpecAttribute):
def __init__(self):
ValueSpecAttribute.__init__(self, "parents",
- ListOfStrings(
- title = _("Parents"),
- help = _("Hier kommt die Hilfe."),
- orientation = "horizontal"))
+ ListOfStrings(
+ title = _("Parents"),
+ help = _("Parents are used to configure the reachability of hosts by the "
+ "monitoring server. A host is considered to be <b>unreachable</b> if all "
+ "of its parents are unreachable or down. Unreachable hosts will not be "
+ "actively monitored.<br><br><b>Clusters</b> automatically configure all "
+ "of their nodes as parents, but only if you do not configure parents "
+ "manually.<br><br>In a distributed setup make sure that the host and all "
+ "of its parents are monitored by the same site."),
+ orientation = "horizontal"))
def to_nagios(self, value):
if value:
return ",".join(value)
+ def nagios_name(self):
+ return "parents"
+
declare_host_attribute(ParentsAttribute(),
show_in_table = True,
show_in_folder = True)
+
+def validate_host_parents(effective_host):
+ for parentname in effective_host["parents"]:
+ parent_folder = find_host(parentname)
+ if not parent_folder:
+ raise MKUserError(None, _("You defined the non-existing host '%s' as a parent.") % parentname)
+ # In case of distributed wato check also if site of host and parent
+ # are the same.
+ if is_distributed():
+ parent = effective_attributes(parent_folder[".hosts"][parentname], parent_folder)
+ if effective_host["site"] != parent["site"]:
+ raise MKUserError(None, _("The parent '%s' is monitored on site '%s' while the host itself "
+ "is monitored on site '%s'. Both must be monitored on the same site. Remember: The parent/child "
+ "relation is used to describe the reachability of hosts by one monitoring daemon.") %
+ (parentname, parent["site"], effective_host["site"]))
+
+api.register_hook('validate-host', validate_host_parents)
+