Ich war schlicht zu faul Domains, die neu im ISPConfig eingetragen wurden, jedes Mal im Anschluss auch noch in die Icinga-Config zu übernehmen. Drin stehen sollten die aber schon. Meine Lösung dafür ist die entsprechenden Configs per Bash-Script aus den Infos der ISPConfig-DB zu erzeugen.
Die Domains aus der ISPConfig-DB holen wir uns so:
mysql -u user -passwd –database ispconfigdb -e “SELECT domain FROM web_domain WHERE type=’vhost’ AND active=’y’ into outfile ‘/pfad/file’;”
Damit haben wir ein File mit allen aktiven vhost-Domains aus ISPConfig, kommt eine dazu, haben wir die beim nächsten Lauf auch im File drin. Die eigentliche Erzeugung der Config-Files ist eine unspektakuläre for-Schleife mit ein paar echos, nicht besonders elegant, aber funktioniert. Eine Kleinigkeit machen wir dabei noch extra: PCOUNT zählt die Punkte (genau genommen den character count, das ist Anzahl Punkte +1, wegen new line) und beim erzeugen der Config unterscheiden wir zwischen explizit angelegten Subdomains (z.B. webmail.domain.tld) und “normalen” vhost-Domains (z.b. domain.tld) um jeweils passend ein “www.” davor zu setzen oder eben nicht.
for domain in $(cat /pfad/file); do
PCOUNT=$(echo -e “$domain” | sed -e ‘s/[^.]//g’ | wc -m)
conf=/zielpfad/der/configs/$domain.cfg
echo -e “define service{” >> $conf
echo -e “use generic-service” >> $conf
echo -e “host_name derhost” >> $conf
if [ $PCOUNT -le 2 ]; then
echo -e “service_description www.$domain” >> $conf
echo -e “check_command check_site!www.$domain” >> $conf
else
echo -e “service_description $domain” >> $conf
echo -e “check_command check_site!$domain” >> $conf
fi
echo -e “}” >> $conf
done
Im vollständigen Script gibt’s dann noch verschieden Details, z.B. ob die Kommandos auch vorhanden sind, Prüfung von exit-codes, logging, tmp-files anlegen und löschen, und im Fehlerfall Mails schicken. Am Schluss zählen wir dann noch mal nach ob es auch genau so viele Config-Files wie Domains gibt und geben Icinga nen reload mit Prüfung des exit-codes. Das Ganze läuft einmal pro Nacht per Crontab, alternativ könnte man es auch an geeigneter Stelle in den ISPConfig-Ablauf beim Speichern einer neuen Domain einlöten.