80 lines
2.4 KiB
Bash
80 lines
2.4 KiB
Bash
#!/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 <<EOF > "$INVENTORY_DIR/node1/services.yaml"
|
|
services:
|
|
- name: homeassistant
|
|
EOF
|
|
|
|
cat <<EOF > "$WORLD_DIR/services/homeassistant.json"
|
|
{"name": "homeassistant", "status": "healthy", "node": "node1"}
|
|
EOF
|
|
|
|
cat <<EOF > "$WORLD_DIR/nodes/node1.json"
|
|
{"name": "node1", "status": "online"}
|
|
EOF
|
|
|
|
# --- Scenario 2: Unhealthy Service ---
|
|
cat <<EOF > "$WORLD_DIR/services/homeassistant.json"
|
|
{"name": "homeassistant", "status": "unhealthy", "node": "node1"}
|
|
EOF
|
|
|
|
# --- Scenario 3: Missing Service ---
|
|
cat <<EOF > "$INVENTORY_DIR/node2/services.yaml"
|
|
services:
|
|
- name: webapp
|
|
EOF
|
|
# webapp is missing from world/services
|
|
|
|
# --- Scenario 4: Dependency Unavailable (for Missing Service) ---
|
|
cat <<EOF > "$WORLD_DIR/services/database.json"
|
|
{"name": "database", "status": "error", "node": "node2"}
|
|
EOF
|
|
# webapp depends on database in supervisor logic
|
|
|
|
# --- Scenario 5: Offline Node ---
|
|
cat <<EOF > "$WORLD_DIR/nodes/node2.json"
|
|
{"name": "node2", "status": "offline"}
|
|
EOF
|
|
|
|
# --- Scenario 6: Repeated Deployment Failures ---
|
|
cat <<EOF > "$WORLD_DIR/deployments/dep-001.json"
|
|
{"id": "dep-001", "service": "webapp", "status": "failed", "timestamp": $(date +%s)}
|
|
EOF
|
|
cat <<EOF > "$WORLD_DIR/deployments/dep-002.json"
|
|
{"id": "dep-002", "service": "webapp", "status": "failed", "timestamp": $(( $(date +%s) - 300 ))}
|
|
EOF
|
|
cat <<EOF > "$WORLD_DIR/deployments/dep-003.json"
|
|
{"id": "dep-003", "service": "webapp", "status": "failed", "timestamp": $(( $(date +%s) - 600 ))}
|
|
EOF
|
|
|
|
# --- Scenario 7: Unresolved Incident ---
|
|
cat <<EOF > "$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"
|