#!/bin/bash # Generate realistic reconciliation drift scenarios for the homelab supervisor. set -e # Configuration BASE_DIR=$(pwd) # Use local directory for testing if /opt is not writable WORLD_DIR="${HOMELAB_WORLD_ROOT:-$BASE_DIR/tmp/homelab/world}" INVENTORY_DIR="$BASE_DIR/hosts" echo "Setting up homelab reconciliation scenarios..." echo "World state: $WORLD_DIR" echo "Inventory: $INVENTORY_DIR" # Cleanup rm -rf "$WORLD_DIR" rm -rf "$INVENTORY_DIR" # Create directories mkdir -p "$INVENTORY_DIR/node1" mkdir -p "$INVENTORY_DIR/node2" mkdir -p "$WORLD_DIR/services" "$WORLD_DIR/nodes" "$WORLD_DIR/deployments" "$WORLD_DIR/incidents" # --- Scenario 1: Nominal --- cat < "$INVENTORY_DIR/node1/services.yaml" services: - name: homeassistant EOF cat < "$WORLD_DIR/services/homeassistant.json" {"name": "homeassistant", "status": "healthy", "node": "node1"} EOF cat < "$WORLD_DIR/nodes/node1.json" {"name": "node1", "status": "online"} EOF # --- Scenario 2: Unhealthy Service --- cat < "$WORLD_DIR/services/homeassistant.json" {"name": "homeassistant", "status": "unhealthy", "node": "node1"} EOF # --- Scenario 3: Missing Service --- cat < "$INVENTORY_DIR/node2/services.yaml" services: - name: webapp EOF # webapp is missing from world/services # --- Scenario 4: Dependency Unavailable (for Missing Service) --- cat < "$WORLD_DIR/services/database.json" {"name": "database", "status": "error", "node": "node2"} EOF # webapp depends on database in supervisor logic # --- Scenario 5: Offline Node --- cat < "$WORLD_DIR/nodes/node2.json" {"name": "node2", "status": "offline"} EOF # --- Scenario 6: Repeated Deployment Failures --- cat < "$WORLD_DIR/deployments/dep-001.json" {"id": "dep-001", "service": "webapp", "status": "failed", "timestamp": $(date +%s)} EOF cat < "$WORLD_DIR/deployments/dep-002.json" {"id": "dep-002", "service": "webapp", "status": "failed", "timestamp": $(( $(date +%s) - 300 ))} EOF cat < "$WORLD_DIR/deployments/dep-003.json" {"id": "dep-003", "service": "webapp", "status": "failed", "timestamp": $(( $(date +%s) - 600 ))} EOF # --- Scenario 7: Unresolved Incident --- cat < "$WORLD_DIR/incidents/inc-99.json" {"id": "inc-99", "description": "High memory usage on node1", "status": "investigating"} EOF echo "Scenarios generated successfully." echo "You can now run: HOMELAB_WORLD_ROOT=$WORLD_DIR python3 scripts/supervisor/supervisor.py"