#!/bin/bash # deployment-env-integration.sh - Integrate deployment manager with existing env backup system # Author: Shell Repository # Description: Bridge between docker-deployment-manager and backup-env-files system set -e # Colors for output GREEN='\033[0;32m' YELLOW='\033[0;33m' RED='\033[0;31m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Configuration SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" DEPLOYMENT_MANAGER="$SCRIPT_DIR/docker-deployment-manager.sh" ENV_BACKUP_SCRIPT="$SCRIPT_DIR/backup-env-files.sh" STACK_HELPER="$SCRIPT_DIR/stack-assignment-helper.sh" echo -e "${BLUE}=== Docker Deployment & Environment Backup Integration ===${NC}" echo "" # Check if required scripts exist check_dependencies() { local missing=() [ ! -f "$DEPLOYMENT_MANAGER" ] && missing+=("docker-deployment-manager.sh") [ ! -f "$ENV_BACKUP_SCRIPT" ] && missing+=("backup-env-files.sh") [ ! -f "$STACK_HELPER" ] && missing+=("stack-assignment-helper.sh") if [ ${#missing[@]} -gt 0 ]; then echo -e "${RED}Missing required scripts:${NC}" printf ' - %s\n' "${missing[@]}" exit 1 fi } # Setup integration setup_integration() { echo -e "${YELLOW}Setting up deployment and backup integration...${NC}" # Initialize deployment configuration if [ ! -d "$HOME/.docker-deployment" ]; then echo "1. Initializing deployment configuration..." "$DEPLOYMENT_MANAGER" init else echo -e "${GREEN}✓ Deployment configuration already exists${NC}" fi # Initialize environment backup if not already done if [ ! -d "$HOME/.env-backup" ]; then echo "" echo "2. Environment backup system needs initialization." echo " Run: $ENV_BACKUP_SCRIPT --init" echo " This will set up secure backup of your .env files to Gitea." else echo -e "${GREEN}✓ Environment backup already configured${NC}" fi # Analyze current stacks echo "" echo "3. Analyzing current Docker stacks..." "$STACK_HELPER" analyze echo "" echo -e "${GREEN}✓ Integration setup completed!${NC}" } # Show workflow suggestions show_workflow() { echo -e "${BLUE}=== Recommended Workflow ===${NC}" echo "" echo -e "${YELLOW}📋 Daily Operations:${NC}" echo "1. Make changes to Docker stacks in your monorepo" echo "2. Test locally before deployment" echo "3. Backup environment files: $ENV_BACKUP_SCRIPT" echo "4. Deploy to specific server: $DEPLOYMENT_MANAGER deploy " echo "5. Verify deployment: $DEPLOYMENT_MANAGER status " echo "" echo -e "${YELLOW}🔄 Bulk Operations:${NC}" echo "1. Deploy all stacks: $DEPLOYMENT_MANAGER deploy-all --dry-run" echo "2. Check what goes where: $DEPLOYMENT_MANAGER map" echo "3. Sync just environments: $DEPLOYMENT_MANAGER sync-env " echo "" echo -e "${YELLOW}📊 Analysis & Planning:${NC}" echo "1. Analyze stack assignments: $STACK_HELPER analyze" echo "2. Check resource usage: $STACK_HELPER resources" echo "3. Get optimization tips: $STACK_HELPER optimize" echo "4. Generate new configs: $STACK_HELPER generate" echo "" echo -e "${YELLOW}🔧 Automation Integration:${NC}" echo "These commands can be integrated into your existing crontab system:" echo "" echo "# Daily environment backup (already in crontab)" echo "0 3 * * * $ENV_BACKUP_SCRIPT" echo "" echo "# Weekly deployment validation" echo "0 4 * * 0 $DEPLOYMENT_MANAGER deploy-all --dry-run" echo "" echo "# Monthly stack analysis" echo "0 5 1 * * $STACK_HELPER all > /home/acedanger/shell/logs/stack-analysis.log" } # Show current status show_status() { echo -e "${BLUE}=== Current System Status ===${NC}" echo "" # Check deployment config if [ -d "$HOME/.docker-deployment" ]; then echo -e "${GREEN}✅ Deployment configuration: Ready${NC}" local servers=$(find . -maxdepth 1 -type f | wc -l) echo " Configured servers: $servers" else echo -e "${RED}❌ Deployment configuration: Not initialized${NC}" fi # Check environment backup if [ -d "$HOME/.env-backup" ]; then echo -e "${GREEN}✅ Environment backup: Ready${NC}" local last_backup=$(stat -c %y "$HOME/.env-backup/.git/HEAD" 2>/dev/null | cut -d' ' -f1 || echo "Never") echo " Last backup: $last_backup" else echo -e "${YELLOW}⚠️ Environment backup: Not initialized${NC}" fi # Check Docker stacks if [ -d "$HOME/docker" ]; then local stack_count=$(find "$HOME/docker" -maxdepth 1 -type d | wc -l) stack_count=$((stack_count - 1)) # Exclude the docker directory itself echo -e "${GREEN}✅ Docker stacks: $stack_count found${NC}" else echo -e "${RED}❌ Docker directory: Not found${NC}" fi # Check crontab integration if crontab -l 2>/dev/null | grep -q "backup-env-files.sh"; then echo -e "${GREEN}✅ Crontab integration: Environment backup scheduled${NC}" else echo -e "${YELLOW}⚠️ Crontab integration: No env backup scheduled${NC}" fi } # Test the integration test_integration() { echo -e "${BLUE}=== Testing Integration ===${NC}" echo "" echo "1. Testing deployment manager..." if "$DEPLOYMENT_MANAGER" map >/dev/null 2>&1; then echo -e "${GREEN}✅ Deployment manager: Working${NC}" else echo -e "${RED}❌ Deployment manager: Error${NC}" fi echo "2. Testing environment backup..." if "$ENV_BACKUP_SCRIPT" --list >/dev/null 2>&1; then echo -e "${GREEN}✅ Environment backup: Working${NC}" else echo -e "${YELLOW}⚠️ Environment backup: Needs initialization${NC}" fi echo "3. Testing stack analysis..." if "$STACK_HELPER" analyze >/dev/null 2>&1; then echo -e "${GREEN}✅ Stack analysis: Working${NC}" else echo -e "${RED}❌ Stack analysis: Error${NC}" fi echo "" echo -e "${BLUE}Integration test completed.${NC}" } # Main function main() { check_dependencies case "${1:-status}" in setup|--setup|-s) setup_integration ;; workflow|--workflow|-w) show_workflow ;; status|--status) show_status ;; test|--test|-t) test_integration ;; all|--all|-a) show_status echo "" setup_integration echo "" show_workflow ;; help|--help|-h) echo "Usage: $0 [COMMAND]" echo "" echo "Commands:" echo " setup Initialize deployment and backup integration" echo " workflow Show recommended workflow" echo " status Show current system status (default)" echo " test Test integration components" echo " all Run status, setup, and show workflow" echo " help Show this help message" ;; *) echo -e "${RED}Unknown command: $1${NC}" echo "Use '$0 help' for usage information" exit 1 ;; esac } # Run main function main "$@"