Skip to main content

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:

  1. Definición de HOOKDIR: La variable HOOKDIR se construye combinando HOOKROOT con un subdirectorio específico pasado como argumento a exec_hook(). Por ejemplo, si HOOKROOT=/docker-entrypoint.d y se llama exec_hook pre-entrypoint, entonces HOOKDIR será /docker-entrypoint.d/pre-entrypoint.

  2. 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.

  3. 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.

  4. 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 tu docker-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 de omd 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.