{# ansible/schedules.html — the Schedules tab (#5332): a verdict line, then each schedule as one sentence (what runs where, how often, when next, how it last went), failing first and paused last. The whole row opens the schedule's page; Run now and Pause stay in the row. #} {% extends "base.html" %} {% from "_macros.html" import crumbs, page_header, status_badge, empty_state %} {% from "ansible/_tabs.html" import ansible_tabs %} {% from "ansible/_macros.html" import interval_words %} {% block title %}Ansible Schedules — Steward{% endblock %} {% block breadcrumb %}{{ crumbs([("Ansible", "/ansible/"), ("Schedules", "")]) }}{% endblock %} {% block section_tabs %}{{ ansible_tabs("schedules") }}{% endblock %} {% block content %} {% set can_edit = session.user_role in ('operator', 'admin') %} {% call page_header("Schedules") %} {% if can_edit %}New schedule{% endif %} {% endcall %} {% if not rows %}
{%- if failing %}{{ failing }} of {{ rows|length }} failing {%- else %}{{ rows|length }} schedule{{ 's' if rows|length != 1 }}, {{ 'none' if rows|length > 1 else 'not' }} failing{% endif %} {%- if paused %} · {{ paused }} paused{% endif %} {%- if next %} · next: {{ next.name }} {% if next.at %}{{ next.at|ago }}{% else %}due now{% endif %}{% endif -%}
| Schedule | When | Last run | |
|---|---|---|---|
|
{{ s.name }}
{{ s.playbook_path }} on {{ row.scope_label }}
{%- if (s.params or {}).get('check') %} · dry run{% endif %}
|
{{ interval_words(s.interval_seconds) }}
{% if not s.enabled %}paused{% elif row.next and row.next.at %}next {{ row.next.at|ago }}{% else %}due now{% endif %}
|
{%- if row.last_run %}{{ status_badge(row.last_run.status) }} {{ row.last_run.started_at|ago }}
{%- elif not s.last_error %}never run{% endif %}
{%- if s.last_error %}
{#- With a run beside it, the last firing was skipped because that run was
still going (#5158); without one, the firing couldn't start a run. #}
{{ s.last_error }} · {{ s.last_run_at|ago }}
{%- endif %}
|
{% if can_edit %} {% endif %} |