clustered-fucks/compose-files/replicant/matrix-ansible-controller/entrypoint.sh

84 lines
3.1 KiB
Bash

#!/bin/bash
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE} Matrix Ansible Controller${NC}"
echo -e "${BLUE}========================================${NC}"
# --- SSH Key Setup ---
if [ -d "/ssh" ] && [ "$(ls -A /ssh 2>/dev/null)" ]; then
echo -e "${GREEN}[SSH]${NC} Setting up SSH keys from /ssh mount..."
cp -r /ssh/* /root/.ssh/ 2>/dev/null || true
chmod 700 /root/.ssh
chmod 600 /root/.ssh/* 2>/dev/null || true
chmod 644 /root/.ssh/*.pub 2>/dev/null || true
chmod 644 /root/.ssh/known_hosts 2>/dev/null || true
chmod 644 /root/.ssh/config 2>/dev/null || true
echo -e "${GREEN}[SSH]${NC} Keys configured"
else
echo -e "${YELLOW}[SSH]${NC} No SSH keys mounted at /ssh"
echo -e "${YELLOW}[SSH]${NC} Mount with: -v ~/.ssh:/ssh:ro"
fi
# --- Playbook Setup ---
if [ ! -f "/playbook/setup.yml" ]; then
echo -e "${GREEN}[PLAYBOOK]${NC} Cloning matrix-docker-ansible-deploy..."
git clone https://github.com/spantaleev/matrix-docker-ansible-deploy.git /tmp/playbook
mv /tmp/playbook/* /playbook/
mv /tmp/playbook/.* /playbook/ 2>/dev/null || true
rm -rf /tmp/playbook
echo -e "${GREEN}[PLAYBOOK]${NC} Playbook cloned successfully"
else
echo -e "${GREEN}[PLAYBOOK]${NC} Playbook already present"
fi
# --- Inventory Setup ---
if [ -d "/inventory" ] && [ "$(ls -A /inventory 2>/dev/null)" ]; then
echo -e "${GREEN}[INVENTORY]${NC} Linking inventory from /inventory mount..."
rm -rf /playbook/inventory 2>/dev/null || true
ln -sf /inventory /playbook/inventory
echo -e "${GREEN}[INVENTORY]${NC} Inventory linked: /playbook/inventory -> /inventory"
else
echo -e "${YELLOW}[INVENTORY]${NC} No inventory mounted at /inventory"
echo -e "${YELLOW}[INVENTORY]${NC} Mount with: -v /path/to/inventory:/inventory"
mkdir -p /playbook/inventory
fi
# --- Install/Update Ansible Roles ---
if [ -f "/playbook/requirements.yml" ]; then
if [ ! -d "/playbook/roles/galaxy" ] || [ "${UPDATE_ROLES:-false}" = "true" ]; then
echo -e "${GREEN}[ROLES]${NC} Installing Ansible Galaxy roles..."
cd /playbook
rm -rf roles/galaxy
ansible-galaxy install -r requirements.yml -p roles/galaxy/ --force
echo -e "${GREEN}[ROLES]${NC} Roles installed successfully"
else
echo -e "${GREEN}[ROLES]${NC} Roles already installed (set UPDATE_ROLES=true to refresh)"
fi
fi
# --- Display Status ---
echo ""
echo -e "${BLUE}----------------------------------------${NC}"
echo -e "${GREEN}Status:${NC}"
echo -e " Ansible: $(ansible --version | head -1)"
echo -e " Playbook: /playbook"
echo -e " Inventory: /playbook/inventory"
echo ""
echo -e "${BLUE}Quick Commands:${NC}"
echo -e " just install-all # Full installation"
echo -e " just setup-all # Setup all components"
echo -e " just roles # Update roles"
echo -e " just update # git pull + update roles"
echo ""
echo -e "${BLUE}----------------------------------------${NC}"
echo ""
exec "$@"