AI-Native DevOps

Chapter by Chapter

Where each chapter starts in the repository and the one command that confirms you finished it, plus the three things the labs need from you.

The repository is cumulative: each chapter starts from the state the previous one ended in, and the chapter's own validation command is what tells you the state is real.

Prerequisites arrive in three tiers, and no tier is needed before the chapter that uses it. Chapters 1, 2, 11 and 12 need only Python 3.11 or newer, Bash and Git; Chapters 3 and 4 add a container runtime and a repository of your own; Chapters 6 to 10 and 13 add a disposable cluster, for which a local kind cluster is enough.

ChapterStart fromConfirm with
1An empty workspace/ you createThe chapter's own success and failure runs
2reference-app/src, reference-app/testscd reference-app && python3 -m unittest discover -s tests
3The pinned release treeThe chapter's docker build and label assertions
4make delivery-startactionlint .github/workflows/*.yml
5The pinned release treeterraform validate
Interludelabs/cluster/, scripts/lab-environment/The interlude's own cluster and teardown checks
6The pinned release treekubectl kustomize deployment/kubernetes/base
7make gitops-startkubectl kustomize deployment/gitops/overlays/staging
8make observability-startmake observability-validate
9make security-start./scripts/validate-offline.sh, labs/security/verify-security-ruleset.sh
10make incident-start, then make capacity-startmake incident-validate, make capacity-validate
11The pinned release treemake assistant-validate
12The pinned release treecd operations-agent && python3 -m unittest discover -s tests
13make capstone-startmake capstone-validate

Where the table says ā€œthe pinned release treeā€, that subject has no handoff tag cut yet, so git switch --detach v1.0.0 is the binding starting state. The paired make <subject>-complete puts you on the finished state, and the difference between the two is the work.

Three things the labs need from you

A chapter that appears not to work from Chapter 6 onward is usually one of these left unset:

  • a disposable cluster in your kubectl context;
  • a registry the cluster can pull from, with the image digest set in deployment/kubernetes/base/kustomization.yaml;
  • a Git source Argo CD can reach and you can push to, set in deployment/gitops/argocd/.

The published digest is an all-zero placeholder that cannot pull, which is deliberate: an unreplaced value fails at admission rather than deploying something you never reviewed.

The full guide, including the four rows that carry a condition the table cannot hold, is in the Downloads.

Errata, companion releases, and new notes on verifying AI-generated DevOps work.

Subscribe by email

Opens a pre-filled email to info@tafohpublishing.com. Send it and we will add you to the list. No spam, unsubscribe anytime.