first commit
This commit is contained in:
Executable
+157
@@ -0,0 +1,157 @@
|
||||
#!/bin/bash
|
||||
# Script de integración simplificado para Zabbix External Scripts
|
||||
# ==============================================================
|
||||
#
|
||||
# Este script debe colocarse en:
|
||||
# /usr/lib/zabbix/externalscripts/cisco_single_mac_discovery.sh
|
||||
#
|
||||
# Y configurar permisos:
|
||||
# chmod +x /usr/lib/zabbix/externalscripts/cisco_single_mac_discovery.sh
|
||||
# chown zabbix:zabbix /usr/lib/zabbix/externalscripts/cisco_single_mac_discovery.sh
|
||||
|
||||
# Configuración
|
||||
CONTAINER_IMAGE="cisco-mac-monitor:latest"
|
||||
TIMEOUT=60
|
||||
|
||||
# Función de logging para stderr
|
||||
log() {
|
||||
echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" >&2
|
||||
}
|
||||
|
||||
error() {
|
||||
echo "[$(date +'%Y-%m-%d %H:%M:%S')] ERROR: $1" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Función para ejecutar discovery en un dispositivo específico
|
||||
run_single_device_discovery() {
|
||||
local host="$1"
|
||||
local username="$2"
|
||||
local password="$3"
|
||||
local hostname="$4"
|
||||
|
||||
# Validar parámetros
|
||||
if [[ -z "$host" ]] || [[ -z "$username" ]] || [[ -z "$password" ]]; then
|
||||
error "Parámetros requeridos: host, username, password"
|
||||
fi
|
||||
|
||||
log "Ejecutando discovery para dispositivo: $host"
|
||||
|
||||
# Construir comando Docker
|
||||
local docker_cmd=(
|
||||
docker run --rm --network host
|
||||
"$CONTAINER_IMAGE"
|
||||
--host "$host"
|
||||
--username "$username"
|
||||
--password "$password"
|
||||
--quiet
|
||||
)
|
||||
|
||||
# Agregar hostname si se proporciona
|
||||
if [[ -n "$hostname" ]]; then
|
||||
docker_cmd+=(--hostname "$hostname")
|
||||
fi
|
||||
|
||||
# Ejecutar con timeout
|
||||
local json_data
|
||||
if ! json_data=$(timeout "$TIMEOUT" "${docker_cmd[@]}" 2>/dev/null); then
|
||||
error "Falló la ejecución de discovery para $host (timeout: ${TIMEOUT}s)"
|
||||
fi
|
||||
|
||||
# Validar JSON
|
||||
if [[ -z "$json_data" ]]; then
|
||||
error "No se obtuvieron datos del dispositivo $host"
|
||||
fi
|
||||
|
||||
# Validar formato JSON básico
|
||||
if ! echo "$json_data" | python3 -m json.tool >/dev/null 2>&1; then
|
||||
error "Datos no están en formato JSON válido para $host"
|
||||
fi
|
||||
|
||||
# Retornar datos
|
||||
echo "$json_data"
|
||||
}
|
||||
|
||||
# Función para mostrar ayuda
|
||||
show_help() {
|
||||
cat << EOF
|
||||
Cisco Single MAC Discovery - Zabbix Integration Script
|
||||
|
||||
USAGE:
|
||||
$0 <HOST> <USERNAME> <PASSWORD> [HOSTNAME]
|
||||
|
||||
PARAMETERS:
|
||||
HOST IP address or hostname of Cisco device
|
||||
USERNAME SSH username
|
||||
PASSWORD SSH password
|
||||
HOSTNAME Optional device hostname for identification
|
||||
|
||||
EXAMPLES:
|
||||
# Básico
|
||||
$0 192.168.1.10 admin cisco123
|
||||
|
||||
# Con hostname personalizado
|
||||
$0 192.168.1.10 admin cisco123 SW-CORE-001
|
||||
|
||||
# Para usar en Zabbix Discovery Rule
|
||||
cisco_mac_discovery.sh {HOST.IP} {$USER} {$PASSWORD} {HOST.NAME}
|
||||
|
||||
ZABBIX CONFIGURATION:
|
||||
Discovery Rule:
|
||||
- Name: Cisco Device MAC Discovery
|
||||
- Type: External check
|
||||
- Key: cisco_mac_discovery.sh[{HOST.IP},{$CISCO_USER},{$CISCO_PASSWORD},{HOST.NAME}]
|
||||
- Update interval: 5m
|
||||
|
||||
Required Macros:
|
||||
- {$CISCO_USER} : SSH username
|
||||
- {$CISCO_PASSWORD} : SSH password
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
# Verificar que Docker esté disponible
|
||||
check_dependencies() {
|
||||
if ! command -v docker >/dev/null 2>&1; then
|
||||
error "Docker no está instalado o no está en PATH"
|
||||
fi
|
||||
|
||||
if ! command -v python3 >/dev/null 2>&1; then
|
||||
error "Python3 no está instalado o no está en PATH"
|
||||
fi
|
||||
|
||||
# Verificar que la imagen existe
|
||||
if ! docker image inspect "$CONTAINER_IMAGE" >/dev/null 2>&1; then
|
||||
error "Imagen Docker no encontrada: $CONTAINER_IMAGE"
|
||||
fi
|
||||
}
|
||||
|
||||
# Función principal
|
||||
main() {
|
||||
case "${1:-}" in
|
||||
"help"|"--help"|"-h"|"")
|
||||
show_help
|
||||
exit 0
|
||||
;;
|
||||
"test")
|
||||
check_dependencies
|
||||
log "Dependencias verificadas correctamente"
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
# Verificar dependencias
|
||||
check_dependencies
|
||||
|
||||
# Obtener parámetros
|
||||
local host="$1"
|
||||
local username="$2"
|
||||
local password="$3"
|
||||
local hostname="$4"
|
||||
|
||||
# Ejecutar discovery
|
||||
run_single_device_discovery "$host" "$username" "$password" "$hostname"
|
||||
}
|
||||
|
||||
# Ejecutar función principal con todos los argumentos
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user