Hi,
I’m trying to dynamically create some repetitive service definitions looping a nested dictionary into an apply Service for definition
.
My question is quite similar to this one, but I’m trying to implement it in a different way so I’d prefer to open a new thread.
The plugin I’m trying to add is check_mssql_healthcheck_mssql_health, which supports several check modes.
I want to automatically apply some modes with a default configuration for each SQL Server instance I’ve declared into the hostvars:
object Host "sqltest1" {
import "generic-host"
address = "123.123.123.13"
vars.client_endpoint = name
vars.mssql["SQL Server 2019"] = {
mssql_health_username = "SQLTEST1\\Icinga2"
mssql_health_password = "password"
mssql_health_port = 1234
mssql_health_mode = "auto"
}
}
For the declared SQL Server 2019 instance I want to automatically add the checks declared into a constant:
const mssql_health_auto_modes = {
"Connection Time" = {
mssql_health_mode = "connection-time"
},
"Connected Users" = {
mssql_health_mode = "connected-users"
mssql_health_warning = "80"
mssql_health_critical = "100"
},
"Transactions per second" = {
mssql_health_mode = "transactions"
},
"Batch requests per second" = {
mssql_health_mode = "batch-requests"
mssql_health_warning = "400"
mssql_health_critical = "500"
},
[...]
}
For this I tried to add this piece of code:
# Automatic service definition WITHOUT specific mode configures (through 'mssql' host.var and host.var.mssql_health_mode == "auto" or undefined)
apply Service for (service_name => service_config in host.vars.mssql) {
for (check_name => check_config in mssql_health_auto_modes) {
import "generic-service"
name = service_name + " - " + check_name
check_command = "_check_mssql_health"
vars.mssql_health_mode = check_config.mssql_health_mode
vars += service_config
assign where !service_config.mssql_health_mode || service_config.mssql_health_mode == "auto"
}
}
This does not end with any errors, but only one service is added to the host:
And this is nor the first nor the latest check declared into the mssql_health_auto_modes
constant, so I cannot understand what’s going on.
Could you help me to understand where I’m wrong, please?
Thank you very much!