# Exercise 3: Jobs, CronJobs and a DaemonSet (hard)
#
# Run: kubectl apply -n lab -f this-file.yaml
#
# Part A — Job `thumbnail-backfill`:
#   TODO A1: process 20 work items with 4 Pods in parallel using an Indexed Job
#            (completionMode: Indexed, completions 20, parallelism 4); each Pod prints
#            "processing item $JOB_COMPLETION_INDEX" and sleeps 2 s (busybox:1.36)
#   TODO A2: backoffLimit 3, activeDeadlineSeconds 300, ttlSecondsAfterFinished 600
#   TODO A3: restartPolicy that retries a failed container in place
#
# Part B — CronJob `nightly-report`:
#   TODO B1: run at 03:15 every day in Europe/Berlin
#   TODO B2: never run two at once; skip a run if it couldn't start within 10 minutes
#   TODO B3: keep 3 successful and 1 failed job in history
#
# Part C — DaemonSet `node-logger`:
#   TODO C1: one Pod per node (busybox:1.36) printing the node name every 30 s,
#            using the downward API (spec.nodeName → env NODE_NAME)
#   TODO C2: tolerate the control-plane taint so it runs on every node
#   TODO C3: rolling update with maxUnavailable 1; small requests, memory limit 32Mi
#
# CHECKLIST:
# [ ] kubectl get job thumbnail-backfill shows 20/20 completions; logs show indexes 0–19.
# [ ] kubectl create job --from=cronjob/nightly-report manual-1 runs successfully.
# [ ] kubectl get ds node-logger → DESIRED = number of nodes (including control plane).
# [ ] Each node-logger Pod logs its own node name.
apiVersion: batch/v1
kind: Job
metadata:
  name: thumbnail-backfill
spec:
  # TODO A1, A2
  template:
    spec:
      restartPolicy: Never   # TODO A3
      containers:
        - name: worker
          image: busybox:1.36
          command: ["sh", "-c", "echo TODO"]
---
apiVersion: batch/v1
kind: CronJob
metadata:
  name: nightly-report
spec:
  schedule: "* * * * *"   # TODO B1
  # TODO B2, B3
  jobTemplate:
    spec:
      template:
        spec:
          restartPolicy: OnFailure
          containers:
            - name: report
              image: busybox:1.36
              command: ["sh", "-c", "date; echo generating report"]
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: node-logger
spec:
  selector:
    matchLabels:
      app: node-logger
  # TODO C3: updateStrategy
  template:
    metadata:
      labels:
        app: node-logger
    spec:
      # TODO C2: tolerations
      containers:
        - name: logger
          image: busybox:1.36
          command: ["sh", "-c", "while true; do echo \"node: $NODE_NAME\"; sleep 30; done"]
          # TODO C1: env NODE_NAME from fieldRef spec.nodeName
          # TODO C3: resources
