{% extends "ui/_layout.html" %} {% block title %}Exports - nbdmux{% endblock %} {% block subnav %} {% endblock %} {% block intro %} {# One-sentence context + operator-actionable hints for the two empty-state axes (withcache unconfigured, catalog empty / unreachable). Keeping these OUT of the subnav so the strip holds jump links + form only, matching bty. #}
Each row is an nbd-server export the multiplexer serves over TCP. Pre-warmed exports point at an existing file on disk; catalog-picker exports read from withcache's cache and decompress into <images-dir>/<name>.img before landing at ready. Only ready exports are visible to nbd-server on the wire.
{% if not withcache_url %}
NBDMUX_WITHCACHE_URL is not set; the create-export picker needs a withcache upstream to populate its options.
{% elif catalog_error %}
withcache catalog unreachable at {{ withcache_url }}.
{% elif not catalog_entries %}
No catalog entries yet. Add + Download on {{ withcache_url|trim('/') }}/ui/catalog.
{% endif %} {% endblock %} {% block content %}
Exports
{% for e in exports %} {% endfor %} {% if not exports %} {% endif %}
Name Status Progress File Source Format Action
{{ e.name }} {# Status pill colours match the wire states the JSON /exports endpoint documents: green for ready (nbd-server picks up), red for failed (operator retries), blue for the three in-flight intermediates. #} {% if e.status == 'ready' %} ready {% elif e.status == 'failed' %} failed {% else %} {{ e.status }} {% endif %} {% if e.progress is not none %}
{{ e.progress }}% {% elif e.status == 'ready' %} - {% else %} pending {% endif %}
{{ e.file }} {% if e.src_url %} {{ e.src_url }} {% else %} pre-warmed {% endif %} {% if e.format %} {{ e.format }} {% else %} - {% endif %} {# Delete: form-encoded POST so a simple button works without JavaScript. Warm-created rows also unlink the on-disk .img in the handler; pre-warmed rows leave their file alone. #}
No exports registered yet. Pick a downloaded catalog entry in the picker above, or POST to /exports from a script (see nbdmux.client).
{% endblock %}