This is working out well but have one more question. Is there a way to set the
vars.cluster_nodes array using a variable or predefined hostgroup? Even a regex
would work but is not optimal.
Here is what I have:
object Host "cluster_f" {
import "cluster_template"
vars.cluster_nodes = [“servera”,”serverb”,”serverc”]
and here is what I want:
object Host "cluster_f" {
import "cluster_template"
vars.cluster_nodes = [“server\*"]
But this is what I *really* *really* want:
object Host "cluster_f" {
import "cluster_template"
vars.cluster_nodes == {{ all $hostnames$ in host.vars.servertype =
“my_servers” }}
Suggestions?
On September 13, 2016 at 10:24:49 AM, Rob DeSanno ([email protected]) wrote:
Markus,
That’s brilliant! I’m going to need some time to digest and test it but this
looks like it is the solution I am looking for.
On September 13, 2016 at 3:35:47 AM, Joosten, Markus ([email protected])
wrote:
On 2016-09-12 19:23, Rob DeSanno wrote:
> The challenge presented to me was to somehow configure notifications
> to be sent only when a certain percentage of hosts experience critical
> alerts.
>
> For example, instead of sending out a notification when every host
> fails a ping check, only send one out if 10%, or more, hosts fail.
>
> We want something a little more complicated than that but the basic
> theory should be the same, assuming its possible. Anyone have any
> experience or thoughts on how to go about doing this?
I have implemented something like this using check_dummy and Icinga2's
runtime macros.
Behold the following template (the basic idea is borrowed somewhere
else, can't remember where):
template Host "dummy-cluster" {
import "generic-host"
check_command = "dummy"
vars.cluster_nodes = [ ]
vars.dummy_state = {{
var up_count = 0
var down_count = 0
var cluster_nodes = macro("$cluster_nodes$")
for (node in cluster_nodes) {
if (get_host(node).state > 0) {
down_count += 1
} else {
up_count += 1
}
}
if (up_count >= 1 ) {
return 0 //at least one host responded
} else {
return 2 //no host answered
}
}}
vars.dummy_text = {{
var output = "Cluster hosts:\n"
var cluster_nodes = macro("$cluster_nodes$")
for (node in cluster_nodes) {
output += node + ": " + get_host(node).last_check_result.output +
"\n"
}
return output
}}
}
As you can see, the vars.dummy_state is always evaluated at runtime and
takes the last state of all host objects stored in vars.cluster_nodes
into account.
My template always returns UP as long as one host in vars.cluster_nodes
is UP.
You could introduce an additional var where you can define which
percentage at which everything should be considered "UP".
I instantiate the template as follows:
object Host "ClusterA" {
import "dummy-cluster"
vars.cluster_nodes = [ "HostA", "HostB", "HostC", "HostD" ]
}
Kind regards,
Markus
> _______________________________________________
> icinga-users mailing list
> [email protected]
> https://lists.icinga.org/mailman/listinfo/icinga-users
_______________________________________________
icinga-users mailing list
[email protected]
https://lists.icinga.org/mailman/listinfo/icinga-users
_______________________________________________
icinga-users mailing list
[email protected]
https://lists.icinga.org/mailman/listinfo/icinga-users