{#- The node's maintenance card (ADR-0014): the current pin, and the admin read/edit/clear controls. Shared by the leaf detail page (check.html) and the subtree page (status.html): the model, POST /maintenance, persistence and the reaper always accepted a container pin; this partial is the surface for it. The caller gates on `is_admin`; `maintenance_default` is the deployment's default window (settings.yaml), shown so a blank field says what it means. The wording carries the feature: today's pin silences *everything*, so the sentence says exactly that — and stays honest about what keeps running underneath. A **pinned** node opens in read mode: the reason is safe rendered Markdown, then an explicit Edit disclosure reveals the raw source in a textarea (ADR-0014 / ADR-0018 amendments). Extending a window therefore remains an in-place edit, never a clear and re-set. Duration is *not* prefilled: blank means the configured default here exactly as it does on an unpinned node. This is also where the pin's full four-field reading lives — pinned by whom and when, last changed by whom and when — because there is room for it here and not in the popover. Both forms carry the entry's `set_at` as the compare-and-set token; empty says "I believe nothing is pinned". A write whose token no longer matches is refused whole and comes back as the conflict page. -#} {% from '_maintenance_fields.html' import maintenance_fields with context %} {% set entry = node.maintenance_entry %}

Maintenance

{% if node.maintenance %}

This node is in maintenance. {%- if entry %} Pinned by {{ entry.created_by or 'unknown' }} {{ entry.created_at | localtime }}. {%- if entry.set_at != entry.created_at %} Last changed by {{ entry.set_by or 'unknown' }} {{ entry.set_at | localtime }}. {%- endif %} Expires {{ entry.expires_at | localtime }}. {%- endif %}

{% if entry and entry.reason and entry.reason != 'maintenance' %}
{{ entry.reason | markdown }}
{% endif %}
Edit maintenance
{{ maintenance_fields(entry.reason if entry else '', '', 'node-maintenance', maintenance_default, maintenance_timezone) }}
{% else %} {% if node.children %}

Silences {{ node.path }} and everything beneath it: nothing under here will alarm before the pin expires. Its checks keep running — their colors stay visible here — and count again when the pin clears.

{% else %}

Silences {{ node.path }}: it will not alarm before the pin expires. The check keeps running and counts again when the pin clears.

{% endif %}
Set maintenance
{{ maintenance_fields('', '', 'node-maintenance', maintenance_default, maintenance_timezone) }}
{% endif %}