#!/bin/bash source ~/.bashrc # Prerequisites Check Script # Validates system requirements before deployment set -e # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' CHECK_TYPE="${1:-all}" log_info() { echo -e "${GREEN}[INFO]${NC} $1" } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } check_pass() { echo -e "${GREEN}✓${NC} $1" } check_fail() { echo -e "${RED}✗${NC} $1" return 1 } check_proxmox() { log_info "Checking Proxmox VE installation..." if command -v pvecm &> /dev/null && command -v pvesm &> /dev/null; then check_pass "Proxmox VE tools installed" pveversion | head -1 else check_fail "Proxmox VE tools not found" return 1 fi } check_network() { log_info "Checking network configuration..." if ip link show vmbr0 &>/dev/null; then check_pass "Bridge vmbr0 exists" ip addr show vmbr0 | grep "inet " || check_warn "vmbr0 has no IP address" else check_warn "Bridge vmbr0 not found (may need network configuration)" fi } check_azure_cli() { log_info "Checking Azure CLI installation..." if command -v az &> /dev/null; then check_pass "Azure CLI installed" az version | head -1 # Check if logged in if az account show &>/dev/null; then check_pass "Azure CLI authenticated" az account show --query "{subscriptionId:id, tenantId:tenantId}" -o table else check_warn "Azure CLI not authenticated (run 'az login')" fi else check_warn "Azure CLI not installed (required for Azure Arc onboarding)" fi } check_kubectl() { log_info "Checking kubectl installation..." if command -v kubectl &> /dev/null; then check_pass "kubectl installed" kubectl version --client --short else check_warn "kubectl not installed (required for Kubernetes management)" fi } check_helm() { log_info "Checking Helm installation..." if command -v helm &> /dev/null; then check_pass "Helm installed" helm version --short else check_warn "Helm not installed (required for GitOps deployments)" fi } check_docker() { log_info "Checking Docker installation..." if command -v docker &> /dev/null; then check_pass "Docker installed" docker --version if docker ps &>/dev/null; then check_pass "Docker daemon running" else check_warn "Docker daemon not running" fi else check_warn "Docker not installed (required for Git/GitLab deployment)" fi } check_terraform() { log_info "Checking Terraform installation..." if command -v terraform &> /dev/null; then check_pass "Terraform installed" terraform version | head -1 else check_warn "Terraform not installed (optional, for IaC)" fi } check_system_resources() { log_info "Checking system resources..." # Check memory TOTAL_MEM=$(free -g | awk '/^Mem:/{print $2}') if [ "$TOTAL_MEM" -ge 8 ]; then check_pass "Memory: ${TOTAL_MEM}GB (minimum 8GB recommended)" else check_warn "Memory: ${TOTAL_MEM}GB (8GB+ recommended)" fi # Check disk space DISK_SPACE=$(df -h / | awk 'NR==2 {print $4}') check_info "Available disk space: $DISK_SPACE" } check_info() { echo -e "${GREEN}ℹ${NC} $1" } main() { log_info "Running prerequisites check: $CHECK_TYPE" case "$CHECK_TYPE" in proxmox) check_proxmox check_network ;; azure) check_azure_cli ;; kubernetes) check_kubectl check_helm ;; git) check_docker ;; all) check_proxmox check_network check_azure_cli check_kubectl check_helm check_docker check_terraform check_system_resources ;; *) log_error "Unknown check type: $CHECK_TYPE" log_info "Available types: proxmox, azure, kubernetes, git, all" exit 1 ;; esac log_info "Prerequisites check completed" } main "$@"