diff --git a/roles/icvpn/tasks/bird.yml b/roles/icvpn/tasks/bird.yml index 739901a0..cde1daf5 100644 --- a/roles/icvpn/tasks/bird.yml +++ b/roles/icvpn/tasks/bird.yml @@ -14,5 +14,13 @@ - name: Install cronjob to automatically update bgp bird configurations template: src: icvpn-update - dest: /etc/cron.hourly/icvpn-update + dest: /usr/local/bin/icvpn-update mode: 0755 + +- name: Install timer + import_role: + name: timer + vars: + timer_name: icvpn-update + timer_exec: /usr/local/bin/icvpn-update + timer_interval: 1hour diff --git a/roles/mesh-announce/tasks/main.yml b/roles/mesh-announce/tasks/main.yml index f808968c..6a545ee0 100644 --- a/roles/mesh-announce/tasks/main.yml +++ b/roles/mesh-announce/tasks/main.yml @@ -24,10 +24,18 @@ name: respondd enabled: yes -- name: Install cronjob to automatically update alfred announce - template: - src: cronjob - dest: /etc/cron.d/mesh-announce-alfred +- name: Remove legacy cronjob + file: + path: /etc/cron.d/mesh-announce-alfred + state: absent + +- name: Install timer + import_role: + name: timer + vars: + timer_name: mesh-announce + timer_exec: "/opt/{{ site_code }}/mesh-announce/announce.sh -i {{ alfred_mtu_interface if alfred_master else main_bridge }} -b {{ batman_interface }}" + timer_interval: 1min when: mesh_announce_alfred - name: Open firewall for respondd diff --git a/roles/mesh-announce/templates/cronjob b/roles/mesh-announce/templates/cronjob deleted file mode 100644 index 55876ef1..00000000 --- a/roles/mesh-announce/templates/cronjob +++ /dev/null @@ -1,7 +0,0 @@ -# {{ ansible_managed }} -PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin -{% if alfred_master %} -* * * * * root sh /opt/{{ site_code }}/mesh-announce/announce.sh -i {{ alfred_mtu_interface }} -b {{ batman_interface }} -{% else %} -* * * * * root sh /opt/{{ site_code }}/mesh-announce/announce.sh -i {{ main_bridge }} -b {{ batman_interface }} -{% endif %} diff --git a/roles/meshviewer/tasks/geojson.yml b/roles/meshviewer/tasks/geojson.yml index 9be34246..9f8d23f4 100644 --- a/roles/meshviewer/tasks/geojson.yml +++ b/roles/meshviewer/tasks/geojson.yml @@ -14,10 +14,15 @@ group: root mode: 0755 -- name: Install cronjob to copy valide geojson - template: - src: geojson.cronjob - dest: /etc/cron.d/geojson-update - owner: root - group: root - mode: 0644 +- name: Install timer + import_role: + name: timer + vars: + timer_name: geojson-update + timer_exec: /usr/local/bin/geojson-update + timer_interval: 5min + +- name: Remove legacy cronjob + file: + path: /etc/cron.d/geojson-update + state: absent diff --git a/roles/meshviewer/templates/geojson.cronjob b/roles/meshviewer/templates/geojson.cronjob deleted file mode 100644 index dfe333c6..00000000 --- a/roles/meshviewer/templates/geojson.cronjob +++ /dev/null @@ -1,2 +0,0 @@ -PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin -*/5 * * * * root /usr/local/bin/geojson-update diff --git a/roles/nsd/files/cronjob b/roles/nsd/files/zonegen-all similarity index 96% rename from roles/nsd/files/cronjob rename to roles/nsd/files/zonegen-all index 0f6186d0..fc391b90 100644 --- a/roles/nsd/files/cronjob +++ b/roles/nsd/files/zonegen-all @@ -21,4 +21,4 @@ --nserver dns.bremen.freifunk.net ns2.afraid.org ns2.he.net \ --file=/var/lib/nsd/0.b.a.b.b.b.f.f.2.8.7.8.6.0.a.2.ip6.arpa.zone --reverse nodes.ffhb.de. || exit -nsd-control reload > /dev/null +nsd-control reload diff --git a/roles/nsd/tasks/main.yml b/roles/nsd/tasks/main.yml index ea4e481d..907b037b 100644 --- a/roles/nsd/tasks/main.yml +++ b/roles/nsd/tasks/main.yml @@ -30,22 +30,30 @@ - name: Install script to generate nodes zone copy: - src: zonegen.py - dest: /usr/local/bin/zonegen.py + src: "{{ item }}" + dest: /usr/local/bin/ owner: root group: root mode: 0755 + with_items: + - zonegen.py + - zonegen-all -- name: Install cronjob to generate nodes zone - copy: - src: cronjob - dest: /etc/cron.hourly/zonegen - owner: root - group: root - mode: 0755 +- name: Remove legacy cronjob + file: + path: /etc/cron.hourly/zonegen + state: absent + +- name: Install timer + import_role: + name: timer + vars: + timer_name: zonegen + timer_exec: /usr/local/bin/zonegen-all + timer_interval: 60min - name: Initially generate nodes zone - command: /etc/cron.hourly/zonegen + service: name=zonegen.service state=started - name: Open firewall for DNS copy: diff --git a/roles/timer/defaults/main.yml b/roles/timer/defaults/main.yml new file mode 100644 index 00000000..d57c3128 --- /dev/null +++ b/roles/timer/defaults/main.yml @@ -0,0 +1,7 @@ +timer_name: +timer_descr: +timer_exec: /bin/false +timer_user: root +timer_interval: +timer_calendar: +timer_randomized_delay: diff --git a/roles/timer/tasks/main.yml b/roles/timer/tasks/main.yml new file mode 100644 index 00000000..19137e70 --- /dev/null +++ b/roles/timer/tasks/main.yml @@ -0,0 +1,20 @@ +--- +- name: Fail when timer_name is empty + fail: msg="timer_name is empty" + when: not timer_name + +- name: Upload service and timer + template: + src: "job.{{ item }}" + dest: /lib/systemd/system/{{ timer_name }}.{{ item }} + with_items: + - service + - timer + register: template_result + +- name: Reload systemd + command: systemctl daemon-reload + when: template_result.changed + +- name: Enable and start timer + service: {{ timer_name }}.timer enabled=yes state=started diff --git a/roles/timer/templates/service b/roles/timer/templates/service new file mode 100644 index 00000000..4d8fb4c5 --- /dev/null +++ b/roles/timer/templates/service @@ -0,0 +1,10 @@ +# {{ ansible_managed }} + +[Unit] +Description={{ timer_descr | default(timer_name + " Timer") }} + +[Service] +Type=oneshot +User={{ timer_user }} + +ExecStart={{ timer_exec }} diff --git a/roles/timer/templates/timer b/roles/timer/templates/timer new file mode 100644 index 00000000..12f2a1c4 --- /dev/null +++ b/roles/timer/templates/timer @@ -0,0 +1,20 @@ +# {{ ansible_managed }} + +[Unit] +Description={{ timer_name }} Service + +[Timer] +Unit={{ timer_name }}.service +{% if timer_calendar is defined %} +OnCalendar={{ timer_calendar }} +{% else %} +OnBootSec={{ timer_startup_delay | default("60") }} +OnUnitInactiveSec={{ timer_interval }} +{% endif %} + +{% if timer_randomized_delay is defined %} +RandomizedDelaySec={{ timer_randomized_delay }} +{% endif %} + +[Install] +WantedBy=basic.target