Files
rootnode-academy/scenarios/data/init-container-task-basics.json
T
Abhinav Sinha 124e5276d4 refactor(scenarios): split monolithic configuration into individual files
- Split `scenarios/scenarios.json` into individual JSON files under `scenarios/data/` named `<scenario-id>.json`
- Split `scenarios/bundles.json` into individual JSON files under `scenarios/bundles/` named `<bundle-id>.json`
- Updated `backend/server.js` to dynamically load scenario and bundle files from their respective directories
- Updated documentation in `scenarios/SCHEMA.md` and `README.md` to reflect the new repository layout and contributor workflow

Signed-off-by: Abhinav Sinha <[email protected]>
2026-06-15 07:52:47 +05:30

46 lines
2.6 KiB
JSON

{
"id": "init-container-task-basics",
"title": "Pod with Init Container",
"category": "Core Concepts",
"difficulty": "Medium",
"type": "task",
"weight": 5,
"description": "## Pod with Init Container\n\nInit containers run **before** the main application containers start. Each init container must complete successfully before the next one begins, and all must finish before the main containers are started. They are ideal for setup tasks like seeding config files or waiting for a dependency.\n\n**Your task:**\n\nCreate a Pod named `init-demo` with:\n- An **init container** named `setup` using `busybox:1.36` that writes `ready` into `/shared/status.txt`\n- A **main container** named `app` using `busybox:1.36` with command `sleep 3600`\n- Both containers mount an `emptyDir` volume at `/shared`\n\n```bash\n# Verify the init container wrote the file:\nkubectl exec init-demo -- cat /shared/status.txt\n```",
"hints": [
{
"title": "Pod manifest with initContainers",
"body": "Define `spec.initContainers[]` above `spec.containers[]`. Both containers share the emptyDir volume mounted at /shared.",
"command": "cat <<EOF | kubectl apply -f -\napiVersion: v1\nkind: Pod\nmetadata:\n name: init-demo\nspec:\n initContainers:\n - name: setup\n image: busybox:1.36\n command: [\"sh\", \"-c\", \"echo ready > /shared/status.txt\"]\n volumeMounts:\n - name: shared-vol\n mountPath: /shared\n containers:\n - name: app\n image: busybox:1.36\n command: [\"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 'init-demo' is Running",
"command": "kubectl get pod init-demo -o jsonpath='{.status.phase}'",
"expected_output": "Running",
"match": "exact"
},
{
"description": "Init container 'setup' completed with exit code 0",
"command": "kubectl get pod init-demo -o jsonpath='{.status.initContainerStatuses[0].state.terminated.exitCode}'",
"expected_output": "0",
"match": "exact"
},
{
"description": "File /shared/status.txt contains 'ready'",
"command": "kubectl exec init-demo -- cat /shared/status.txt 2>/dev/null",
"expected_output": "ready",
"match": "contains"
}
]
},
"default_namespace": "default",
"teardown_commands": [
{
"command": "kubectl delete pod init-demo --ignore-not-found --grace-period=0 --force"
}
]
}