Module: check_mk
Branch: master
Commit: c2e25048cf8b82430254b9d29576dbbf79b890cb
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=c2e25048cf8b82…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Mon Sep 12 12:28:33 2016 +0200
3853 cmk --list-tag can now also list offline hosts
---
.werks/3853 | 9 +++++++++
ChangeLog | 1 +
modules/check_mk.py | 33 ++++++++++++++++++++++++++++-----
3 files changed, 38 insertions(+), 5 deletions(-)
diff --git a/.werks/3853 b/.werks/3853
new file mode 100644
index 0000000..8229052
--- /dev/null
+++ b/.werks/3853
@@ -0,0 +1,9 @@
+Title: cmk --list-tag can now also list offline hosts
+Level: 1
+Component: core
+Compatible: compat
+Version: 1.4.0i1
+Date: 1473676104
+Class: feature
+
+
diff --git a/ChangeLog b/ChangeLog
index d7fc3c7..4acacf9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -6,6 +6,7 @@
* 3580 The macro $HOSTNAME$ is now available for host checks which are based on
service states
* 3155 implemented dual monitoring for systems with management boards (like HP iLO)
* 3721 Host macros are now replaced in datasource program command lines...
+ * 3853 cmk --list-tag can now also list offline hosts
* 3193 FIX: Fixed fake check results for hosts...
* 3214 FIX: Removing SNMP checks for non SNMP hosts and agent based checks for non
agent hosts...
* 3220 FIX: Check_MK HW/SW Inventory is now always disabled for "No Agent"
hosts
diff --git a/modules/check_mk.py b/modules/check_mk.py
index 48ee864..00c5f18 100755
--- a/modules/check_mk.py
+++ b/modules/check_mk.py
@@ -642,6 +642,20 @@ def all_configured_hosts():
def all_active_hosts():
return all_active_realhosts() + all_active_clusters()
+# Returns a list of all hosts which are associated with this site,
+# but have been removed by the "only_hosts" rule. Normally these
+# are the hosts which have the tag "offline".
+#
+# This is not optimized for performance, so use in specific situations.
+def all_offline_hosts():
+ hostlist = filter_active_hosts(all_configured_realhosts()
+ + all_configured_clusters(),
+ keep_offline_hosts=True)
+
+ return [ hostname for hostname in hostlist
+ if not in_binary_hostlist(hostname, only_hosts) ]
+
+
def duplicate_hosts():
# Sanity check for duplicate hostnames
seen_hostnames = set([])
@@ -672,19 +686,22 @@ def all_active_clusters():
all_clusters_untagged = filter_active_hosts(all_configured_clusters())
return all_clusters_untagged
-def filter_active_hosts(hostlist):
+def filter_active_hosts(hostlist, keep_offline_hosts=False):
if only_hosts == None and distributed_wato_site == None:
return hostlist
elif only_hosts == None:
return [ hostname for hostname in hostlist
if host_is_member_of_site(hostname, distributed_wato_site) ]
elif distributed_wato_site == None:
- return [ hostname for hostname in hostlist
- if in_binary_hostlist(hostname, only_hosts) ]
+ if keep_offline_hosts:
+ return hostlist
+ else:
+ return [ hostname for hostname in hostlist
+ if in_binary_hostlist(hostname, only_hosts) ]
else:
site_tag = "site:" + distributed_wato_site
return [ hostname for hostname in hostlist
- if in_binary_hostlist(hostname, only_hosts)
+ if (keep_offline_hosts or in_binary_hostlist(hostname, only_hosts))
and host_is_member_of_site(hostname, distributed_wato_site) ]
def host_is_member_of_site(hostname, site):
@@ -3664,7 +3681,13 @@ def list_all_hosts(hostgroups):
# Same for host tags, needed for --list-tag
def list_all_hosts_with_tags(tags):
hosts = []
- for h in all_active_hosts():
+
+ if "offline" in tags:
+ hostlist = all_offline_hosts()
+ else:
+ hostlist = all_active_hosts()
+
+ for h in hostlist:
if hosttags_match_taglist(tags_of_host(h), tags):
hosts.append(h)
return hosts