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-(not1-,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
| Field | Required | Description |
|---|---|---|
slug | Yes | Unique identifier for this task (slug-style). |
id | Yes | Same as slug. |
type | Yes | Always "challenge". |
title | Yes | Displayed task title. |
teaser | Yes | One-line description shown before learner starts. |
notes | No | Pre-task context blocks. Each has type ("text") and contents (Markdown). |
tabs | Yes | UI tabs available during the task. At least one terminal tab required. |
difficulty | No | basic, intermediate, or advanced. |
skip | No | Set to false to make the task mandatory (learner cannot skip). Omit to allow skipping. |
Tab Types
| Type | Required Fields | Description |
|---|---|---|
terminal | hostname | Opens a terminal connected to the specified VM. |
service | hostname, port | Opens a web service running on the VM at the given port. |
code | hostname, path | Opens a file editor for the given path on the VM. |
aws_credentials | — | Shows temporary AWS credentials and opens the AWS Console for the lab session. |
gcp_credentials | — | Shows temporary GCP credentials and opens the GCP Console for the lab session. |
azure_credentials | — | Shows 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_credentialsNote: 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
