84 lines
3.1 KiB
Bash
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 "$@"
|