aboutsummaryrefslogtreecommitdiffstats
path: root/roles/systemd_timer
diff options
context:
space:
mode:
authorStonewall Jackson <stonewall@sacredheartsc.com>2023-02-04 01:23:43 -0500
committerStonewall Jackson <stonewall@sacredheartsc.com>2023-02-04 01:52:13 -0500
commit0261e875679f1bf63c8d689da7fc7e014597885d (patch)
tree3f19cd74a0c1070944f75437f30b098d6ef2ffcb /roles/systemd_timer
downloadselfhosted-0261e875679f1bf63c8d689da7fc7e014597885d.tar.gz
selfhosted-0261e875679f1bf63c8d689da7fc7e014597885d.zip
initial commit
Diffstat (limited to 'roles/systemd_timer')
-rw-r--r--roles/systemd_timer/defaults/main.yml11
-rw-r--r--roles/systemd_timer/tasks/main.yml21
-rw-r--r--roles/systemd_timer/templates/etc/systemd/system/task.service.j223
-rw-r--r--roles/systemd_timer/templates/etc/systemd/system/task.timer.j29
4 files changed, 64 insertions, 0 deletions
diff --git a/roles/systemd_timer/defaults/main.yml b/roles/systemd_timer/defaults/main.yml
new file mode 100644
index 0000000..e429f17
--- /dev/null
+++ b/roles/systemd_timer/defaults/main.yml
@@ -0,0 +1,11 @@
+timer_persistent: yes
+timer_user: root
+timer_shell: no
+timer_enabled: yes
+
+# timer_group: groupname
+# timer_chdir: /path/to/working/directory
+#
+# timer_shell: some $shell | command
+# OR
+# timer_exec: command to exec
diff --git a/roles/systemd_timer/tasks/main.yml b/roles/systemd_timer/tasks/main.yml
new file mode 100644
index 0000000..0c0e028
--- /dev/null
+++ b/roles/systemd_timer/tasks/main.yml
@@ -0,0 +1,21 @@
+- name: create systemd units
+ template:
+ src: etc/systemd/system/task.{{ item }}.j2
+ dest: /etc/systemd/system/{{ timer_name }}.{{ item }}
+ loop:
+ - service
+ - timer
+ register: timer_unit
+
+- name: reload systemd units
+ systemd:
+ name: '{{ timer_name }}.timer'
+ daemon-reload: yes
+ state: restarted
+ when: timer_unit.changed
+
+- name: enable systemd timer
+ systemd:
+ name: '{{ timer_name }}.timer'
+ enabled: '{{ true if timer_enabled else false }}'
+ state: "{{ 'started' if timer_enabled else 'stopped' }}"
diff --git a/roles/systemd_timer/templates/etc/systemd/system/task.service.j2 b/roles/systemd_timer/templates/etc/systemd/system/task.service.j2
new file mode 100644
index 0000000..307c112
--- /dev/null
+++ b/roles/systemd_timer/templates/etc/systemd/system/task.service.j2
@@ -0,0 +1,23 @@
+[Unit]
+Description={{ timer_description | default(timer_name) }}
+{% if timer_after is defined %}
+After={{ timer_after if timer_after is string else (timer_after | join(' ')) }}
+{% endif %}
+
+[Service]
+Type=oneshot
+User={{ timer_user }}
+{% if timer_group is defined %}
+Group={{ timer_group }}
+{% endif %}
+{% if timer_chdir is defined %}
+WorkingDirectory={{ timer_chdir }}
+{% endif %}
+{% if timer_shell %}
+ExecStart=/bin/bash -Eeu -o pipefail -c {{ timer_exec | replace('%', '%%') | replace('$', '$$') | replace('\\', '\\\\') | quote }}
+{% else %}
+ExecStart={{ timer_exec | replace('%', '%%') | replace(';', '\;') }}
+{% endif %}
+
+[Install]
+WantedBy=multi-user.target
diff --git a/roles/systemd_timer/templates/etc/systemd/system/task.timer.j2 b/roles/systemd_timer/templates/etc/systemd/system/task.timer.j2
new file mode 100644
index 0000000..0e0adc8
--- /dev/null
+++ b/roles/systemd_timer/templates/etc/systemd/system/task.timer.j2
@@ -0,0 +1,9 @@
+[Unit]
+Description={{ timer_description | default(timer_name) }} on calendar interval
+
+[Timer]
+OnCalendar={{ timer_on_calendar }}
+Persistent={{ timer_persistent | bool | to_json }}
+
+[Install]
+WantedBy=timers.target