294 lines
9.4 KiB
Bash
294 lines
9.4 KiB
Bash
![]() |
#!/bin/bash
|
|||
|
|
|||
|
# Configuration System Demonstration Script
|
|||
|
# Shows the new modular configuration system in action
|
|||
|
# Usage: ./demo-config.sh
|
|||
|
|
|||
|
set -e
|
|||
|
|
|||
|
# Script configuration
|
|||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|||
|
CONFIG_DIR="$(dirname "$SCRIPT_DIR")"
|
|||
|
PROJECT_ROOT="$(dirname "$CONFIG_DIR")"
|
|||
|
|
|||
|
# Colors for output
|
|||
|
RED='\033[0;31m'
|
|||
|
GREEN='\033[0;32m'
|
|||
|
YELLOW='\033[1;33m'
|
|||
|
BLUE='\033[0;34m'
|
|||
|
PURPLE='\033[0;35m'
|
|||
|
CYAN='\033[0;36m'
|
|||
|
BOLD='\033[1m'
|
|||
|
NC='\033[0m' # No Color
|
|||
|
|
|||
|
# Print functions
|
|||
|
print_header() {
|
|||
|
echo -e "\n${BOLD}${BLUE}================================${NC}"
|
|||
|
echo -e "${BOLD}${BLUE}$1${NC}"
|
|||
|
echo -e "${BOLD}${BLUE}================================${NC}\n"
|
|||
|
}
|
|||
|
|
|||
|
print_section() {
|
|||
|
echo -e "\n${BOLD}${CYAN}--- $1 ---${NC}"
|
|||
|
}
|
|||
|
|
|||
|
print_success() {
|
|||
|
echo -e "${GREEN}✓${NC} $1"
|
|||
|
}
|
|||
|
|
|||
|
print_info() {
|
|||
|
echo -e "${BLUE}ℹ${NC} $1"
|
|||
|
}
|
|||
|
|
|||
|
print_warning() {
|
|||
|
echo -e "${YELLOW}⚠${NC} $1"
|
|||
|
}
|
|||
|
|
|||
|
print_error() {
|
|||
|
echo -e "${RED}✗${NC} $1"
|
|||
|
}
|
|||
|
|
|||
|
# Main demonstration
|
|||
|
main() {
|
|||
|
print_header "Rustelo Configuration System Demo"
|
|||
|
|
|||
|
echo "This demonstration shows the new modular configuration system"
|
|||
|
echo "that separates features into environment-specific configurations."
|
|||
|
echo ""
|
|||
|
echo "The system provides:"
|
|||
|
echo " • Environment-specific settings (dev, prod, example)"
|
|||
|
echo " • Feature-based configuration modules"
|
|||
|
echo " • Automatic configuration building and validation"
|
|||
|
echo " • Backup and management utilities"
|
|||
|
|
|||
|
print_section "Configuration Structure"
|
|||
|
echo "Current configuration directory structure:"
|
|||
|
echo ""
|
|||
|
tree "$CONFIG_DIR" -I "__pycache__|*.pyc|*.backup*" 2>/dev/null || {
|
|||
|
find "$CONFIG_DIR" -type f -name "*.toml" -o -name "*.sh" -o -name "*.py" | head -20
|
|||
|
}
|
|||
|
|
|||
|
print_section "Available Features"
|
|||
|
echo "Features configured in the system:"
|
|||
|
echo ""
|
|||
|
|
|||
|
local features_dir="$CONFIG_DIR/features"
|
|||
|
if [ -d "$features_dir" ]; then
|
|||
|
for feature_dir in "$features_dir"/*; do
|
|||
|
if [ -d "$feature_dir" ]; then
|
|||
|
local feature_name=$(basename "$feature_dir")
|
|||
|
local env_count=0
|
|||
|
local env_list=""
|
|||
|
|
|||
|
for env_file in "$feature_dir"/*.toml; do
|
|||
|
if [ -f "$env_file" ]; then
|
|||
|
env_count=$((env_count + 1))
|
|||
|
local env_name=$(basename "$env_file" .toml)
|
|||
|
env_list="$env_list $env_name"
|
|||
|
fi
|
|||
|
done
|
|||
|
|
|||
|
printf " %-12s → %d environments (%s)\n" "$feature_name" "$env_count" "$env_list"
|
|||
|
fi
|
|||
|
done
|
|||
|
fi
|
|||
|
|
|||
|
print_section "Building Development Configuration"
|
|||
|
echo "Building configuration for development environment..."
|
|||
|
echo ""
|
|||
|
|
|||
|
local dev_config="demo_config_dev.toml"
|
|||
|
if "$SCRIPT_DIR/build-config.sh" dev "$dev_config"; then
|
|||
|
print_success "Development configuration built successfully"
|
|||
|
|
|||
|
# Show some statistics
|
|||
|
local file_size=$(du -h "$dev_config" | cut -f1)
|
|||
|
local line_count=$(wc -l < "$dev_config")
|
|||
|
local section_count=$(grep -c "^\[.*\]" "$dev_config")
|
|||
|
|
|||
|
echo ""
|
|||
|
echo "Development Configuration Stats:"
|
|||
|
echo " • File size: $file_size"
|
|||
|
echo " • Lines: $line_count"
|
|||
|
echo " • Sections: $section_count"
|
|||
|
|
|||
|
echo ""
|
|||
|
echo "Sample configuration sections:"
|
|||
|
echo ""
|
|||
|
grep "^\[.*\]" "$dev_config" | head -10 | sed 's/^/ /'
|
|||
|
else
|
|||
|
print_error "Failed to build development configuration"
|
|||
|
fi
|
|||
|
|
|||
|
print_section "Building Production Configuration"
|
|||
|
echo "Building configuration for production environment..."
|
|||
|
echo ""
|
|||
|
|
|||
|
local prod_config="demo_config_prod.toml"
|
|||
|
if "$SCRIPT_DIR/build-config.sh" prod "$prod_config"; then
|
|||
|
print_success "Production configuration built successfully"
|
|||
|
|
|||
|
# Show some statistics
|
|||
|
local file_size=$(du -h "$prod_config" | cut -f1)
|
|||
|
local line_count=$(wc -l < "$prod_config")
|
|||
|
local section_count=$(grep -c "^\[.*\]" "$prod_config")
|
|||
|
|
|||
|
echo ""
|
|||
|
echo "Production Configuration Stats:"
|
|||
|
echo " • File size: $file_size"
|
|||
|
echo " • Lines: $line_count"
|
|||
|
echo " • Sections: $section_count"
|
|||
|
else
|
|||
|
print_error "Failed to build production configuration"
|
|||
|
fi
|
|||
|
|
|||
|
print_section "Configuration Comparison"
|
|||
|
echo "Comparing development vs production configurations:"
|
|||
|
echo ""
|
|||
|
|
|||
|
if [ -f "$dev_config" ] && [ -f "$prod_config" ]; then
|
|||
|
echo "Environment Differences:"
|
|||
|
echo ""
|
|||
|
|
|||
|
# Extract key differences
|
|||
|
echo "Development specific settings:"
|
|||
|
grep -E "(debug|log_level|localhost|127\.0\.0\.1)" "$dev_config" | head -5 | sed 's/^/ /'
|
|||
|
|
|||
|
echo ""
|
|||
|
echo "Production specific settings:"
|
|||
|
grep -E "(https|ssl|encryption|backup)" "$prod_config" | head -5 | sed 's/^/ /'
|
|||
|
|
|||
|
echo ""
|
|||
|
echo "Size comparison:"
|
|||
|
echo " • Dev config: $(wc -l < "$dev_config") lines"
|
|||
|
echo " • Prod config: $(wc -l < "$prod_config") lines"
|
|||
|
echo " • Difference: $(($(wc -l < "$prod_config") - $(wc -l < "$dev_config"))) lines"
|
|||
|
fi
|
|||
|
|
|||
|
print_section "Feature Configuration Examples"
|
|||
|
echo "Sample feature configurations:"
|
|||
|
echo ""
|
|||
|
|
|||
|
# Show auth feature differences
|
|||
|
if [ -f "$CONFIG_DIR/features/auth/dev.toml" ] && [ -f "$CONFIG_DIR/features/auth/prod.toml" ]; then
|
|||
|
echo "Authentication Feature:"
|
|||
|
echo " Development:"
|
|||
|
grep -E "(max_login_attempts|lockout_duration)" "$CONFIG_DIR/features/auth/dev.toml" | head -2 | sed 's/^/ /'
|
|||
|
echo " Production:"
|
|||
|
grep -E "(max_login_attempts|lockout_duration)" "$CONFIG_DIR/features/auth/prod.toml" | head -2 | sed 's/^/ /'
|
|||
|
echo ""
|
|||
|
fi
|
|||
|
|
|||
|
# Show TLS feature differences
|
|||
|
if [ -f "$CONFIG_DIR/features/tls/dev.toml" ] && [ -f "$CONFIG_DIR/features/tls/prod.toml" ]; then
|
|||
|
echo "TLS Feature:"
|
|||
|
echo " Development:"
|
|||
|
grep -E "(tls = |enabled = )" "$CONFIG_DIR/features/tls/dev.toml" | head -2 | sed 's/^/ /'
|
|||
|
echo " Production:"
|
|||
|
grep -E "(tls = |enabled = )" "$CONFIG_DIR/features/tls/prod.toml" | head -2 | sed 's/^/ /'
|
|||
|
echo ""
|
|||
|
fi
|
|||
|
|
|||
|
print_section "Configuration Validation"
|
|||
|
echo "Validating built configurations..."
|
|||
|
echo ""
|
|||
|
|
|||
|
# Basic validation
|
|||
|
local validation_passed=0
|
|||
|
local validation_total=0
|
|||
|
|
|||
|
for config in "$dev_config" "$prod_config"; do
|
|||
|
if [ -f "$config" ]; then
|
|||
|
validation_total=$((validation_total + 1))
|
|||
|
|
|||
|
# Check for required sections
|
|||
|
local required_sections=("server" "database" "app")
|
|||
|
local config_name=$(basename "$config" .toml)
|
|||
|
|
|||
|
echo "Validating $config_name:"
|
|||
|
|
|||
|
local section_issues=0
|
|||
|
for section in "${required_sections[@]}"; do
|
|||
|
if grep -q "^\[${section}\]" "$config"; then
|
|||
|
echo " ✓ Section [$section] present"
|
|||
|
else
|
|||
|
echo " ✗ Section [$section] missing"
|
|||
|
section_issues=$((section_issues + 1))
|
|||
|
fi
|
|||
|
done
|
|||
|
|
|||
|
if [ $section_issues -eq 0 ]; then
|
|||
|
validation_passed=$((validation_passed + 1))
|
|||
|
print_success "$config_name validation passed"
|
|||
|
else
|
|||
|
print_error "$config_name validation failed"
|
|||
|
fi
|
|||
|
echo ""
|
|||
|
fi
|
|||
|
done
|
|||
|
|
|||
|
print_section "Build Information"
|
|||
|
echo "Configuration build metadata:"
|
|||
|
echo ""
|
|||
|
|
|||
|
if [ -f "$dev_config" ]; then
|
|||
|
echo "Development build info:"
|
|||
|
grep -A 5 "^\[build_info\]" "$dev_config" | sed 's/^/ /'
|
|||
|
echo ""
|
|||
|
fi
|
|||
|
|
|||
|
print_section "Usage Examples"
|
|||
|
echo "How to use the configuration system:"
|
|||
|
echo ""
|
|||
|
echo "1. Build configuration for development:"
|
|||
|
echo " ./config/scripts/build-config.sh dev"
|
|||
|
echo ""
|
|||
|
echo "2. Build configuration for production:"
|
|||
|
echo " ./config/scripts/build-config.sh prod config.prod.toml"
|
|||
|
echo ""
|
|||
|
echo "3. Validate configuration:"
|
|||
|
echo " ./config/scripts/manage-config.sh validate dev"
|
|||
|
echo ""
|
|||
|
echo "4. Compare configurations:"
|
|||
|
echo " ./config/scripts/manage-config.sh diff dev prod"
|
|||
|
echo ""
|
|||
|
echo "5. Create new feature:"
|
|||
|
echo " ./config/scripts/manage-config.sh template my_feature"
|
|||
|
echo ""
|
|||
|
echo "6. Show system status:"
|
|||
|
echo " ./config/scripts/manage-config.sh status"
|
|||
|
|
|||
|
print_section "Cleanup"
|
|||
|
echo "Cleaning up demo files..."
|
|||
|
|
|||
|
# Clean up demo files
|
|||
|
rm -f "$dev_config" "$prod_config"
|
|||
|
print_success "Demo files cleaned up"
|
|||
|
|
|||
|
print_header "Demo Complete"
|
|||
|
echo "The new configuration system provides:"
|
|||
|
echo ""
|
|||
|
echo "✓ Environment-specific configurations"
|
|||
|
echo "✓ Feature-based modularity"
|
|||
|
echo "✓ Automatic building and validation"
|
|||
|
echo "✓ Easy management and maintenance"
|
|||
|
echo "✓ Backup and recovery capabilities"
|
|||
|
echo ""
|
|||
|
echo "For more information, see:"
|
|||
|
echo " • config/README.md - Complete documentation"
|
|||
|
echo " • config/scripts/ - Available management scripts"
|
|||
|
echo " • config/features/ - Feature configuration modules"
|
|||
|
echo ""
|
|||
|
print_success "Configuration system is ready to use!"
|
|||
|
}
|
|||
|
|
|||
|
# Check if we're in the right directory
|
|||
|
if [ ! -d "$CONFIG_DIR" ]; then
|
|||
|
print_error "Configuration directory not found: $CONFIG_DIR"
|
|||
|
echo "Please run this script from the project root directory."
|
|||
|
exit 1
|
|||
|
fi
|
|||
|
|
|||
|
# Run the demonstration
|
|||
|
main "$@"
|