#!/bin/bash # --- Paths to the files created by the Nagios export script --- # These are passed as environment variables to the embedded Python script. export ZABBIX_HOSTGROUPS_FILE="zabbix_hostgroups.txt" export ZABBIX_HOSTS_FILE="zabbix_hosts.txt" export ZABBIX_COMMANDS_FILE="zabbix_commands.txt" export ZABBIX_SERVICES_RAW_FILE="zabbix_services_raw.txt" echo "--- Zabbix Automatic Import Script (Bash wrapper for Python) ---" echo " Attempting to ensure all Python dependencies are met." echo "" # --- OS Detection for package manager --- DETECTED_OS="" if [ -f /etc/os-release ]; then . /etc/os-release if [[ "$ID" == "debian" || "$ID_LIKE" == "debian" ]]; then DETECTED_OS="debian" elif [[ "$ID" == "ubuntu" ]]; then DETECTED_OS="ubuntu" elif [[ "$ID" == "centos" || "$ID" == "rhel" || "$ID_LIKE" == "fedora" || "$ID" == "fedora" ]]; then DETECTED_OS="redhat" fi fi install_package() { local package_name="$1" local install_cmd="" case "$DETECTED_OS" in "debian"|"ubuntu") install_cmd="sudo apt update && sudo apt install -y $package_name" ;; "redhat") if command -v dnf &> /dev/null; then install_cmd="sudo dnf install -y $package_name" else install_cmd="sudo yum install -y $package_name" fi ;; *) echo "Error: Unsupported operating system for automatic package installation." >&2 echo "Please install '$package_name' manually." >&2 return 1 ;; esac echo "Attempting to install '$package_name' using: $install_cmd" if eval "$install_cmd"; then echo "'$package_name' installed successfully." return 0 else echo "Error: Installation of '$package_name' failed. Please try installing it manually." >&2 return 1 fi } # --- Check and install Python3 if missing --- echo "Checking for 'python3'..." if ! command -v python3 &> /dev/null; then echo "---------------------------------------------------------" echo "WARNING: 'python3' is not found on your system." echo "This script requires Python 3 to run." echo "" read -p "Do you want to attempt to install 'python3' now? (y/N): " -n 1 -r REPLY_PYTHON echo if [[ $REPLY_PYTHON =~ ^[Yy]$ ]]; then if install_package "python3"; then echo "'python3' installed. Verifying..." if ! command -v python3 &> /dev/null; then echo "Error: Python 3 not found even after installation. Please check your system PATH." >&2 exit 1 fi else echo "Python 3 installation failed. Exiting." >&2 exit 1 fi else echo "Python 3 installation skipped. Exiting." >&2 exit 1 fi else echo "'python3' found." fi # --- Determine the correct pip command (pip3 preferred) --- PIP_CMD="" if command -v pip3 &> /dev/null; then PIP_CMD="pip3" elif command -v pip &> /dev/null; then PIP_CMD="pip" fi # --- Check and install pip (or python3-pip) if missing --- echo "Checking for 'pip' (Python package installer)..." if [[ -z "$PIP_CMD" ]]; then echo "---------------------------------------------------------" echo "WARNING: Neither 'pip3' nor 'pip' command found." echo "Python package installer (pip) is required to install 'pyzabbix'." echo "" read -p "Do you want to attempt to install 'python3-pip' now? (y/N): " -n 1 -r REPLY_PIP echo if [[ $REPLY_PIP =~ ^[Yy]$ ]]; then if install_package "python3-pip"; then echo "'python3-pip' installed. Verifying..." if command -v pip3 &> /dev/null; then PIP_CMD="pip3" elif command -v pip &> /dev/null; then PIP_CMD="pip" fi if [[ -z "$PIP_CMD" ]]; then echo "Error: pip not found even after installation. Please check your system PATH or pip setup." >&2 exit 1 fi else echo "Pip installation failed. Exiting." >&2 exit 1 fi else echo "Pip installation skipped. Exiting." >&2 exit 1 fi else echo "'$PIP_CMD' found." fi # --- Function to check if pyzabbix is installed --- check_pyzabbix() { python3 -c "import pyzabbix" &> /dev/null } # --- Check and potentially install pyzabbix --- echo "Checking for 'pyzabbix' library..." if ! check_pyzabbix; then echo "---------------------------------------------------------" echo "WARNING: The 'pyzabbix' Python library is not found." echo "This script requires 'pyzabbix' to interact with the Zabbix API." echo "" read -p "Do you want to attempt to install 'pyzabbix' now using '$PIP_CMD'? (y/N): " -n 1 -r REPLY_PYZABBIX echo if [[ $REPLY_PYZABBIX =~ ^[Yy]$ ]] then echo "Attempting to install 'pyzabbix'..." if "$PIP_CMD" install pyzabbix; then echo "'pyzabbix' installed successfully." else echo "Installation failed. This often requires elevated privileges (sudo)." read -p "Do you want to try installing 'pyzabbix' with 'sudo $PIP_CMD'? (y/N): " -n 1 -r REPLY_SUDO echo if [[ $REPLY_SUDO =~ ^[Yy]$ ]] then if sudo "$PIP_CMD" install pyzabbix; then echo "'pyzabbix' installed successfully with sudo." else echo "Error: 'pyzabbix' installation failed even with sudo." >&2 echo "Please install it manually using: sudo $PIP_CMD install pyzabbix" >&2 exit 1 fi else echo "Automatic installation skipped. Exiting." >&2 exit 1 fi fi # Verify installation after attempt if ! check_pyzabbix; then echo "Error: 'pyzabbix' is still not found after installation attempt. Exiting." >&2 exit 1 fi else echo "Automatic installation skipped. Exiting." >&2 exit 1 fi else echo "'pyzabbix' library found. Proceeding..." fi echo "" # --- Check if export files exist --- REQUIRED_FILES=("$ZABBIX_HOSTGROUPS_FILE" "$ZABBIX_HOSTS_FILE" "$ZABBIX_COMMANDS_FILE" "$ZABBIX_SERVICES_RAW_FILE") MISSING_FILES=() for file in "${REQUIRED_FILES[@]}"; do if [[ ! -f "$file" ]]; then MISSING_FILES+=("$file") fi done if [[ ${#MISSING_FILES[@]} -gt 0 ]]; then echo "Error: The following required export files are missing:" >&2 for missing_file in "${MISSING_FILES[@]}"; do echo " - $missing_file" >&2 done echo "Please ensure you have run the Nagios export script first to create these files." >&2 exit 1 fi echo "All core dependencies seem to be in order. Launching Zabbix import." # Run the embedded Python script python3 - <