"""CKA lessons: guided labs, one per curriculum objective, on a cluster of your own and without a clock. A lesson explains, then walks you through steps that you do on its host; each step has a check, a hint and the commands that do it. It ends by sending you to the objective's timed drill. Lessons write nothing to the history or the scores - only a "lesson done" mark on the objective. ./ksim lesson the lessons of this track, and which you have done ./ksim lesson 1.1 start the lesson of objective 1.1 (id or key) ./ksim lesson STOR a domain's lessons not done yet, back to back; ./ksim lesson next moves on ./ksim lesson check check the step you are on; the next one follows ./ksim lesson audit [OBJ..] prove lessons: every step fails before its commands and passes after A lesson's host is named after its id - lesson 9101 runs on `cka9101` - which never clashes with a task's. Its files go under {WS}/lesson-/. A step's `show` is how you would do it in the exam: cmd() for what you type as it stands, hand() for what you do by hand - `vim` a generated skeleton or a manifest pasted from the docs, `kubectl edit`, `ssh NODE` and `sudo -i`, a value you read and `echo` - each with a script that does the same unattended. The audit runs the commands as `candidate` on the host and, for each hand() part, its script; `./ksim lesson lint` keeps scripts (sed, awk, yq, heredocs, loops, JSON patches) out of what you type. In a script, a command on another node is `ssh NODE sudo bash <<'EOF' ... EOF` or `ssh -n NODE 'COMMAND'`: without -n, ssh would read the rest of the script as its input. One file per domain, as with the task banks. Besides the curriculum's competencies, the lessons cover what a full CKA course teaches under each of them (2026-10-19: the topics of KubeDojo's CKA course, written here from scratch): projected volumes, eviction thresholds, debug containers, kube-proxy's rules, encryption at rest, in-place resize, PodDisruptionBudgets, QoS classes, ServiceAccount tokens, a real kubeadm upgrade, EndpointSlices. """ from cka import lessons_arch, lessons_net, lessons_storage, lessons_tshoot, lessons_work LESSONS = (lessons_storage.LESSONS + lessons_tshoot.LESSONS + lessons_work.LESSONS + lessons_arch.LESSONS + lessons_net.LESSONS)