#!/bin/bash
# create-cluster-issues.sh
# Creates a realistic set of broken/misconfigured resources on a cluster
# for use in MCP demo scenarios. Run cleanup-cluster-issues.sh to remove them.

set -e

echo "======================================================"
echo " Creating demo cluster issues..."
echo "======================================================"

# -------------------------------------------------------
# Issue 1: Pod with invalid image (ImagePullBackOff)
# -------------------------------------------------------
echo "[1/7] Creating pod with bad image (ImagePullBackOff)..."
kubectl apply -f - <<EOF
apiVersion: v1
kind: Namespace
metadata:
  name: demo-issues
EOF

kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: bad-image-pod
  namespace: demo-issues
  labels:
    issue: image-pull-backoff
spec:
  containers:
  - name: app
    image: nginx:this-tag-does-not-exist-99999
    ports:
    - containerPort: 80
EOF

# -------------------------------------------------------
# Issue 2: Pod with resource limits it cannot satisfy (Pending)
# -------------------------------------------------------
echo "[2/7] Creating pod with impossible resource requests (Pending)..."
kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: resource-hog-pod
  namespace: demo-issues
  labels:
    issue: insufficient-resources
spec:
  containers:
  - name: app
    image: nginx:latest
    resources:
      requests:
        memory: "9999Gi"
        cpu: "9999"
      limits:
        memory: "9999Gi"
        cpu: "9999"
EOF

# -------------------------------------------------------
# Issue 3: Pod with a crashlooping container (CrashLoopBackOff)
# -------------------------------------------------------
echo "[3/7] Creating crashlooping pod (CrashLoopBackOff)..."
kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: crashloop-pod
  namespace: demo-issues
  labels:
    issue: crash-loop-backoff
spec:
  containers:
  - name: app
    image: busybox
    command: ["sh", "-c", "echo 'Starting...'; sleep 2; exit 1"]
  restartPolicy: Always
EOF

# -------------------------------------------------------
# Issue 4: Deployment with 0 available replicas (bad image on all replicas)
# -------------------------------------------------------
echo "[4/7] Creating deployment with bad image across all replicas (0 available)..."
kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: broken-deployment
  namespace: demo-issues
  labels:
    issue: broken-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: broken-app
  template:
    metadata:
      labels:
        app: broken-app
    spec:
      containers:
      - name: app
        image: nginx:version-that-does-not-exist
EOF

# -------------------------------------------------------
# Issue 5: Service with no matching endpoints (selector mismatch)
# -------------------------------------------------------
echo "[5/7] Creating service with no matching pods (no endpoints)..."
kubectl apply -f - <<EOF
apiVersion: v1
kind: Service
metadata:
  name: no-endpoints-service
  namespace: demo-issues
  labels:
    issue: no-endpoints
spec:
  selector:
    app: this-app-does-not-exist
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
EOF

# -------------------------------------------------------
# Issue 6: ConfigMap missing — pod references non-existent configmap
# -------------------------------------------------------
echo "[6/7] Creating pod with missing ConfigMap reference (CreateContainerConfigError)..."
kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: missing-configmap-pod
  namespace: demo-issues
  labels:
    issue: missing-configmap
spec:
  containers:
  - name: app
    image: nginx:latest
    envFrom:
    - configMapRef:
        name: this-configmap-does-not-exist
EOF

# -------------------------------------------------------
# Issue 7: PVC in Pending state (no storage class / no provisioner)
# -------------------------------------------------------
echo "[7/7] Creating PVC that cannot be bound (Pending)..."
kubectl apply -f - <<EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: unbound-pvc
  namespace: demo-issues
  labels:
    issue: unbound-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: this-storage-class-does-not-exist
  resources:
    requests:
      storage: 100Gi
EOF

echo ""
echo "======================================================"
echo " Done! Issues created in namespace: demo-issues"
echo "======================================================"
echo ""
echo " Summary of issues created:"
echo "  1. bad-image-pod            → ImagePullBackOff (invalid image tag)"
echo "  2. resource-hog-pod         → Pending (impossible resource requests)"
echo "  3. crashloop-pod            → CrashLoopBackOff (container exits with code 1)"
echo "  4. broken-deployment           → 0/3 replicas available (bad image on all pods)"
echo "  5. no-endpoints-service     → No endpoints (selector matches no pods)"
echo "  6. missing-configmap-pod    → CreateContainerConfigError (ConfigMap not found)"
echo "  7. unbound-pvc              → Pending (storage class does not exist)"
echo ""
echo " Run the following to verify:"
echo "   kubectl get all -n demo-issues"
echo "   kubectl get pvc -n demo-issues"
echo ""
echo " To clean up all issues:"
echo "   kubectl delete namespace demo-issues"
echo "======================================================"
