Creating Labs

Lab Overview

Introduction to creating hands-on labs on POV Demo.

What is a Lab?

Labs package metadata, task instructions, scripts, and an optional VM/cloud-account configuration. Key characteristics:

  • One or more configured VMs, or generic scripts when no VMs are configured
  • Automated task validation via check scripts
  • Step-by-step tasks with assignment instructions, hints, and solve scripts
  • Optional AWS, GCP, and Azure account requests; current provider capacity is UNVERIFIED

lab.yml

Lab metadata, not publishing configuration. For a non-puzzle lab, the CLI requires only non-empty slug and title before bundling.

config.yml

Infrastructure configuration: VMs and optional cloud-account requests.

Tasks

Numbered directories with assignment instructions and automated validation scripts.

Directory Structure

kubernetes-pods-lab/
├── lab.yml                    # Lab metadata
├── config.yml                 # Infrastructure specification
├── lab_scripts/               # Optional: global setup/cleanup scripts
│   ├── setup-ubuntu-1         # Runs once at lab provision
│   └── cleanup-ubuntu-1       # Runs during teardown for AWS-backed labs only
├── 01-exploring-pods/
│   ├── assignment.md          # Task instructions (YAML frontmatter + Markdown)
│   ├── setup-ubuntu-1         # Runs before learner starts task
│   ├── check-ubuntu-1         # Validates learner's work
│   └── solve-ubuntu-1         # Provides the solution
├── 02-creating-deployments/
│   ├── assignment.md
│   ├── setup-ubuntu-1
│   ├── check-ubuntu-1
│   └── solve-ubuntu-1
└── 03-exposing-services/
    ├── assignment.md
    ├── setup-ubuntu-1
    ├── check-ubuntu-1
    └── solve-ubuntu-1
Note: The CLI recognizes any task directory whose first character is a digit and requires an assignment.md inside it. A two-digit prefix such as 01- is a useful ordering convention, not a validator requirement.

Quick Start

  1. 1

    Create the lab directory with lab.yml and config.yml.

  2. 2

    Add numbered task directories, each with assignment.md and script files.

  3. 3

    Validate with pov validate and fix any errors.

  4. 4

    Run pov push to push to the default staging target. Use POV_ENV=production pov push only when you intend to target production.

  5. 5

    Confirm the pushed lab in the intended POV Demo environment. Catalog visibility is a runtime concern, not a lab.yml validator setting.