From e653dc55c22441d0de98e6d46a1a113a77d7597b Mon Sep 17 00:00:00 2001 From: L3D Date: Tue, 7 Dec 2021 19:50:02 +0100 Subject: [PATCH] introducing systemd timer --- defaults/main.yml | 8 ++++++-- handlers/main.yml | 18 ++++++++++++++++++ tasks/main.yml | 6 +++++- tasks/systemd.yml | 24 ++++++++++++++++++++++++ templates/restic-archiver.service.j2 | 11 +++++++++++ templates/restic-archiver.timer.j2 | 10 ++++++++++ vars/main.yml | 2 +- 7 files changed, 75 insertions(+), 4 deletions(-) create mode 100644 handlers/main.yml create mode 100644 tasks/systemd.yml create mode 100644 templates/restic-archiver.service.j2 create mode 100644 templates/restic-archiver.timer.j2 diff --git a/defaults/main.yml b/defaults/main.yml index fc257c0..3a2bb14 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -33,8 +33,10 @@ restic_archiver__owner: 'root' restic_archiver__group: 'root' # shedule restic cronjob -restic_archiver__hour: '3' -restic_archiver__minute: '32' +restic_archiver__hour: '4' +restic_archiver__minute: '23' +restic_archiver__oncalendar: '*-*-* 04:23:00' +restic_archiver__randomizeddelaysec: '900' # validate if disk is mounted restic_archiver__mount_required: false @@ -66,3 +68,5 @@ restic_archiver__cache_config: false restic_archiver__cache_dir: '~/.cache/restic' restic_archiver__prune: false + +restic_archiver__use_systemd_timer: true diff --git a/handlers/main.yml b/handlers/main.yml new file mode 100644 index 0000000..729a92f --- /dev/null +++ b/handlers/main.yml @@ -0,0 +1,18 @@ +--- +- name: systemctl daemon-reload + become: true + ansible.builtin.systemd: + daemon_reload: true + +- name: systemctl start restic-archiver.timer + become: true + ansible.builtin.systemd: + name: restic-archiver.timer + enabled: true + state: started + +- name: systemctl enable restic-archiver.service + become: true + ansible.builtin.systemd: + name: restic-archiver.service + enabled: true diff --git a/tasks/main.yml b/tasks/main.yml index 0cf35ec..ff59204 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -18,7 +18,11 @@ - name: create cronjob ansible.builtin.include_tasks: cron.yml -# todo: replace with systemd timer + when: not restic_archiver__use_systemd_timer | bool + +- name: create systemd timer + ansible.builtin.include_tasks: systemd.yml + when: restic_archiver__use_systemd_timer | bool - name: install requirements for mailing ansible.builtin.include_tasks: mail.yml diff --git a/tasks/systemd.yml b/tasks/systemd.yml new file mode 100644 index 0000000..16579c9 --- /dev/null +++ b/tasks/systemd.yml @@ -0,0 +1,24 @@ +--- +- name: create restic-archiver.service + become: true + ansible.builtin.template: + src: templates/restic-archiver.service.j2 + dest: /lib/systemd/system/restic-archiver.service + mode: 0644 + owner: root + group: root + notify: + - systemctl daemon-reload + - systemctl enable restic-archiver.service + +- name: create restic-archiver.timer + become: true + ansible.builtin.template: + src: templates/restic-archiver.timer.j2 + dest: /lib/systemd/system/restic-archiver.timer + mode: 0644 + owner: root + group: root + notify: + - systemctl daemon-reload + - systemctl start restic-archiver.timer diff --git a/templates/restic-archiver.service.j2 b/templates/restic-archiver.service.j2 new file mode 100644 index 0000000..66a3d45 --- /dev/null +++ b/templates/restic-archiver.service.j2 @@ -0,0 +1,11 @@ +[Unit] +Description=restic-archiver +Documentation=https://github.com/roles-ansible/ansible_role_restic_archiver.git + +[Service] +Type=oneshot +ExecStart=/opt/restic-backup.sh +TimeoutStartSec=0 +{% if restic_archiver__log_output -%} +StandardOutput=append:/var/log/restic/restic_archiver.log +{%- endif -%} diff --git a/templates/restic-archiver.timer.j2 b/templates/restic-archiver.timer.j2 new file mode 100644 index 0000000..98b2851 --- /dev/null +++ b/templates/restic-archiver.timer.j2 @@ -0,0 +1,10 @@ +[Unit] +Description=Systemd Timer to run the Restic archiver from /opt/restic-backup.sh + +[Timer] +OnCalendar={{ restic_archiver__oncalendar | default('*-*-* 04:23:00') }} +RandomizedDelaySec={{ restic_archiver__randomizeddelaysec }} +Persistent=true + +[Install] +WantedBy=timers.target diff --git a/vars/main.yml b/vars/main.yml index 8dfef90..f403bcd 100644 --- a/vars/main.yml +++ b/vars/main.yml @@ -1,3 +1,3 @@ --- -playbook_version_number: 49 # should be int +playbook_version_number: 50 # should be int playbook_version_path: 'role-restic_archiver_roles-ansible_github.com.version'