check_mk: entrypoint para recibir parametros
El código original define una función exec_hook() en un script de docker-entry.sh. Esta función se utiliza para ejecutar scripts (hooks) almacenados en subdirectorios específicos del directorio designado por HOOKROOT. La función trabaja de la siguiente manera:
-
Definición de
HOOKDIR: La variableHOOKDIRse construye combinandoHOOKROOTcon un subdirectorio específico pasado como argumento aexec_hook(). Por ejemplo, siHOOKROOT=/docker-entrypoint.dy se llamaexec_hook pre-entrypoint, entoncesHOOKDIRserá/docker-entrypoint.d/pre-entrypoint. -
Verificación del Directorio: La función primero verifica si
HOOKDIR(el subdirectorio específico) existe y es un directorio. Si no existe o no es un directorio, la función no hace nada más. -
Ejecución de Scripts: Si el directorio existe, la función cambia al directorio (
pushd "$HOOKDIR") y luego ejecuta todos los archivos que se encuentren en él, siempre y cuando no sean directorios ([ ! -d "$hook" ]) y tengan permisos de ejecución ([ -x "$hook" ]). Utiliza./"$hook"para ejecutar cada script, asegurando que se ejecute en el contexto del directorio actual. -
Restaura el Directorio: Finalmente, la función regresa al directorio anterior (
popd), manteniendo el entorno del shell limpio y organizado.
¿Qué significa para la estructura de directorios?
La llamada a exec_hook pre-entrypoint y exec_hook post-create sugiere que debes tener dos subdirectorios dentro de HOOKROOT:
-
pre-entrypoint: Contendrá scripts que deseas ejecutar antes de cualquier otra operación definida en tudocker-entry.sh. Es un lugar para preparaciones preliminares. -
post-create: Contendrá scripts que deseas ejecutar después de crear algo específico dentro del contenedor, posiblemente después de la inicialización básica pero antes de que el contenedor comience a servir su propósito principal.
Implicaciones
Este enfoque organiza tus scripts de inicialización en categorías lógicas, lo que facilita la administración y comprensión de qué scripts se ejecutan y cuándo. Debes colocar tus scripts personalizados en los subdirectorios correspondientes, asegurándote de que tengan permisos de ejecución.
#!/bin/bash
# Este script se ejecuta como parte de docker-entrypoint.d/post-entrypoint/
# Configura varias opciones de Checkmk basándose en variables de entorno.
# Asegúrate de que CMK_SITE_ID esté establecido, de lo contrario establece un valor por defecto.
if [ -z "$CMK_SITE_ID" ]; then
CMK_SITE_ID="your_default_site_id"
echo "CMK_SITE_ID no definido. Usando valor por defecto: $CMK_SITE_ID"
fi
# Activar LIVESTATUS_TCP si está configurado para "on"
if [ "$CMK_LIVESTATUS_TCP" = "on" ]; then
omd config "$CMK_SITE_ID" set LIVESTATUS_TCP on
omd config "$CMK_SITE_ID" set LIVESTATUS_TCP_PORT $LIVESTATUS_TCP_PORT
omd config "$CMK_SITE_ID" set LIVESTATUS_TCP_ONLY_FROM "$LIVESTATUS_TCP_ONLY_FROM"
omd config "$CMK_SITE_ID" set LIVESTATUS_TCP_TLS $LIVESTATUS_TCP_TLS
fi
# Configurar AGENT_RECEIVER y AGENT_RECEIVER_PORT
if [ "$AGENT_RECEIVER" = "on" ]; then
# Suponiendo que exista una configuración relevante para AGENT_RECEIVER; ajustar según sea necesario.
echo "Configurando AGENT_RECEIVER..."
# Aquí deberías añadir el comando omd config correspondiente.
fi
# Configuraciones para Apache
if [ "$APACHE_MODE" = "own" ]; then
omd config "$CMK_SITE_ID" set APACHE_MODE own
omd config "$CMK_SITE_ID" set APACHE_TCP_ADDR $APACHE_TCP_ADDR
omd config "$CMK_SITE_ID" set APACHE_TCP_PORT $APACHE_TCP_PORT
fi
# Activar AUTOSTART
if [ "$AUTOSTART" = "on" ]; then
omd config "$CMK_SITE_ID" set AUTOSTART on
fi
# Establecer el CORE de monitoreo
omd config "$CMK_SITE_ID" set CORE $CORE
# Configuraciones para MKEVENTD
if [ "$MKEVENTD" = "on" ]; then
omd config "$CMK_SITE_ID" set MKEVENTD on
omd config "$CMK_SITE_ID" set MKEVENTD_SNMPTRAP $MKEVENTD_SNMPTRAP
omd config "$CMK_SITE_ID" set MKEVENTD_SYSLOG $MKEVENTD_SYSLOG
omd config "$CMK_SITE_ID" set MKEVENTD_SYSLOG_TCP $MKEVENTD_SYSLOG_TCP
fi
# Configuraciones para MULTISITE
omd config "$CMK_SITE_ID" set MULTISITE_AUTHORISATION $MULTISITE_AUTHORISATION
omd config "$CMK_SITE_ID" set MULTISITE_COOKIE_AUTH $MULTISITE_COOKIE_AUTH
# Activar PNP4NAGIOS
if [ "$PNP4NAGIOS" = "on" ]; then
omd config "$CMK_SITE_ID" set PNP4NAGIOS on
fi
# Configuración de TMPFS
omd config "$CMK_SITE_ID" set TMPFS $TMPFS
echo "Configuración completada."
Nota Importante:
-
Verificación de Configuración Existente: Este script asume que las configuraciones mencionadas (
LIVESTATUS_TCP,AGENT_RECEIVER,APACHE_MODE, etc.) son configurables directamente a través deomd config. Según la versión de Checkmk y las capacidades exactas de su CLI, algunos de estos comandos pueden necesitar ajustes o no ser aplicables. Por favor, verifica contra la documentación oficial de Checkmk para asegurarte de que estos comandos sean válidos para tu configuración y versión específica. -
Variables de Entorno: Este script presupone que todas las variables de entorno necesarias están definidas. Si alguna de ellas puede no estarlo, considera añadir verificaciones o valores por defecto adecuados.
$ chgrp -R docker docker-entrypoint.d/
Conclusión
Si, según el código compartido, debes tener los subdirectorios pre-entrypoint y post-create (o cualquier otro nombre que decidas usar en futuras llamadas a exec_hook) dentro del directorio indicado por HOOKROOT para almacenar tus scripts de hooks. Esto permite una extensión modular y ordenada del proceso de inicialización de tu contenedor.
No Comments