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]>
This commit is contained in:
Abhinav Sinha
2026-06-15 07:52:47 +05:30
parent 2104c5fea6
commit 124e5276d4
94 changed files with 4256 additions and 4217 deletions
+41
View File
@@ -0,0 +1,41 @@
{
"id": "k8s-admin",
"name": "Kubernetes Administrator",
"icon": "🧑‍✈️",
"tagline": "CKA exam — cluster administration",
"color": "#58a6ff",
"colorDim": "rgba(88,166,255,0.12)",
"exam_minutes": 120,
"scenario_ids": [
"rbac-role",
"rbac-clusterrole",
"serviceaccount-pod",
"node-label-selector",
"node-taint-toleration",
"resource-quota-ns",
"limitrange-task",
"etcd-backup-mcq",
"cluster-upgrade-mcq",
"deployment-rollback",
"cronjob-task",
"job-task",
"readiness-probe-task",
"pod-affinity-mcq",
"nodeport-task",
"ingress-task",
"dns-resolution-mcq",
"endpoint-fix-task",
"networkpolicy-egress",
"network-policy",
"storageclass-mcq",
"pvc-dynamic-task",
"emptydir-pod",
"pv-pvc-mount",
"pod-security-context",
"broken-deployment",
"crashloop-fix",
"container-logging-mcq",
"pod-disruption-budget-task",
"priority-class-task"
]
}
+36
View File
@@ -0,0 +1,36 @@
{
"id": "k8s-appdev",
"name": "Kubernetes Developer",
"icon": "🛠️",
"tagline": "CKAD exam — application development",
"color": "#bc8cff",
"colorDim": "rgba(188,140,255,0.12)",
"exam_minutes": 120,
"scenario_ids": [
"pod-basics-mcq",
"kubectl-essentials-mcq",
"namespaces-basics",
"labels-selectors-mcq",
"deploy-nginx",
"scale-deployment",
"rolling-update-task",
"deployment-rollback",
"liveness-probe-task",
"readiness-probe-task",
"configmap-volume",
"env-vars-configmap",
"secrets-basics",
"resource-limits-task",
"cronjob-task",
"job-task",
"emptydir-pod",
"pvc-dynamic-task",
"services-mcq",
"nodeport-task",
"ingress-task",
"rbac-role",
"pod-security-context",
"crashloop-fix",
"container-logging-mcq"
]
}
+41
View File
@@ -0,0 +1,41 @@
{
"id": "k8s-basics",
"name": "Kubernetes Basics",
"icon": "🌱",
"tagline": "Core concepts for beginners",
"color": "#3fb950",
"colorDim": "rgba(63,185,80,0.12)",
"exam_minutes": 60,
"scenario_ids": [
"pod-basics-mcq",
"kubectl-essentials-mcq",
"labels-selectors-mcq",
"init-containers-mcq",
"namespaces-basics",
"deploy-nginx",
"scale-deployment",
"rolling-update-task",
"liveness-probe-task",
"jobs-cronjobs-mcq",
"daemonset-mcq",
"configmap-volume",
"resource-limits-task",
"env-vars-configmap",
"secrets-basics",
"services-mcq",
"multi-container-pod-basics",
"expose-service-basics",
"pod-labeling-basics",
"extract-logs-basics",
"edit-deployment-basics",
"jsonpath-basics",
"dry-run-manifest-basics",
"delete-by-label-basics",
"kubectl-cp-basics",
"exec-command-basics",
"annotate-resource-basics",
"init-container-task-basics",
"restart-policy-mcq",
"kubectl-output-format-mcq"
]
}
+36
View File
@@ -0,0 +1,36 @@
{
"id": "k8s-security",
"name": "Kubernetes Security",
"icon": "🛡",
"tagline": "CKS exam — hardening and threats",
"color": "#f97316",
"colorDim": "rgba(249,115,22,0.12)",
"exam_minutes": 120,
"scenario_ids": [
"cks-network-policy",
"cks-pod-security-context",
"cks-rbac-least-privilege",
"cks-seccomp-profile",
"cks-immutable-secret",
"cks-apparmor-profile",
"cks-automount-token",
"cks-network-policy-metadata",
"cks-rbac-clusterrole",
"cks-psa-namespace",
"cks-mcq-runtime-security",
"cks-mcq-api-server",
"cks-mcq-image-footprint",
"cks-mcq-psp-replacement",
"cks-mcq-kubelet-auth",
"cks-readonly-filesystem",
"cks-drop-capabilities",
"cks-tls-ingress",
"cks-image-pull-secret",
"cks-mcq-sandboxing",
"cks-mcq-audit-policy",
"cks-runtime-class",
"cks-audit-policy",
"cks-egress-namespace",
"cks-non-root-enforce"
]
}