189 lines
4.3 KiB
Bash
189 lines
4.3 KiB
Bash
|
|
#!/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 "$@"
|
|||
|
|
|