- section_tabs macro; Runs · Playbooks · Schedules · Inventory on every Ansible page, replacing each page's own set of header buttons. - Runs: a verdict line (last 30 days, failures first with the latest named, running now, the schedule due next); under each status what the run did across its hosts (ansible/recap.py); a filter bar (playbook, status, who started it) that swaps the table and carries into the scroll paging. - Run page: status, duration, start and who started it in one line; each host's result in words, worst first; the playbook it ran links to it; the log and failures on classes rather than inline colours. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
29 lines
1.6 KiB
HTML
29 lines
1.6 KiB
HTML
{# ansible/_runs_page.html — one page of runs, then the sentinel that loads the
|
|
next page as the reader nears it (core.paging, pref 172). The whole row
|
|
opens the run (.row-link); its title is the one real link. Under the status,
|
|
what the run did across its hosts (ansible.recap.run_recap). #}
|
|
{% from "_macros.html" import status_badge, scroll_more, scroll_end %}
|
|
{% for row in runs %}
|
|
{% set run = row.run %}
|
|
<tr class="row-link">
|
|
<td class="cell-name">
|
|
<a class="row-target" href="/ansible/runs/{{ run.id }}" title="{{ row.title }}">{{ row.title }}</a>
|
|
<div class="cell-sub">{{ run.source_name }}{% if row.check %} · <span class="tone-info" title="Ansible check mode: nothing was changed">dry run</span>{% endif %}</div>
|
|
</td>
|
|
<td>
|
|
{{ status_badge(run.status) }}
|
|
{%- if row.recap %}
|
|
<div class="cell-sub">{% for text, tone in row.recap %}{% if not loop.first %} · {% endif %}{% if tone %}<span class="tone-{{ tone }}">{{ text }}</span>{% else %}{{ text }}{% endif %}{% endfor %}</div>
|
|
{%- endif %}
|
|
</td>
|
|
<td>{% if row.origin %}{{ row.origin.text }}{% endif %}</td>
|
|
<td class="nowrap" title="{{ run.started_at.strftime('%Y-%m-%d %H:%M:%S UTC') }}">{{ run.started_at|ago }}</td>
|
|
<td class="num nowrap">{{ row.duration_s|duration }}{% if not run.finished_at and run.status.value in ('running', 'queued') %} so far{% endif %}</td>
|
|
</tr>
|
|
{% endfor %}
|
|
{% if more_url %}
|
|
{{ scroll_more(more_url, cols=5) }}
|
|
{% else %}
|
|
{{ scroll_end(cols=5) }}
|
|
{% endif %}
|