Gunnar

mikronova/draupnir

draupnir

The boot / provisioning engine of the nordisk constellation — named for Draupnir, Odin's gold ring that drips eight identical copies of itself every ninth night.

One lean Rust library, one BootSpec, three boot backends: it fires up a runtime instance and drives its power lifecycle, whether that instance is a KVM virtual machine, an OCI container (a redis service, say), or a bare-metal server provisioned out-of-band. Draupnir's own code is the thin unifying seam — each backend delegates to an existing engine (Brokkr's minimal-dependency law: reuse, don't reinvent).


The three backends

use draupnir::{BootSpec, Boot, container::ContainerBoot};

let spec = BootSpec::container("cache", "docker.io/library/redis:7");
let redis = ContainerBoot::new().boot(&spec)?;   // a redis service, fired up

The ring drips eight copies

Draupnir's namesake dripped eight identical rings every ninth night. Here that is a natural extension, not the core: plan_fleet(&spec, 8) fans one BootSpec out into eight identically-payloaded, distinctly-named specs — a fleet of identical machines booted from one ISO (bare-metal fleet provisioning via Redfish). The core stays simple: one library, three boot backends.

Where it sits in the stack

Draupnir is the shared low-level boot lib. Two higher-level tools depend on it directly and call down into it — neither reimplements boot code:

  jera ─────────┐
                ├──▶ draupnir ──▶ tunnr        (KVM VM)
  Skidbladnir ──┘             ├─▶ OCI runtime  (container / redis)
                              └─▶ Redfish BMC  (bare-metal ISO boot)

One home per capability: instance booting lives only in Draupnir; tunnr is the sole KVM boot primitive, reached only through Draupnir's KVM backend.

Honest by construction

The trait surface, the BootSpec/Machine types, spec validation and the fleet fan-out are real and unit-tested. Every unimplemented backend internal is an honest todo!("draupnir: …") — never a fake-green stub. The default build is pure std, zero dependencies; each live backend sits behind a feature.

$ cargo build          # pure-std, green
$ cargo test           # spec + fleet bookkeeping
$ cargo build --features backend-tunnr   # live KVM boot via tunnr

Docs

.nornir/ is the source of the docs: design (the ownership table + extraction plan) · guide (usage) · for-idiots (the beginner walk-through).


Every crate in the constellation is held to Brokkr's Software Criteria — baremetal, minimal-dependency, zero-copy / multi-core / SIMD.

Files

.nornir/
benches/
crates/
docs/
examples/
src/
tests/
.gitignore
Cargo.toml
README.md
brokkr-software-criteria.md
brokkr.toml
rustfmt.toml

Newest commits

3c43cc51431fMerge fix/small-4-2026-10-25 into main: no file addresses our repositories on the old forge (A28 N7-left)2026-10-25
8435a365d095GREEN: the README and a doc link name tunnr's, Skidbladnir's and edda's real homes (A28 N7-left; guard 4/0; docs and a comment only)2026-10-25
d995bc4a6641TEST: no file addresses our repositories on the old forge (A28 N7-left; RED: 3 lines, README links and a doc link)2026-10-25
4e18233fe90eMerge v2/n7-a28-small-2026-10-25: every repository = names this repository's real home, with a guard test (A28 L17)2026-10-25
0bbc60f3267cGREEN: every repository = names this repository's home (A28 L17)2026-10-25