diff options
Diffstat (limited to 'roles/dnf_automatic')
8 files changed, 110 insertions, 0 deletions
diff --git a/roles/dnf_automatic/defaults/main.yml b/roles/dnf_automatic/defaults/main.yml new file mode 100644 index 0000000..92ffda5 --- /dev/null +++ b/roles/dnf_automatic/defaults/main.yml @@ -0,0 +1,3 @@ +dnf_automatic_on_calendar: 03:00 +dnf_automatic_random_delay: 60m +dnf_automatic_restart: yes diff --git a/roles/dnf_automatic/files/etc/dnf/automatic.conf b/roles/dnf_automatic/files/etc/dnf/automatic.conf new file mode 100644 index 0000000..926207f --- /dev/null +++ b/roles/dnf_automatic/files/etc/dnf/automatic.conf @@ -0,0 +1,12 @@ +[commands] +upgrade_type = default +random_sleep = 0 +network_online_timeout = 60 +download_updates = yes +apply_updates = yes + +[emitters] +emit_via = stdio + +[base] +debuglevel = 1 diff --git a/roles/dnf_automatic/files/usr/local/sbin/dnf-auto-restart b/roles/dnf_automatic/files/usr/local/sbin/dnf-auto-restart new file mode 100644 index 0000000..76cc2d4 --- /dev/null +++ b/roles/dnf_automatic/files/usr/local/sbin/dnf-auto-restart @@ -0,0 +1,30 @@ +#!/bin/bash + +set -Eeu -o pipefail +shopt -s lastpipe + +if ! dnf needs-restarting --reboothint; then + shutdown --reboot '+5' 'Rebooting to apply package upgrades' + exit 0 +fi + +SERVICES=() + +dnf needs-restarting --services | while read -r service; do + if [[ $service = user@* ]]; then + continue + elif [ "$(systemctl show "$service" -P RefuseManualStop)" = yes ]; then + continue + else + SERVICES+=("$service") + fi +done + +printf '\n' +if (( ${#SERVICES[@]} > 0 )); then + echo 'restarting the following units:' + printf ' * %s\n' "${SERVICES[@]}" + systemctl restart "${SERVICES[@]}" +else + echo 'All services are up to date.' +fi diff --git a/roles/dnf_automatic/handlers/main.yml b/roles/dnf_automatic/handlers/main.yml new file mode 100644 index 0000000..8325ce9 --- /dev/null +++ b/roles/dnf_automatic/handlers/main.yml @@ -0,0 +1,4 @@ +- name: restart dnf-automatic + systemd: + name: dnf-automatic.timer + state: restarted diff --git a/roles/dnf_automatic/tasks/main.yml b/roles/dnf_automatic/tasks/main.yml new file mode 100644 index 0000000..113fee2 --- /dev/null +++ b/roles/dnf_automatic/tasks/main.yml @@ -0,0 +1,50 @@ +- name: install packages + dnf: + name: '{{ dnf_automatic_packages }}' + state: present + +- name: generate dnf-automatic configuration + copy: + src: etc/dnf/automatic.conf + dest: /etc/dnf/automatic.conf + +- name: copy dnf-automatic restart script + copy: + src: '{{ dnf_automatic_restart_script[1:] }}' + dest: '{{ dnf_automatic_restart_script }}' + mode: 0555 + +- name: create systemd override directories + file: + path: /etc/systemd/system/dnf-automatic.{{ item }}.d + state: directory + loop: + - timer + - service + +- name: create systemd override files + template: + src: etc/systemd/system/dnf-automatic.{{ item }}.d/override.conf.j2 + dest: /etc/systemd/system/dnf-automatic.{{ item }}.d/override.conf + loop: + - timer + - service + register: dnf_automatic_unit + notify: restart dnf-automatic + +- name: reload systemd units + systemd: + daemon_reload: yes + when: dnf_automatic_unit.changed + +- name: enable dnf-automatic systemd timer + systemd: + name: dnf-automatic.timer + enabled: yes + state: started + +- name: disable dnf-makecache timer + systemd: + name: dnf-makecache.timer + state: stopped + enabled: no diff --git a/roles/dnf_automatic/templates/etc/systemd/system/dnf-automatic.service.d/override.conf.j2 b/roles/dnf_automatic/templates/etc/systemd/system/dnf-automatic.service.d/override.conf.j2 new file mode 100644 index 0000000..6eafbd7 --- /dev/null +++ b/roles/dnf_automatic/templates/etc/systemd/system/dnf-automatic.service.d/override.conf.j2 @@ -0,0 +1,4 @@ +{% if dnf_automatic_restart %} +[Service] +ExecStartPost={{ dnf_automatic_restart_script }} +{% endif %} diff --git a/roles/dnf_automatic/templates/etc/systemd/system/dnf-automatic.timer.d/override.conf.j2 b/roles/dnf_automatic/templates/etc/systemd/system/dnf-automatic.timer.d/override.conf.j2 new file mode 100644 index 0000000..20a5678 --- /dev/null +++ b/roles/dnf_automatic/templates/etc/systemd/system/dnf-automatic.timer.d/override.conf.j2 @@ -0,0 +1,3 @@ +[Timer] +OnCalendar={{ dnf_automatic_on_calendar }} +RandomizedDelaySec={{ dnf_automatic_random_delay }} diff --git a/roles/dnf_automatic/vars/main.yml b/roles/dnf_automatic/vars/main.yml new file mode 100644 index 0000000..3d96ec2 --- /dev/null +++ b/roles/dnf_automatic/vars/main.yml @@ -0,0 +1,4 @@ +dnf_automatic_packages: + - dnf-automatic + +dnf_automatic_restart_script: /usr/local/sbin/dnf-auto-restart |