{
  "id": "emptydir-pod",
  "title": "Shared emptyDir Volume Between Containers",
  "category": "Storage",
  "difficulty": "Easy",
  "type": "task",
  "weight": 5,
  "description": "## Shared emptyDir Volume\n\nAn `emptyDir` volume is created when a Pod is assigned to a node and exists as long as the Pod runs. It is ideal for sharing data between containers in the same pod (e.g., sidecar patterns).\n\n**Your task:**\n\nCreate a Pod named `shared-data` with two containers:\n1. **writer** (`busybox:1.36`) — writes `hello-kube` to `/shared/message.txt` then sleeps\n2. **reader** (`busybox:1.36`) — reads and prints `/shared/message.txt` then sleeps\n\nBoth containers mount an `emptyDir` volume at `/shared`.",
  "hints": [
    {
      "title": "emptyDir shared volume manifest",
      "body": "Define a single volume of type `emptyDir: {}` and mount it in both containers under the same path.",
      "command": "cat <<EOF | kubectl apply -f -\napiVersion: v1\nkind: Pod\nmetadata:\n  name: shared-data\nspec:\n  containers:\n  - name: writer\n    image: busybox:1.36\n    command: [\"sh\",\"-c\",\"echo hello-kube > /shared/message.txt && sleep 3600\"]\n    volumeMounts:\n    - name: shared-vol\n      mountPath: /shared\n  - name: reader\n    image: busybox:1.36\n    command: [\"sh\",\"-c\",\"sleep 5 && cat /shared/message.txt && sleep 3600\"]\n    volumeMounts:\n    - name: shared-vol\n      mountPath: /shared\n  volumes:\n  - name: shared-vol\n    emptyDir: {}\nEOF"
    }
  ],
  "setup_commands": [],
  "validation": {
    "commands": [
      {
        "description": "Pod 'shared-data' exists",
        "command": "kubectl get pod shared-data -o jsonpath='{.metadata.name}'",
        "expected_output": "shared-data",
        "match": "exact"
      },
      {
        "description": "Pod has 2 containers",
        "command": "kubectl get pod shared-data -o jsonpath='{range .spec.containers[*]}{.name}{\"\\n\"}{end}'",
        "expected_output": "writer",
        "match": "contains"
      },
      {
        "description": "Volume type is emptyDir",
        "command": "kubectl get pod shared-data -o jsonpath='{.spec.volumes[0].emptyDir}'",
        "expected_output": "{}",
        "match": "contains"
      },
      {
        "description": "Writer container mounts the shared volume",
        "command": "kubectl get pod shared-data -o jsonpath='{.spec.containers[0].volumeMounts[0].mountPath}'",
        "expected_output": "/shared",
        "match": "exact"
      }
    ]
  },
  "default_namespace": "default",
  "teardown_commands": [
    {
      "command": "kubectl delete pod shared-data --ignore-not-found --grace-period=0 --force"
    }
  ]
}
