diff --git a/steward/ansible/routes.py b/steward/ansible/routes.py index af09e19..28b36a3 100644 --- a/steward/ansible/routes.py +++ b/steward/ansible/routes.py @@ -172,6 +172,8 @@ async def playbook_vars(): (vars/vars_prompt), loaded when a playbook is chosen from a dropdown.""" source_name = (request.args.get("source_name", "") or "").strip() playbook_path = (request.args.get("playbook_path", "") or "").strip() + # Schedule form: schedules can't prompt, so secret vars render disabled. + schedule = (request.args.get("schedule", "") or "").strip() == "1" source = next((s for s in _get_sources() if s["name"] == source_name), None) variables: list = [] meta: dict = {"description": "", "category": "", "confirm": False} @@ -182,7 +184,8 @@ async def playbook_vars(): meta = src_module.discover_playbook_meta(contents) return await render_template( "ansible/_playbook_vars.html", variables=variables, - description=meta["description"], category=meta["category"], confirm=meta["confirm"]) + description=meta["description"], category=meta["category"], + confirm=meta["confirm"], schedule=schedule) @ansible_bp.get("/run-form//") @@ -383,11 +386,25 @@ async def schedules(): if editing_id and s.id == editing_id: editing = s + # Edit mode: pre-render the selected playbook's declared variables so their + # saved values show (fresh loads fetch these via HTMX from /playbook-vars). + edit_variables: list = [] + edit_meta: dict = {"description": "", "category": "", "confirm": False} + if editing: + src = next((s for s in _get_sources() if s["name"] == editing.source_name), None) + if src: + contents = src_module.read_playbook(src["path"], editing.playbook_path) + if contents is not None: + edit_variables = src_module.discover_playbook_variables(contents) + edit_meta = src_module.discover_playbook_meta(contents) + return await render_template( "ansible/schedules.html", rows=rows, groups=groups, targets=targets, source_data=source_data, all_playbooks=all_playbooks, editing=editing, interval_presets=INTERVAL_PRESETS, + edit_variables=edit_variables, edit_description=edit_meta["description"], + edit_category=edit_meta["category"], edit_confirm=edit_meta["confirm"], ) diff --git a/steward/templates/ansible/_playbook_vars.html b/steward/templates/ansible/_playbook_vars.html index 38d2149..55a4e03 100644 --- a/steward/templates/ansible/_playbook_vars.html +++ b/steward/templates/ansible/_playbook_vars.html @@ -1,6 +1,11 @@ {# Description + discovered variable fields for a selected playbook. Shared by the browse run form, host run form, and schedule form. Expects `variables` - and `description`. Rendered standalone by /ansible/playbook-vars. #} + and `description`. Rendered standalone by /ansible/playbook-vars. + Optional: `values` (dict var-name→saved value, prefills fields for edit + forms) and `schedule` (True in the schedule form — schedules can't prompt, + so secret vars are shown disabled and the confirm gate isn't `required`). #} +{% set _values = values|default({}) %} +{% set _schedule = schedule|default(false) %} {% if description or category %}
@@ -13,7 +18,7 @@ @@ -33,13 +38,22 @@ ({{ v.name }}{% if v.required %}, required{% endif %}{% if v.secret %}, secret{% endif %}) + {% if v.secret and _schedule %} + {# Scheduled runs can't prompt, so secret vars are dropped downstream — show + the field disabled rather than inviting silent data loss. #} + + {% else %} {% if v.secret %}{% endif %} + {% endif %}
{% endfor %} {% else %} diff --git a/steward/templates/ansible/schedules.html b/steward/templates/ansible/schedules.html index d54fd86..bc21fe7 100644 --- a/steward/templates/ansible/schedules.html +++ b/steward/templates/ansible/schedules.html @@ -75,6 +75,8 @@ {# ── Create / edit form ───────────────────────────────────────────────────── #} {% set p = (editing.params or {}) if editing else {} %} +{% set saved_vars = p.get('extra_vars_map') or {} %} +{% set declared_names = (edit_variables or []) | map(attribute='name') | list %}

{{ "Edit schedule" if editing else "New schedule" }}

@@ -96,7 +98,9 @@
- {% for pb in all_playbooks %} @@ -132,11 +136,29 @@
-
- - + + {# Declared playbook variables (vars:/vars_prompt:) — loaded via HTMX on + playbook change; pre-rendered here in edit mode so saved values show. #} +
+ {% if editing %} + {% set variables = edit_variables %} + {% set description = edit_description %} + {% set category = edit_category %} + {% set confirm = edit_confirm %} + {% set values = saved_vars %} + {% set schedule = true %} + {% include "ansible/_playbook_vars.html" %} + {% endif %}
+ +
+ Extra vars +
+ + +
+