{% extends "ui/_layout.html" %} {% block title %}Catalog - withcache{% endblock %} {% block subnav %} {% endblock %} {% block intro %}
The image catalog withcache fetched at process start (best-effort; persisted to ``<data-dir>/catalog.toml`` and re-loaded on restart). Refresh + Set URL + Add oras + Delete actions on the subnav / row forms below.
{% endblock %} {% block content %}
Catalog source
Effective URL
{{ catalog_url }}
Env pin
{% if catalog_env_url %} {{ catalog_env_url }} {% else %} (unset) {% endif %}
{% if catalog_fetched_at %}
Last fetched
{{ catalog_fetched_at }}
{% endif %} {% if catalog_last_error %}
{{ catalog_last_error }}
{% endif %} {% if catalog_last_info %}
{{ catalog_last_info }}
{% endif %} {# Set URL: operator override. Empty submit clears the override and falls back to the shipping default (env pin still wins). #}
{% if catalog_env_url %} Env pin is set; override is refused while the env var is present. Unset WITHCACHE_CATALOG_URL to allow overrides. {% else %} Empty submit clears the override and reverts to the shipping default. {% endif %}
{# Add oras: append a fresh oras:// entry. The manifest walk populates sha256/format/size from the registry so the operator doesn't have to type them. #}
Add HTTPS entry

Add one https:// catalog entry. Operators typically fill name, src, and sha256; other fields are optional. For oras:// entries use the form above instead (the registry walk fills sha256 / format / size automatically).

Catalog entries ({{ catalog_entries|length }})
{% for e in catalog_entries %} {% endfor %} {% if not catalog_entries %} {% endif %}
Name Source Format SHA-256 Downloaded Actions
{{ e.get('name', '') }} {{ e.get('src') or e.get('url') or '' }} {% if e.get('format') %} {{ e.format }} {% else %} - {% endif %} {% if e.get('sha256') %}{{ e.sha256[:12] }}...{% else %}-{% endif %} {% if e.get('active_job_status') %} {{ e.active_job_status }} {% elif e.get('downloaded_at') %} cached {% else %} - {% endif %} {# Download / Redownload: enqueue an explicit fetch of this entry's src into the local cache. The button label switches on ``downloaded_at`` so the operator sees whether the click will fill an empty slot or replace stale bytes. #}
{% if e.get('downloaded_at') %} {% else %} {% endif %}
No catalog entries yet. The startup fetch will populate this list; failures land in the source card above.
{% endblock %}