Module: check_mk
Branch: master
Commit: 64cb66de650cfa6283a86eb613d803877be51400
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=64cb66de650cfa…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Thu Apr 28 08:38:02 2011 +0200
FIX: cmk -II also refreshes cluster checks
But only if all nodes of the cluster are specified as
hosts to -II. If you only specify some, then a warning
is printed an the cluster is untouched. Otherwise service
(originated at the other nodes) might get lost.
---
.bugs/16 | 32 +++++++++++++++++++++++++++++---
ChangeLog | 1 +
modules/check_mk.py | 20 +++++++++++++++++++-
3 files changed, 49 insertions(+), 4 deletions(-)
diff --git a/.bugs/16 b/.bugs/16
index 7dd601e..80f13e2 100644
--- a/.bugs/16
+++ b/.bugs/16
@@ -1,10 +1,11 @@
Title: check_mk -II bei Clustern löscht die Checks nicht
Component: core
+State: done
+Class: bug
+Date: 2010-12-21 12:15:32
Benefit: 2
-State: open
Cost: 3
-Date: 2010-12-21 12:15:32
-Class: bug
+Fun: 0
Wenn man ein check_mk -II macht, dann werden clustered
services nicht entfernt. Um das sauber hinzubekommen, muss man sicherstellen,
@@ -20,3 +21,28 @@ zulässt und dann einfach automatisch anstelle dessen die Nodes inventarisiert
und zusätzlich die Checks vom Cluster entfernt. Das könnte eine einfache
Lösung sein. So sorgt der User selbst dafür, dass der Cluster richtig
behandelt wird.
+
+Dabei stellt sich mir die Frage, ob es eigentlich einen Inventur-Check
+auf den Cluster gibt, oder wie das geregelt ist.
+
+Noch weiter in die Zukunft gedacht, gibt es die Idee, dass clustered_services
+(und auch ignored_services), garnicht mehr bei der Inventur angewandt wird,
+sondern generell nach dem Einlesen der Autochecks. Die manuellen Checks
+sollten ja nicht betroffen sein. Wenn man schon was in ignored services
+auflistet, warum sollte es dann trotzdem gecheckt werden, blos weil man
+es man früher aufgenommen hat?
+
+Der Vorteil - im Bezug auf die Clustered Services - könnte sein, dass man
+noch weiß, woher der Service ursprünglich kam. Andererseits kann dann
+folgendes passieren:
+
+1. Inventur findet service X auf Node A
+2. service schenkt auf B
+3. Man macht cmk -II auf A
+4. nun ist der Service weg!
+
+===> Ist also auch keine wirklich gute Lösung.
+
+2011-04-28 08:37:57: changed state open -> done
+-II entfernt jetzt auch die Cluster Checks, falls alle nodes
+angegeben wurden.
diff --git a/ChangeLog b/ChangeLog
index 3e7aed8..da92d65 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,6 @@
1.1.11i1:
Core, Setup, etc.:
+ * FIX: cmk -II also refreshes cluster checks, if all nodes are specified
* FIX: avoid floating points with 'e' in performance data
* FIX: cmk -D: drop obsolete (and always empty) Notification:
* FIX: better handling of broken checks returning empty services
diff --git a/modules/check_mk.py b/modules/check_mk.py
index ec53c54..4cb4457 100755
--- a/modules/check_mk.py
+++ b/modules/check_mk.py
@@ -723,7 +723,7 @@ def is_cluster(hostname):
return False
# If host is node of a cluster, return name of that cluster
-# (untagged). If not, return None. If a host belongt to
+# (untagged). If not, return None. If a host belongs to
# more than one cluster, then a random cluster is choosen.
def cluster_of(hostname):
for clustername, nodes in clusters.items():
@@ -4190,6 +4190,24 @@ if __name__ == "__main__":
if len(hostnames) > 0:
for host in hostnames:
remove_autochecks_of(host, checknames)
+ clust = cluster_of(host)
+ if clust:
+ missing = []
+ for node in clusters[clust]:
+ if node not in hostnames:
+ missing.append(node)
+ if len(missing) == 0:
+ if opt_verbose:
+ sys.stdout.write("All nodes of %s specified, dropping checks of %s, too.\n" % (clust, clust))
+ remove_autochecks_of(clust, checknames)
+ else:
+ sys.stdout.write("Warning: %s is part of cluster %s, but you didn't specify %s as well.\nChecks on %s will be kept.\n" %
+ (host, clust, ",".join(missing), clust))
+ # if the host is part of a cluster and
+ # the other nodes of that cluster are
+ # also present in the list, then we also
+ # drop the checks of the clusters
+
else:
for host in all_active_hosts() + all_active_clusters():
remove_autochecks_of(host, checknames)