Tags
#!/bin/bash
# =============================================================================
# Script Name: lxc_list_sed.sh
# Version: 1.10
# Description: This script lists all LXC containers, checks their statuses, and
#              updates the SENDMAILTO field in /etc/logcheck/logcheck.conf for 
#              running containers. It includes error handling and logging.
# =============================================================================

# 01 Required commands
REQUIRED_CMDS=("lxc-ls" "lxc-info" "lxc-attach" "lxc-start")

# 02 Check if required commands are available
for CMD in "${REQUIRED_CMDS[@]}"; do
    if ! command -v $CMD &> /dev/null; then
        echo "Command $CMD is not installed. Please install it and try again."
        exit 1
    fi
done

# 03 Function to check if a container is running
is_container_running() {
    local CONTAINER=$1
    if lxc-info -n "$CONTAINER" | grep -q 'RUNNING'; then
        echo "$CONTAINER is running."
        return 0  # Container is running
    else
        echo "$CONTAINER is not running or does not exist."
        return 1  # Container is not running
    fi
}

# 04 List all running Linux containers
list_running_containers() {
    local CONTAINERS=($(lxc-ls -f | awk '$2 == "RUNNING" {print $1}'))
    echo ${CONTAINERS[@]}
}

# 05 Update SENDMAILTO in /etc/logcheck/logcheck.conf for running LXC containers
update_sendmailto() {
    local NEW_EMAIL="logcheck+srvlogz@bubuit.net"
    local RUNNING_CONTAINERS=($@)  # Get the list of running containers as arguments

    for CONTAINER in "${RUNNING_CONTAINERS[@]}"; do
        echo "Attempting to update SENDMAILTO in $CONTAINER"
        if lxc-attach -n "$CONTAINER" -- bash -c "[ -f /etc/logcheck/logcheck.conf ]"; then
            if lxc-attach -n "$CONTAINER" -- bash -c "sed -i 's/^SENDMAILTO.*/SENDMAILTO=\"$NEW_EMAIL\"/' /etc/logcheck/logcheck.conf"; then
                echo "Successfully updated SENDMAILTO in $CONTAINER"
            else
                echo "Failed to update SENDMAILTO in $CONTAINER"
            fi
        else
            echo "/etc/logcheck/logcheck.conf does not exist in $CONTAINER"
        fi
        sleep 1  # Introduce a sleep to avoid running too fast
    done
}

# 06 Main script execution
RUNNING_CONTAINERS=$(list_running_containers)
echo -e "\nRunning Containers: ${RUNNING_CONTAINERS[@]}"
echo -ne "\n"

if [ -n "$RUNNING_CONTAINERS" ]; then
    update_sendmailto ${RUNNING_CONTAINERS[@]}
else
    echo "No running containers found."
fi