Creating Labs

Creating Tasks

Learn how to create task directories, write assignment instructions, and configure tabs for POV Demo labs.

Task Directory Structure

Each task is a numbered directory inside the lab root. The directory name determines its position in the lab sequence.

01-exploring-pods/
├── assignment.md        # Task instructions with YAML frontmatter
├── setup-ubuntu-1       # Runs before learner starts the task
├── check-ubuntu-1       # Validates learner's work (exit 0 = pass)
└── solve-ubuntu-1       # Provides the solution
  • Use two-digit numeric prefix: 01-, 02-, 03- (not 1-, 2-)
  • The name after the prefix is descriptive but not shown to learners — only the title in frontmatter is displayed
  • All script files are named {operation}-{vm-name} (e.g. check-ubuntu-1, setup-nomad-server-1)

assignment.md Format

The assignment.md file has two parts: a YAML frontmatter block (between --- delimiters) and the task content in Markdown.

---
slug: "explore-pods"
id: "explore-pods"
type: "challenge"
title: "Explore Running Pods"
teaser: "Use kubectl to inspect pods in a running cluster."
notes:
  - type: text
    contents: |
      Kubernetes Pods are the smallest deployable units. In this task,
      you will explore pods running in your cluster.
tabs:
  - title: "Terminal"
    type: terminal
    hostname: ubuntu-1
  - title: "Kubernetes Dashboard"
    type: service
    hostname: ubuntu-1
    port: 8001
difficulty: "basic"
skip: false
---

List all pods in the default namespace:

```bash
kubectl get pods
```

You should see the pods created by the lab setup script. Note the STATUS column — all pods should show `Running`.

Describe one of the pods to see its details:

```bash
kubectl describe pod <pod-name>
```
Important: Do NOT include an H1 heading (# Title) at the top of the Markdown content. The task title comes from the title field in the frontmatter and is rendered automatically.

Frontmatter Fields

FieldRequiredDescription
slugYesUnique identifier for this task (slug-style).
idYesSame as slug.
typeYesAlways "challenge".
titleYesDisplayed task title.
teaserYesOne-line description shown before learner starts.
notesNoPre-task context blocks. Each has type ("text") and contents (Markdown).
tabsYesUI tabs available during the task. At least one terminal tab required.
difficultyNobasic, intermediate, or advanced.
skipNoSet to false to make the task mandatory (learner cannot skip). Omit to allow skipping.

Tab Types

TypeRequired FieldsDescription
terminalhostnameOpens a terminal connected to the specified VM.
servicehostname, portOpens a web service running on the VM at the given port.
codehostname, pathOpens a file editor for the given path on the VM.
aws_credentialsShows temporary AWS credentials and opens the AWS Console for the lab session.
gcp_credentialsShows temporary GCP credentials and opens the GCP Console for the lab session.
azure_credentialsShows temporary Azure credentials and opens the Azure Portal for the lab session.
# Terminal tab
- title: "Server Terminal"
  type: terminal
  hostname: ubuntu-1

# Service tab
- title: "Dashboard"
  type: service
  hostname: ubuntu-1
  port: 8080

# Code editor tab
- title: "Config File"
  type: code
  hostname: ubuntu-1
  path: /etc/myapp/config.yaml

# AWS credentials tab
- title: "AWS Console"
  type: aws_credentials

# GCP credentials tab
- title: "GCP Console"
  type: gcp_credentials

# Azure credentials tab
- title: "Azure Portal"
  type: azure_credentials
Note: Always reference the tab title explicitly in task instructions (e.g., “Click on the Terminal tab”). Learners may not have used the platform before and benefit from explicit navigation guidance.

4–5 Steps Rule

Each task should have 4–5 steps maximum. More than 5 steps creates cognitive overload and increases the chance that learners get stuck or give up.

Avoid

One task with 8 steps: “Complete Kubernetes Setup”

  • Install kubectl
  • Configure kubeconfig
  • Create a namespace
  • Deploy an application
  • Expose a service
  • Verify the deployment
  • Scale the deployment
  • Check logs

Correct

Split into three focused tasks:

Task 1 (3 steps)

  • Install kubectl
  • Configure kubeconfig
  • Verify connectivity

Task 2 (3 steps)

  • Create a namespace
  • Deploy an application
  • Verify the deployment

Task 3 (3 steps)

  • Expose a service
  • Scale the deployment
  • Check logs