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.
323 lines
9.3 KiB
Bash
Executable File
323 lines
9.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Local Development Environment Deployment Script
|
|
# This script deploys a basic local development environment
|
|
|
|
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"
|
|
CONFIG_FILE="${SCRIPT_DIR}/config.toml"
|
|
CHECK_MODE=false
|
|
|
|
# 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"
|
|
}
|
|
|
|
# Function to check if provisioning command is available
|
|
check_provisioning() {
|
|
if ! command -v provisioning &> /dev/null; then
|
|
print_error "Provisioning command not found. Please install provisioning first."
|
|
exit 1
|
|
fi
|
|
print_success "Provisioning available"
|
|
}
|
|
|
|
# Function to validate configuration
|
|
validate_config() {
|
|
print_step "Validating configuration..."
|
|
|
|
if ! provisioning validate config --settings "$SETTINGS_FILE"; then
|
|
print_error "Configuration validation failed"
|
|
exit 1
|
|
fi
|
|
|
|
print_success "Configuration validation passed"
|
|
}
|
|
|
|
# Function to check prerequisites
|
|
check_prerequisites() {
|
|
print_step "Checking prerequisites..."
|
|
|
|
# Check if Docker is available (for local provider)
|
|
if command -v docker &> /dev/null; then
|
|
if ! docker ps &> /dev/null; then
|
|
print_warning "Docker is installed but not running. Some local provider features may not work."
|
|
else
|
|
print_success "Docker is available and running"
|
|
fi
|
|
else
|
|
print_warning "Docker not found. Local provider will use alternative methods."
|
|
fi
|
|
|
|
# Check available disk space (need at least 5GB)
|
|
available_space=$(df "$SCRIPT_DIR" | tail -1 | awk '{print $4}')
|
|
required_space=$((5 * 1024 * 1024)) # 5GB in KB
|
|
|
|
if [ "$available_space" -lt "$required_space" ]; then
|
|
print_error "Insufficient disk space. Need at least 5GB, have $(($available_space / 1024 / 1024))GB"
|
|
exit 1
|
|
fi
|
|
|
|
print_success "Prerequisites check passed"
|
|
}
|
|
|
|
# Function to deploy servers
|
|
deploy_servers() {
|
|
print_step "Deploying servers..."
|
|
|
|
local cmd_args=(
|
|
"server" "create"
|
|
"--settings" "$SETTINGS_FILE"
|
|
)
|
|
|
|
if [ "$CHECK_MODE" = true ]; then
|
|
cmd_args+=("--check")
|
|
print_step "Running in check mode (dry run)"
|
|
fi
|
|
|
|
if ! provisioning "${cmd_args[@]}"; then
|
|
print_error "Server deployment failed"
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$CHECK_MODE" = false ]; then
|
|
print_success "Servers deployed successfully"
|
|
|
|
# Wait for servers to be ready
|
|
print_step "Waiting for servers to be ready..."
|
|
sleep 10 # Give servers time to initialize
|
|
|
|
# Verify servers are running
|
|
provisioning server list --settings "$SETTINGS_FILE"
|
|
else
|
|
print_success "Server deployment plan validated"
|
|
fi
|
|
}
|
|
|
|
# Function to install task services
|
|
install_services() {
|
|
if [ "$CHECK_MODE" = true ]; then
|
|
print_step "Skipping service installation in check mode"
|
|
return
|
|
fi
|
|
|
|
print_step "Installing task services..."
|
|
|
|
# Install container runtime first (dependency for other services)
|
|
print_step "Installing containerd..."
|
|
if ! provisioning taskserv create containerd --settings "$SETTINGS_FILE" --yes; then
|
|
print_warning "Containerd installation failed, continuing..."
|
|
else
|
|
print_success "Containerd installed"
|
|
fi
|
|
|
|
# Install Nginx on web server
|
|
print_step "Installing Nginx on web server..."
|
|
if ! provisioning taskserv create nginx --servers web-dev-01 --settings "$SETTINGS_FILE" --yes; then
|
|
print_warning "Nginx installation failed, continuing..."
|
|
else
|
|
print_success "Nginx installed on web-dev-01"
|
|
fi
|
|
|
|
# Install PostgreSQL on database server
|
|
print_step "Installing PostgreSQL on database server..."
|
|
if ! provisioning taskserv create postgresql --servers db-dev-01 --settings "$SETTINGS_FILE" --yes; then
|
|
print_warning "PostgreSQL installation failed, continuing..."
|
|
else
|
|
print_success "PostgreSQL installed on db-dev-01"
|
|
fi
|
|
|
|
# Install Redis on database server
|
|
print_step "Installing Redis on database server..."
|
|
if ! provisioning taskserv create redis --servers db-dev-01 --settings "$SETTINGS_FILE" --yes; then
|
|
print_warning "Redis installation failed, continuing..."
|
|
else
|
|
print_success "Redis installed on db-dev-01"
|
|
fi
|
|
|
|
# Install Node.js on web server
|
|
print_step "Installing Node.js on web server..."
|
|
if ! provisioning taskserv create nodejs --servers web-dev-01 --settings "$SETTINGS_FILE" --yes; then
|
|
print_warning "Node.js installation failed, continuing..."
|
|
else
|
|
print_success "Node.js installed on web-dev-01"
|
|
fi
|
|
|
|
print_success "Task services installation completed"
|
|
}
|
|
|
|
# Function to verify deployment
|
|
verify_deployment() {
|
|
if [ "$CHECK_MODE" = true ]; then
|
|
print_step "Skipping verification in check mode"
|
|
return
|
|
fi
|
|
|
|
print_step "Verifying deployment..."
|
|
|
|
# Check server status
|
|
print_step "Checking server status..."
|
|
provisioning server list --settings "$SETTINGS_FILE"
|
|
|
|
# Check installed services
|
|
print_step "Checking installed services..."
|
|
provisioning taskserv list --settings "$SETTINGS_FILE" --installed
|
|
|
|
# Try to SSH to servers
|
|
print_step "Testing SSH connectivity..."
|
|
if provisioning server ssh web-dev-01 --settings "$SETTINGS_FILE" --command "echo 'Web server SSH OK'" 2>/dev/null; then
|
|
print_success "SSH to web-dev-01 working"
|
|
else
|
|
print_warning "SSH to web-dev-01 failed"
|
|
fi
|
|
|
|
if provisioning server ssh db-dev-01 --settings "$SETTINGS_FILE" --command "echo 'Database server SSH OK'" 2>/dev/null; then
|
|
print_success "SSH to db-dev-01 working"
|
|
else
|
|
print_warning "SSH to db-dev-01 failed"
|
|
fi
|
|
|
|
print_success "Deployment verification completed"
|
|
}
|
|
|
|
# Function to show usage information
|
|
show_usage() {
|
|
cat << EOF
|
|
Local Development Environment Deployment Script
|
|
|
|
Usage: $0 [OPTIONS]
|
|
|
|
OPTIONS:
|
|
--check, -c Run in check mode (dry run, show what would be deployed)
|
|
--help, -h Show this help message
|
|
|
|
EXAMPLES:
|
|
$0 Deploy the development environment
|
|
$0 --check See what would be deployed without making changes
|
|
$0 -c Same as --check
|
|
|
|
ENVIRONMENT:
|
|
PROVISIONING_DEBUG=true Enable debug output
|
|
PROVISIONING_ENV=dev Set environment (already set to dev for this example)
|
|
|
|
FILES:
|
|
settings.k Infrastructure definition
|
|
config.toml Environment configuration
|
|
deploy.sh This deployment script
|
|
verify.sh Verification script
|
|
cleanup.sh Cleanup script
|
|
|
|
For more information, see README.md
|
|
EOF
|
|
}
|
|
|
|
# Function to show post-deployment information
|
|
show_post_deployment_info() {
|
|
if [ "$CHECK_MODE" = true ]; then
|
|
return
|
|
fi
|
|
|
|
print_success "Local Development Environment Deployment Complete!"
|
|
echo
|
|
print_status $BLUE "📋 What was created:"
|
|
echo " • web-dev-01: Web development server (192.168.100.10)"
|
|
echo " • db-dev-01: Database server (192.168.100.11)"
|
|
echo
|
|
print_status $BLUE "🔧 Installed services:"
|
|
echo " • Nginx web server (port 80)"
|
|
echo " • PostgreSQL database (port 5432)"
|
|
echo " • Redis cache (port 6379)"
|
|
echo " • Node.js runtime"
|
|
echo " • Container runtime (containerd)"
|
|
echo
|
|
print_status $BLUE "🚀 Next steps:"
|
|
echo " • SSH to servers: provisioning server ssh web-dev-01 --settings settings.k"
|
|
echo " • Verify deployment: ./verify.sh"
|
|
echo " • Start developing your application"
|
|
echo " • When done, clean up: ./cleanup.sh"
|
|
echo
|
|
print_status $BLUE "📚 Learn more:"
|
|
echo " • Read README.md for detailed usage"
|
|
echo " • Try other examples in ../../"
|
|
echo " • Check the troubleshooting guide if you have issues"
|
|
echo
|
|
}
|
|
|
|
# Main deployment function
|
|
main() {
|
|
local start_time=$(date +%s)
|
|
|
|
print_status $BLUE "🚀 Local Development Environment Deployment"
|
|
print_status $BLUE "=============================================="
|
|
echo
|
|
|
|
# Parse command line arguments
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
--check|-c)
|
|
CHECK_MODE=true
|
|
shift
|
|
;;
|
|
--help|-h)
|
|
show_usage
|
|
exit 0
|
|
;;
|
|
*)
|
|
print_error "Unknown option: $1"
|
|
show_usage
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Set environment variable
|
|
export PROVISIONING_ENV=development
|
|
|
|
# Run deployment steps
|
|
check_provisioning
|
|
check_prerequisites
|
|
validate_config
|
|
deploy_servers
|
|
install_services
|
|
verify_deployment
|
|
|
|
local end_time=$(date +%s)
|
|
local duration=$((end_time - start_time))
|
|
|
|
echo
|
|
print_success "Deployment completed in ${duration} seconds"
|
|
show_post_deployment_info
|
|
}
|
|
|
|
# Error handling
|
|
trap 'print_error "Deployment failed. Check the output above for details."; exit 1' ERR
|
|
|
|
# Run main function
|
|
main "$@" |