#!/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 "$@"