{% extends "admin/_layout.html" %} {% from "_macros.html" import icon %} {% set section = "updates" %} {% block title %}Updates - {{ brand.name }}{% endblock %} {% block heading %}Updates{% endblock %} {% block admin_content %}
This host follows the
{{ "stable" if state.channel == "stable" else "edge" }}
channel{% if state.channel == "stable" %} — the newest release tag{% else %} —
the tip of {{ state.branch }}, which is whatever was pushed most
recently and may be half finished{% endif %}.
Checking reaches the remote; opening this page does not.
{{ state.head.short }} {{ state.head.subject }}
{% if state.dirty %}uncommitted changes{% endif %}
{{ state.checkout }}This was not installed from a git checkout — a container image, or a wheel — so there is nothing here to compare or update. Pull a new image instead.
{% else %} {% endif %}
Nothing on {{ state.branch }} has been tagged as a release yet,
so the stable channel has nothing to offer. Switch this host to
edge in lembas.env to follow the branch instead.
Nothing known about the remote yet. Check it above.
{% elif state.up_to_date %}{{ state.available.label }} is what is running.
{% else %}{{ state.available.label }} — {{ state.available.subject }}
{# Release notes, out of the annotated tag itself. Escaped and preformatted, never through services/markdown.py: this comes from a tag object rather than from a template, and markdown is the one path allowed to emit HTML. #} {% if state.available.notes %}{{ state.available.notes }}
{% endif %}
{#
The commits between, not just a count. "3 behind" is a number somebody has to
go and look up; the subjects are what decides whether this is worth
restarting for right now.
#}
{% if state.behind %}
{{ commit.short }} {{ commit.subject }}
lembas.env and the systemd unit); re-run the installer with
INSTALL_UPDATE_HELPER=1 and the channel you want, which
writes both.
This host has the update helper installed, so the button below writes a request that a systemd unit picks up and runs as root. It always deploys the {{ state.channel }} channel — the request carries no ref and no channel, so pressing it is never “deploy something else”.
Every restart ends every open terminal session — a command still running on the far side is cut off. A reply being written is saved with whatever it has.
{% else %}{{ command }}
To install it, re-run the installer with
INSTALL_UPDATE_HELPER=1. Doing so means anybody who can
administer this web interface can deploy the {{ state.channel }}
channel — which is the point, and worth deciding on purpose rather than
arriving at.