Jesús Pérez 6a59d34bb1
chore: update provisioning configuration and documentation
Update configuration files, templates, and internal documentation
for the provisioning repository system.

Configuration Updates:
- KMS configuration modernization
- Plugin system settings
- Service port mappings
- Test cluster topologies
- Installation configuration examples
- VM configuration defaults
- Cedar authorization policies

Documentation Updates:
- Library module documentation
- Extension API guides
- AI system documentation
- Service management guides
- Test environment setup
- Plugin usage guides
- Validator configuration documentation

All changes are backward compatible.
2025-12-11 21:50:42 +00:00

525 lines
17 KiB
Bash
Executable File

#!/usr/bin/env bash
# Local Development Environment Verification Script
# This script verifies that the local development environment is working correctly
set -euo pipefail
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Configuration
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
SETTINGS_FILE="${SCRIPT_DIR}/settings.k"
# Function to print colored output
print_status() {
local color=$1
local message=$2
echo -e "${color}${message}${NC}"
}
print_step() {
print_status $BLUE "🔄 $1"
}
print_success() {
print_status $GREEN "$1"
}
print_warning() {
print_status $YELLOW "⚠️ $1"
}
print_error() {
print_status $RED "$1"
}
# Verification results tracking
declare -A verification_results
total_checks=0
passed_checks=0
# Function to run a verification check
run_check() {
local check_name=$1
local check_command=$2
local expected_result=${3:-0}
((total_checks++))
print_step "Checking: $check_name"
if eval "$check_command" &>/dev/null; then
if [ $? -eq $expected_result ]; then
print_success "$check_name"
verification_results["$check_name"]="PASS"
((passed_checks++))
return 0
else
print_error "$check_name - Command succeeded but returned unexpected result"
verification_results["$check_name"]="FAIL"
return 1
fi
else
print_error "$check_name - Command failed"
verification_results["$check_name"]="FAIL"
return 1
fi
}
# Function to check if servers exist
check_servers_exist() {
print_step "Verifying servers exist..."
local servers_output
if servers_output=$(provisioning server list --settings "$SETTINGS_FILE" --out json 2>/dev/null); then
local web_server_count
local db_server_count
web_server_count=$(echo "$servers_output" | jq -r '.[] | select(.name == "web-dev-01") | .name' | wc -l)
db_server_count=$(echo "$servers_output" | jq -r '.[] | select(.name == "db-dev-01") | .name' | wc -l)
if [ "$web_server_count" -eq 1 ] && [ "$db_server_count" -eq 1 ]; then
print_success "Both servers exist (web-dev-01, db-dev-01)"
return 0
else
print_error "Missing servers - found web: $web_server_count, db: $db_server_count"
return 1
fi
else
print_error "Could not retrieve server list"
return 1
fi
}
# Function to check server connectivity
check_server_connectivity() {
print_step "Testing server SSH connectivity..."
local connectivity_issues=0
# Test web server SSH
if provisioning server ssh web-dev-01 --settings "$SETTINGS_FILE" --command "echo 'SSH test successful'" &>/dev/null; then
print_success "SSH to web-dev-01 working"
else
print_error "SSH to web-dev-01 failed"
((connectivity_issues++))
fi
# Test database server SSH
if provisioning server ssh db-dev-01 --settings "$SETTINGS_FILE" --command "echo 'SSH test successful'" &>/dev/null; then
print_success "SSH to db-dev-01 working"
else
print_error "SSH to db-dev-01 failed"
((connectivity_issues++))
fi
if [ $connectivity_issues -eq 0 ]; then
return 0
else
return 1
fi
}
# Function to check installed services
check_installed_services() {
print_step "Verifying installed services..."
local services_output
if services_output=$(provisioning taskserv list --settings "$SETTINGS_FILE" --installed --out json 2>/dev/null); then
print_success "Retrieved installed services list"
# Show installed services
echo "$services_output" | jq -r '.[] | " • \(.name) on \(.servers | join(", "))"'
return 0
else
print_error "Could not retrieve installed services"
return 1
fi
}
# Function to check web server functionality
check_web_server() {
print_step "Testing web server functionality..."
# Check if Nginx is running
if provisioning server ssh web-dev-01 --settings "$SETTINGS_FILE" --command "systemctl is-active nginx" 2>/dev/null | grep -q "active"; then
print_success "Nginx service is running"
else
print_warning "Nginx service not running or not installed"
fi
# Check if port 80 is listening
if provisioning server ssh web-dev-01 --settings "$SETTINGS_FILE" --command "ss -tlnp | grep :80" &>/dev/null; then
print_success "Web server listening on port 80"
else
print_warning "Web server not listening on port 80"
fi
# Try to make HTTP request
if provisioning server ssh web-dev-01 --settings "$SETTINGS_FILE" --command "curl -s -o /dev/null -w '%{http_code}' http://localhost" 2>/dev/null | grep -q "200\|403\|404"; then
print_success "Web server responding to HTTP requests"
return 0
else
print_warning "Web server not responding to HTTP requests"
return 1
fi
}
# Function to check database server functionality
check_database_server() {
print_step "Testing database server functionality..."
# Check if PostgreSQL is running
if provisioning server ssh db-dev-01 --settings "$SETTINGS_FILE" --command "systemctl is-active postgresql" 2>/dev/null | grep -q "active"; then
print_success "PostgreSQL service is running"
else
print_warning "PostgreSQL service not running or not installed"
fi
# Check if PostgreSQL port is listening
if provisioning server ssh db-dev-01 --settings "$SETTINGS_FILE" --command "ss -tlnp | grep :5432" &>/dev/null; then
print_success "PostgreSQL listening on port 5432"
else
print_warning "PostgreSQL not listening on port 5432"
fi
# Test database connection
if provisioning server ssh db-dev-01 --settings "$SETTINGS_FILE" --command "pg_isready -h localhost -p 5432" &>/dev/null; then
print_success "PostgreSQL database is ready"
else
print_warning "PostgreSQL database not ready"
fi
# Check if Redis is running
if provisioning server ssh db-dev-01 --settings "$SETTINGS_FILE" --command "systemctl is-active redis" 2>/dev/null | grep -q "active"; then
print_success "Redis service is running"
elif provisioning server ssh db-dev-01 --settings "$SETTINGS_FILE" --command "systemctl is-active redis-server" 2>/dev/null | grep -q "active"; then
print_success "Redis service is running"
else
print_warning "Redis service not running or not installed"
fi
# Test Redis connection
if provisioning server ssh db-dev-01 --settings "$SETTINGS_FILE" --command "redis-cli ping" 2>/dev/null | grep -q "PONG"; then
print_success "Redis is responding"
return 0
else
print_warning "Redis not responding"
return 1
fi
}
# Function to check network connectivity between servers
check_network_connectivity() {
print_step "Testing network connectivity between servers..."
# Test web server can reach database server
if provisioning server ssh web-dev-01 --settings "$SETTINGS_FILE" --command "ping -c 1 192.168.100.11" &>/dev/null; then
print_success "Web server can ping database server"
else
print_warning "Web server cannot ping database server"
fi
# Test database server can reach web server
if provisioning server ssh db-dev-01 --settings "$SETTINGS_FILE" --command "ping -c 1 192.168.100.10" &>/dev/null; then
print_success "Database server can ping web server"
return 0
else
print_warning "Database server cannot ping web server"
return 1
fi
}
# Function to check development tools
check_development_tools() {
print_step "Checking development tools..."
# Check Node.js on web server
if provisioning server ssh web-dev-01 --settings "$SETTINGS_FILE" --command "node --version" &>/dev/null; then
local node_version
node_version=$(provisioning server ssh web-dev-01 --settings "$SETTINGS_FILE" --command "node --version" 2>/dev/null)
print_success "Node.js installed: $node_version"
else
print_warning "Node.js not installed on web server"
fi
# Check npm on web server
if provisioning server ssh web-dev-01 --settings "$SETTINGS_FILE" --command "npm --version" &>/dev/null; then
local npm_version
npm_version=$(provisioning server ssh web-dev-01 --settings "$SETTINGS_FILE" --command "npm --version" 2>/dev/null)
print_success "npm installed: $npm_version"
else
print_warning "npm not installed on web server"
fi
# Check Git on both servers
local git_issues=0
if provisioning server ssh web-dev-01 --settings "$SETTINGS_FILE" --command "git --version" &>/dev/null; then
print_success "Git installed on web server"
else
print_warning "Git not installed on web server"
((git_issues++))
fi
if provisioning server ssh db-dev-01 --settings "$SETTINGS_FILE" --command "git --version" &>/dev/null; then
print_success "Git installed on database server"
else
print_warning "Git not installed on database server"
((git_issues++))
fi
return $git_issues
}
# Function to perform resource checks
check_resources() {
print_step "Checking resource usage..."
# Check memory usage on both servers
print_step "Memory usage:"
provisioning server ssh web-dev-01 --settings "$SETTINGS_FILE" --command "echo 'Web server:' && free -h | grep Mem" 2>/dev/null || true
provisioning server ssh db-dev-01 --settings "$SETTINGS_FILE" --command "echo 'Database server:' && free -h | grep Mem" 2>/dev/null || true
# Check disk usage
print_step "Disk usage:"
provisioning server ssh web-dev-01 --settings "$SETTINGS_FILE" --command "echo 'Web server:' && df -h | head -2" 2>/dev/null || true
provisioning server ssh db-dev-01 --settings "$SETTINGS_FILE" --command "echo 'Database server:' && df -h | head -2" 2>/dev/null || true
print_success "Resource check completed"
return 0
}
# Function to run functional tests
run_functional_tests() {
print_step "Running functional tests..."
# Test 1: Create a test file on web server
if provisioning server ssh web-dev-01 --settings "$SETTINGS_FILE" --command "echo 'Hello World' > /tmp/test.txt && cat /tmp/test.txt" &>/dev/null; then
print_success "File operations working on web server"
else
print_warning "File operations failed on web server"
fi
# Test 2: Test database creation
if provisioning server ssh db-dev-01 --settings "$SETTINGS_FILE" --command "createdb test_verification 2>/dev/null && dropdb test_verification" &>/dev/null; then
print_success "Database operations working"
else
print_warning "Database operations failed"
fi
# Test 3: Test Redis operations
if provisioning server ssh db-dev-01 --settings "$SETTINGS_FILE" --command "redis-cli set test_key 'test_value' && redis-cli get test_key && redis-cli del test_key" &>/dev/null; then
print_success "Redis operations working"
return 0
else
print_warning "Redis operations failed"
return 1
fi
}
# Function to show verification summary
show_verification_summary() {
echo
print_status $BLUE "📊 Verification Summary"
print_status $BLUE "======================="
echo "Total checks performed: $total_checks"
echo "Checks passed: $passed_checks"
echo "Success rate: $(( passed_checks * 100 / total_checks ))%"
echo
print_status $BLUE "Detailed results:"
for check in "${!verification_results[@]}"; do
local result="${verification_results[$check]}"
if [ "$result" = "PASS" ]; then
print_success "$check"
else
print_error "$check"
fi
done
echo
if [ $passed_checks -eq $total_checks ]; then
print_success "All verifications passed! Your local development environment is ready."
print_status $BLUE "🚀 You can now start developing:"
echo " • Deploy your applications to the web server"
echo " • Use the database for your data storage"
echo " • SSH to servers for manual configuration"
echo " • Check README.md for more usage examples"
elif [ $passed_checks -gt $(( total_checks / 2 )) ]; then
print_warning "Most verifications passed, but some issues were found."
print_status $BLUE "💡 Your environment is mostly functional, but consider fixing the warnings above."
else
print_error "Multiple verification failures detected."
print_status $BLUE "🔧 Please check the errors above and refer to the troubleshooting guide."
fi
}
# Function to show quick start guide
show_quick_start() {
echo
print_status $BLUE "🚀 Quick Start Guide"
print_status $BLUE "==================="
echo
echo "Now that your environment is verified, here are some things you can try:"
echo
print_status $GREEN "1. Deploy a simple web page:"
echo " provisioning server ssh web-dev-01 --settings settings.k --command \\"
echo " \"echo '<h1>Hello World</h1>' | sudo tee /var/www/html/index.html\""
echo
print_status $GREEN "2. Create a database:"
echo " provisioning server ssh db-dev-01 --settings settings.k --command \\"
echo " \"createdb myapp_dev\""
echo
print_status $GREEN "3. Test the web server:"
echo " provisioning server ssh web-dev-01 --settings settings.k --command \\"
echo " \"curl http://localhost\""
echo
print_status $GREEN "4. Connect to PostgreSQL:"
echo " provisioning server ssh db-dev-01 --settings settings.k --command \\"
echo " \"psql -U postgres myapp_dev\""
echo
print_status $BLUE "📚 Next steps:"
echo " • Explore other examples in ../../"
echo " • Read the Infrastructure Management guide"
echo " • Try deploying a real application"
echo " • When done, run ./cleanup.sh to clean up resources"
echo
}
# Main verification function
main() {
local start_time=$(date +%s)
print_status $BLUE "🔍 Local Development Environment Verification"
print_status $BLUE "============================================="
echo
# Set environment
export PROVISIONING_ENV=development
# Run all verification checks
echo "Running comprehensive verification checks..."
echo
# Core functionality checks
if check_servers_exist; then
((total_checks++))
((passed_checks++))
verification_results["Servers Exist"]="PASS"
else
((total_checks++))
verification_results["Servers Exist"]="FAIL"
fi
if check_server_connectivity; then
((total_checks++))
((passed_checks++))
verification_results["SSH Connectivity"]="PASS"
else
((total_checks++))
verification_results["SSH Connectivity"]="FAIL"
fi
if check_installed_services; then
((total_checks++))
((passed_checks++))
verification_results["Services Installation"]="PASS"
else
((total_checks++))
verification_results["Services Installation"]="FAIL"
fi
if check_web_server; then
((total_checks++))
((passed_checks++))
verification_results["Web Server Functionality"]="PASS"
else
((total_checks++))
verification_results["Web Server Functionality"]="FAIL"
fi
if check_database_server; then
((total_checks++))
((passed_checks++))
verification_results["Database Server Functionality"]="PASS"
else
((total_checks++))
verification_results["Database Server Functionality"]="FAIL"
fi
if check_network_connectivity; then
((total_checks++))
((passed_checks++))
verification_results["Network Connectivity"]="PASS"
else
((total_checks++))
verification_results["Network Connectivity"]="FAIL"
fi
if check_development_tools; then
((total_checks++))
((passed_checks++))
verification_results["Development Tools"]="PASS"
else
((total_checks++))
verification_results["Development Tools"]="FAIL"
fi
if check_resources; then
((total_checks++))
((passed_checks++))
verification_results["Resource Usage"]="PASS"
else
((total_checks++))
verification_results["Resource Usage"]="FAIL"
fi
if run_functional_tests; then
((total_checks++))
((passed_checks++))
verification_results["Functional Tests"]="PASS"
else
((total_checks++))
verification_results["Functional Tests"]="FAIL"
fi
local end_time=$(date +%s)
local duration=$((end_time - start_time))
# Show results
show_verification_summary
show_quick_start
echo
print_success "Verification completed in ${duration} seconds"
# Return appropriate exit code
if [ $passed_checks -eq $total_checks ]; then
exit 0
elif [ $passed_checks -gt $(( total_checks / 2 )) ]; then
exit 1
else
exit 2
fi
}
# Error handling for verification script
trap 'print_error "Verification script encountered an error"; exit 3' ERR
# Check if jq is available (needed for JSON parsing)
if ! command -v jq &> /dev/null; then
print_warning "jq not found. Some verifications may be limited."
print_status $BLUE "Install jq for better verification results: apt install jq / brew install jq"
fi
# Run main function
main "$@"