Gunnar

mikronova/draupnir

.nornir/assets/nocloud-seed.svg

<svg xmlns="http://www.w3.org/2000/svg" width="760" height="320" viewBox="0 0 760 320" font-family="ui-sans-serif,system-ui,sans-serif" font-size="12">
  <style>
    .box{fill:#0f1720;stroke:#2b3948;stroke-width:1.5;rx:8}
    .lbl{fill:#cfe3f5}.dim{fill:#7fa0b8}.acc{fill:#6fd3f5}
    .eng{fill:#12202b;stroke:#3a6d86}
    .pure{fill:#101d16;stroke:#3a865a}
    .arr{stroke:#6fd3f5;stroke-width:1.6;fill:none;marker-end:url(#a)}
    .t{fill:#e6f2fb}.mono{font-family:ui-monospace,monospace;fill:#a9c7dd;font-size:11px}
  </style>
  <defs><marker id="a" markerWidth="9" markerHeight="9" refX="7" refY="3.2" orient="auto">
    <path d="M0,0 L8,3.2 L0,6.4 Z" fill="#6fd3f5"/></marker></defs>
  <rect width="760" height="320" fill="#0a1017"/>
  <text x="16" y="26" class="t" font-size="14" font-weight="700">draupnir · NoCloud cloud-init seed  <tspan class="dim" font-weight="400">(one owned builder; two outputs)</tspan></text>

  <!-- input -->
  <rect class="box" x="16" y="60" width="150" height="76" rx="8"/>
  <text x="30" y="80" class="acc" font-weight="700">CloudInit</text>
  <text x="30" y="98" class="mono">user_data</text>
  <text x="30" y="114" class="mono">meta_data?</text>
  <text x="30" y="130" class="mono">network_config?</text>

  <!-- pure file set -->
  <rect class="box pure" x="216" y="60" width="180" height="76" rx="8"/>
  <text x="230" y="80" class="acc" font-weight="700">seed_files()</text>
  <text x="230" y="98" class="mono">user-data</text>
  <text x="230" y="114" class="mono">meta-data (default'd)</text>
  <text x="230" y="130" class="mono">network-config?</text>
  <text x="230" y="150" class="dim">pure std · zero deps</text>

  <path class="arr" d="M166,98 L214,98"/>

  <!-- output 1: seed dir -->
  <rect class="box pure" x="470" y="34" width="180" height="60" rx="8"/>
  <text x="484" y="54" class="acc" font-weight="700">write_seed_dir()</text>
  <text x="484" y="72" class="mono">dir/{user,meta,net}-data</text>
  <text x="484" y="88" class="dim">pure std · always-works</text>

  <!-- output 2: seed image -->
  <rect class="box eng" x="470" y="106" width="180" height="66" rx="8"/>
  <text x="484" y="126" class="acc" font-weight="700">build_seed_image()</text>
  <text x="484" y="144" class="mono">vfat, label=cidata</text>
  <text x="484" y="160" class="dim">fatfs (feature seed) · no mkisofs</text>

  <path class="arr" d="M396,90 C430,90 440,64 468,64"/>
  <path class="arr" d="M396,106 C430,106 440,134 468,138"/>

  <!-- consumer -->
  <rect class="box" x="470" y="200" width="270" height="56" rx="8"/>
  <text x="484" y="222" class="lbl">KVM backend → tunnr</text>
  <text x="484" y="240" class="mono">-drive file=seed,format=raw,if=virtio,readonly=on</text>
  <path class="arr" d="M560,172 L560,198"/>
  <text x="60" y="220" class="dim">A container init that reads a NoCloud</text>
  <text x="60" y="238" class="dim">directory can attach write_seed_dir()</text>
  <path class="arr" d="M300,200 C360,180 430,120 468,84"/>

  <text x="16" y="290" class="dim">ported from Skidbladnir/src/machine.rs · draupnir now OWNS the seed (single source) · guest cloud-init finds it by the `cidata` label</text>
  <text x="16" y="308" class="dim">the file-set + seed-dir are pure std (any boot path can attach them); only the vfat image costs a dependency (fatfs, feature `seed`)</text>
</svg>