Ansible schedule form: structured playbook-variable fields + first-item dropdown defaults #2

Merged
bvandeusen merged 126 commits from dev into main 2026-06-30 23:44:04 -04:00
Showing only changes of commit 2ea8c2f9af - Show all commits
@@ -0,0 +1,82 @@
---
# description: Update all OS packages; optionally restart affected services and reboot if one is pending.
# steward:category: maintenance
# steward:confirm: true
#
# Cross-distro (apt / dnf-yum). Flags (set in the run form):
# restart_services=true after the upgrade, restart every service that needs
# it (Debian: needrestart -r a; installed if missing).
# reboot_if_required=true reboot the host only if the update flagged a pending
# reboot (Debian: /var/run/reboot-required;
# RHEL: needs-restarting -r). Never reboots otherwise.
- name: System package update
hosts: all
become: true
gather_facts: true
vars:
restart_services: false
reboot_if_required: false
tasks:
# ── Debian / Ubuntu ──────────────────────────────────────────────────────
- name: Upgrade all packages (apt)
ansible.builtin.apt:
update_cache: true
upgrade: dist
autoremove: true
when: ansible_pkg_mgr == "apt"
- name: Ensure needrestart is present (apt, for service restarts)
ansible.builtin.apt:
name: needrestart
state: present
when:
- restart_services | bool
- ansible_pkg_mgr == "apt"
- name: Restart services that need it (apt / needrestart)
ansible.builtin.command: needrestart -r a
register: needrestart_run
changed_when: needrestart_run.rc == 0
failed_when: false
when:
- restart_services | bool
- ansible_pkg_mgr == "apt"
# ── RHEL / Fedora ─────────────────────────────────────────────────────────
- name: Upgrade all packages (dnf/yum)
ansible.builtin.dnf:
name: "*"
state: latest
when: ansible_pkg_mgr in ("dnf", "yum")
- name: Restart services that need it (dnf / needs-restarting)
ansible.builtin.shell: needs-restarting -s | xargs -r -n1 systemctl try-restart
register: rhel_restart
changed_when: rhel_restart.rc == 0
failed_when: false
when:
- restart_services | bool
- ansible_pkg_mgr in ("dnf", "yum")
# ── Reboot only if one is pending ─────────────────────────────────────────
- name: Check pending reboot (Debian)
ansible.builtin.stat:
path: /var/run/reboot-required
register: deb_reboot
when: ansible_pkg_mgr == "apt"
- name: Check pending reboot (RHEL)
ansible.builtin.command: needs-restarting -r
register: rhel_reboot
changed_when: false
failed_when: false
when: ansible_pkg_mgr in ("dnf", "yum")
- name: Reboot if required
ansible.builtin.reboot:
msg: "Reboot triggered by Steward system_update"
reboot_timeout: 900
when:
- reboot_if_required | bool
- (ansible_pkg_mgr == "apt" and deb_reboot.stat.exists)
or (ansible_pkg_mgr in ("dnf", "yum") and (rhel_reboot.rc | default(0)) != 0)