ubuntu-cloud-initlisted
Install: claude install-skill air-gapped/skills
# ubuntu-cloud-init
cloud-init runs early in boot, reads configuration from a **datasource**, and applies
it through **modules** across four boot stages. This skill is authoring-led (produce
correct cloud-config from a description) with a strong validation/debug path, aimed
at **on-prem / air-gapped Ubuntu Server LTS** using the **NoCloud** datasource.
Mapping: 24.04 LTS ≈ cloud-init 24.x; 26.04 LTS ≈ 26.1.
## Authoring workflow
1. **Identify the goal & datasource.** On-prem/air-gapped → **NoCloud** (seed dir,
`cidata` ISO/USB, HTTP seed, or SMBIOS serial). Pin
`datasource_list: [NoCloud]` to stop cloud-init probing cloud metadata services
and timing out.
2. **Choose the user-data format** — almost always `#cloud-config`. Use MIME multipart
only to combine cloud-config with scripts. (Formats table below.)
3. **Write the `#cloud-config`** using the modules needed (see Quick reference).
4. **Validate:** `cloud-init schema -c user-data --annotate`.
5. **Seed it** (NoCloud) and set a unique `instance-id` in `meta-data`.
6. **Test on a throwaway boot**, then `cloud-init clean --logs` to re-run as if
first boot.
## user-data formats
First line determines the format:
| Header (line 1) | Format |
|---|---|
| `#cloud-config` | YAML config processed by modules (the usual choice). |
| `#!/bin/sh` (shebang) | A script, run once per instance in the Final stage. |
| `#cloud-boothook` | Runs very early, **every boot** (guard with `cloud-init-per`). |
| `#include` | Lis