From e2fc0433de38c322ce46ad250bc0f0f03e7710c8 Mon Sep 17 00:00:00 2001 From: Cullum Smith Date: Thu, 24 Oct 2024 06:43:08 -0400 Subject: add icinga --- scripts/hostclass/icinga_server | 203 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 203 insertions(+) create mode 100644 scripts/hostclass/icinga_server (limited to 'scripts/hostclass/icinga_server') diff --git a/scripts/hostclass/icinga_server b/scripts/hostclass/icinga_server new file mode 100644 index 0000000..ccd1d46 --- /dev/null +++ b/scripts/hostclass/icinga_server @@ -0,0 +1,203 @@ +#!/bin/sh + +: ${icinga_username:='s-icinga'} +: ${icinga_dbname:='icinga'} +: ${icinga_dbhost:="$postgres_host"} +: ${icinga_password:='changeme'} +: ${icingaweb_api_password:='changeme'} +: ${icingaweb_dbhost:="$postgres_host"} +: ${icingaweb_dbname:='icingaweb'} +: ${icingaweb_access_role:='icinga-access'} + +# Note that icinga does not support nested groups. +: ${icingaweb_admin_groups:=''} + +icinga_local_user=icinga +icinga_dn="uid=${icinga_username},${robots_basedn}" +icinga_conf_dir=/usr/local/etc/icinga2 +icinga_data_dir=/var/lib/icinga2 +icinga_cert_dir="${icinga_data_dir}/certs" +icinga_ca_dir="${icinga_data_dir}/ca" +icingadb_conf_dir=/usr/local/etc/icingadb +icingaweb_api_username=icingaweb2 +icingaweb_https_cert="${nginx_conf_dir}/icingaweb.crt" +icingaweb_https_key="${nginx_conf_dir}/icingaweb.key" +icingaweb_install_dir=/usr/local/www/icingaweb2 +icingaweb_webroot="${icingaweb_install_dir}/public" +icingaweb_conf_dir=/usr/local/etc/icingaweb2 +icingaweb_fpm_socket=/var/run/fpm-icingaweb.sock +icingaweb_client_keytab="${keytab_dir}/icingaweb.client.keytab" +nginx_keytab="${keytab_dir}/nginx.keytab" +redis_user=redis +redis_data_dir=/var/db/redis +redis_sock=/var/run/redis/redis.sock +redis_port=6379 +redis_data_dir=/var/db/redis + +icinga_psql(){ + KRB5CCNAME=MEMORY: KRB5_CLIENT_KTNAME="$icingaweb_client_keytab" \ + psql \ + --quiet --no-align --tuples-only --echo-all \ + --host="$icinga_dbhost" \ + --dbname="$icinga_dbname" \ + --username="$icinga_username" \ + --no-password \ + "$@" +} + +icingaweb_psql(){ + KRB5CCNAME=MEMORY: KRB5_CLIENT_KTNAME="$icingaweb_client_keytab" \ + psql \ + --quiet --no-align --tuples-only --echo-all \ + --host="$icingaweb_dbhost" \ + --dbname="$icingaweb_dbname" \ + --username="$icinga_username" \ + --no-password \ + "$@" +} + +# Install packages. +pkg install -y \ + icinga2 \ + icingadb \ + icingaweb2-php${php_version} \ + icingaweb2-module-icingadb-php${php_version} \ + nginx \ + redis + +# Create dataset for icinga state directory +create_dataset -o "mountpoint=${icinga_data_dir}" "${state_dataset}/icinga" +install_directory -m 0755 -o "$icinga_local_user" -g "$icinga_local_user" "$icinga_data_dir" + +# Create icinga LDAP user, principal, and keytab. +# Note that we have a separate userPassword attribute in LDAP because icingadb is +# written in golang, and it's pq library does not build with GSSAPI support. +# GSSAPI is supported by icingaweb2 via PHP's PDO, however, so we use it there. +# We also need a userPassword attribute for icingaweb2 authn/authz. +ldap_add "$icinga_dn" < /usr/local/etc/php-fpm.d/www.conf + +# Copy TLS certificate for nginx. +install_certificate nginx "$icingaweb_https_cert" +install_certificate_key nginx "$icingaweb_https_key" + +# Enable and start daemons. +sysrc -v \ + nginx_enable=YES \ + php_fpm_enable=YES \ + redis_enable=YES \ + icingadb_enable=YES \ + icinga2_enable=YES +service nginx restart +service php_fpm restart +service redis restart +service icingadb restart > /dev/null 2>&1 < /dev/null || die 'failed to start icingadb' +service icinga2 restart + +# Create access role. +ldap_add "cn=${icingaweb_access_role},${roles_basedn}" <