Наша команда только начинает работу с icinga2.У нас есть собственный доморощенный инструмент, который проверяет множество разных вещей в зависимости от аргумента, поэтому у нас есть ряд CheckCommand
объектов, которые различаются только одним аргументом.Эти проверки необходимо применять к нескольким экземплярам базы данных на нескольких хостах.Создание отдельных CheckCommand
s работает нормально, например так:
object Host "some.oracle.host" {
import "oracle-host"
address = "172.1.1.1"
vars.db_instances = {
"EnvName" = {
"username" = "username"
"password" = "EQo1OF95G8Gs"
"dbname" = "FOO"
"connstr" = "jdbc:oracle:thin:@(FOO)"
}
}
apply Service for (env => instance in host.vars.db_instances) {
import "oracle-db-svc"
check_command = "check_oracle_foocheck"
display_name = env + "-foocheck"
vars.svc_dbname = instance["dbname"]
}
apply Service for (env => instance in host.vars.db_instances) {
import "oracle-db-svc"
check_command = "check_oracle_barcheck"
display_name = env + "-barcheck"
vars.svc_dbname = instance["dbname"]
}
Здесь мы создаем новые сервисы "check_oracle_foocheck" и "check_oracle_barcheck" для каждого экземпляра каждого хоста, который имеет переменную db_instances
.Это работает хорошо, но проблема в том, что у нас есть пара десятков таких проверок для реализации.Я ищу что-то более простое, что-то вроде:
const OracleChecks = ["foocheck", "barcheck"]
apply Service for (check in OracleChecks) {
import "oracle-db-svc"
for(env => instance in host.vars.db_instances){
check_command = "$check$"
display_name = env + "-$check$"
}
}
Я предполагаю, что это не сработает, потому что правило применения на самом деле не возвращается, и, возможно, вы не можете перебрать хосты в заявке на,Здесь я просто пытаюсь передать цель.
Мне нужен подход, чтобы сделать своего рода матричное присвоение набора сервисов наборам экземпляров, которые живут на нескольких хостах.Любые советы?