#!/bin/bash set -euo pipefail # Proxmox Agent Setup Script SITE="${SITE:-}" NODE="${NODE:-}" CLOUDFLARE_TUNNEL_TOKEN="${CLOUDFLARE_TUNNEL_TOKEN:-}" PROMETHEUS_ENABLED="${PROMETHEUS_ENABLED:-true}" log() { echo "[$(date +'%Y-%m-%d %H:%M:%S')] $*" >&2 } error() { log "ERROR: $*" exit 1 } check_prerequisites() { if [ -z "${SITE}" ]; then error "SITE environment variable is required" fi if [ -z "${NODE}" ]; then error "NODE environment variable is required" fi if ! command -v pvesh &> /dev/null; then error "This script must be run on a Proxmox node" fi } install_cloudflared() { log "Installing cloudflared..." if command -v cloudflared &> /dev/null; then log "cloudflared is already installed" return fi # Download and install cloudflared ARCH=$(uname -m) case "${ARCH}" in x86_64) ARCH="amd64" ;; aarch64) ARCH="arm64" ;; *) error "Unsupported architecture: ${ARCH}" ;; esac CLOUDFLARED_VERSION="2023.10.0" wget -q "https://github.com/cloudflare/cloudflared/releases/download/${CLOUDFLARED_VERSION}/cloudflared-linux-${ARCH}" -O /usr/local/bin/cloudflared chmod +x /usr/local/bin/cloudflared log "cloudflared installed successfully" } configure_cloudflared_tunnel() { log "Configuring Cloudflare tunnel..." if [ -z "${CLOUDFLARE_TUNNEL_TOKEN}" ]; then log "Warning: CLOUDFLARE_TUNNEL_TOKEN not set, skipping tunnel configuration" return fi # Create tunnel config directory mkdir -p /etc/cloudflared # Create tunnel credentials cat > /etc/cloudflared/${SITE}-tunnel.json < /etc/systemd/system/cloudflared-tunnel.service < "/etc/cloudflared/tunnel-configs/${SITE}.yaml" < /dev/null; then log "pve_exporter is already installed" return fi # Install pve_exporter via pip or download binary if command -v pip3 &> /dev/null; then pip3 install pve_exporter else log "Warning: pip3 not found, please install pve_exporter manually" return fi # Create systemd service cat > /etc/systemd/system/pve-exporter.service < Permissions -> API Tokens" log " Token ID: crossplane-${SITE}" log " User: root@pam or dedicated service account" log " Permissions: Administrator or specific VM permissions" } main() { log "Starting Proxmox agent setup for site ${SITE}, node ${NODE}..." check_prerequisites install_cloudflared configure_cloudflared_tunnel install_prometheus_exporter configure_proxmox_api log "Proxmox agent setup completed!" log "" log "Next steps:" log "1. Verify Cloudflare tunnel: systemctl status cloudflared-tunnel" log "2. Verify Prometheus exporter: curl http://localhost:9221/metrics" log "3. Create API token in Proxmox web UI for Crossplane provider" } main "$@"