Skip to main content
IT BIBLESign in

Team labs

Upload your own labs

Write a lab for your team, upload it, and see who finishes it.

Teams on the Team plan can upload their own labs to IT Bible Labs. A team lab is private: only people on your team can see and run it. It earns no badge or points, and it never appears in the public catalog.

Who can do what

Owner and admins Members
Upload a lab, retire a lab or bring it back Yes No
See and run the team's labs Yes Yes

Open Team labs from your account menu on the Labs site. It works only while the team's plan is active. If the plan ends, the team's labs cannot be run or added to until it is active again, and anyone in the middle of a team lab is stopped.

A team can have up to 25 labs. A lab file can be up to 256 KB.

Uploading

  1. Write the lab as a JSON file (see below).
  2. On Team labs, choose the file or paste its text, then choose Upload lab.
  3. If something is wrong, the page lists each problem in plain words. Nothing is added until the lab is valid.

A lab that only uses simulated devices is ready to run as soon as it is uploaded. A lab that uses machines in the cluster waits for an administrator to approve it first, and the page tells you when it was approved or turned down, with the reviewer's reason.

Changing a lab

A version is never edited. To change a lab, raise its version (for example from 1.0.0 to 1.1.0) and upload it again. Uploading the same version with different content is refused, so earlier attempts always mean what they meant when they were made. Uploading the same file again does nothing.

To take a version out of use, choose Retire. People can no longer start it, and earlier attempts are untouched. Bring back makes it available again.

The lab file

A lab file is a JSON object. These fields are needed:

Field What it is
schemaVersion Always 1.
id The lab's name in lowercase letters, numbers and dashes, up to 64 characters. Your team's number is added in front, so it cannot clash with another team's lab.
version Three numbers, such as 1.0.0.
title Up to 120 characters.
description Up to 400 characters.
track One of debian, powershell, cmd, aruba, cisco, homelab, m365, gcp, mikrotik, helpdesk, security or networking.
difficulty beginner, intermediate or advanced.
estimatedMinutes A whole number from 1 to 240.
access { "tier": "subscriber" }. Team labs are always for people on the team.
session maxMinutes (1 to 240) and idleMinutes (1 to 60).
nodes The devices in the lab.
steps The tasks, each with instructions and checks.

You do not write a rewards section. If you include one, it is ignored.

Nodes

A node is a device the learner works on. A node with "type": "simulator" runs in the browser and needs an engine, such as cisco-ios, routeros, linux-shell, cmd, m365-powershell, ad-powershell, gcloud-cli, helpdesk or security-triage. Add "terminal": true for a node the learner types into.

Steps and checks

Each step has an id, a title, instructions (Markdown, up to 4,000 characters), optional hints, and at least one check. A check says what must be true before the step is done. A check on a simulator node uses "type": "state" and lists the expected settings. The failure message is shown when the check does not pass.

A complete example

This lab asks the learner to name a VLAN on a simulated switch.

{
  "schemaVersion": 1,
  "id": "name-a-vlan",
  "version": "1.0.0",
  "title": "Name a VLAN",
  "description": "Create VLAN 10 on a switch and call it Sales.",
  "track": "cisco",
  "difficulty": "beginner",
  "estimatedMinutes": 5,
  "access": { "tier": "subscriber" },
  "session": { "maxMinutes": 30, "idleMinutes": 10 },
  "nodes": [
    { "id": "switch", "type": "simulator", "engine": "cisco-ios", "profile": "cisco-2960", "terminal": true }
  ],
  "steps": [
    {
      "id": "create-the-vlan",
      "title": "Create the VLAN",
      "instructions": "Create VLAN 10 named `Sales`.",
      "hints": ["`vlan 10` enters VLAN configuration, where `name` sets its name."],
      "checks": [
        {
          "type": "state",
          "node": "switch",
          "expect": { "vlans": { "10": { "name": "Sales" } } },
          "failureMessage": "VLAN 10 should be named Sales."
        }
      ]
    }
  ]
}

Labs that use machines in the cluster

A node with "type": "container" is a real Linux machine. It needs an image pinned by digest (the part after @sha256:), and resources for CPU and memory.

Team labs can only use images from a short list that the site's administrators keep. Today that is the IT Bible lab images (registry.itbible.org/labs/...) and docker.io/nicolaka/netshoot. An upload that uses any other image is refused, and the message names the image and the list. If you need another one, ask an administrator to look at it and add it.

A team lab can have up to 6 machines in the cluster, and each may ask for at most 500m of CPU and 512Mi of memory. Virtual machines are not available. A lab can run for at most 4 hours (maxMinutes is 240 at the most).

An administrator also reads the images, start commands and setup commands before approving such a lab. Machines in the cluster start with all network traffic denied and a limit on what they can use. Prefer the simulator where it can teach the same thing, because it runs at once and needs no review.

Labs for two people

A networking lab can be written for two teammates, each on their own router. See Labs for two people.

Seeing who finishes a lab

When a member finishes a team lab, your team's webhooks hear about it with a member.lab_completed event. lab.private is true and points is 0. See Events and payloads, and set up a webhook to receive it.