aboutsummaryrefslogtreecommitdiffstats
path: root/roles/dnf_automatic
diff options
context:
space:
mode:
Diffstat (limited to 'roles/dnf_automatic')
-rw-r--r--roles/dnf_automatic/defaults/main.yml3
-rw-r--r--roles/dnf_automatic/files/etc/dnf/automatic.conf12
-rw-r--r--roles/dnf_automatic/files/usr/local/sbin/dnf-auto-restart30
-rw-r--r--roles/dnf_automatic/handlers/main.yml4
-rw-r--r--roles/dnf_automatic/tasks/main.yml50
-rw-r--r--roles/dnf_automatic/templates/etc/systemd/system/dnf-automatic.service.d/override.conf.j24
-rw-r--r--roles/dnf_automatic/templates/etc/systemd/system/dnf-automatic.timer.d/override.conf.j23
-rw-r--r--roles/dnf_automatic/vars/main.yml4
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