]> git.phdru.name Git - ansible.git/commitdiff
Feat: Start/stop/reload/restart services with fallbacks
authorOleg Broytman <phd@phdru.name>
Sat, 27 Jun 2026 20:09:50 +0000 (23:09 +0300)
committerOleg Broytman <phd@phdru.name>
Sat, 27 Jun 2026 20:51:31 +0000 (23:51 +0300)
13 files changed:
playbooks/debian/sa-merge-all.yaml
playbooks/roles/debian/add-apache-vhost/handlers/main.yaml
playbooks/roles/debian/add-dns-domain/tasks/main.yaml
playbooks/roles/debian/apache/handlers/main.yaml
playbooks/roles/debian/email/handlers/main.yaml
playbooks/roles/debian/firewall/handlers/main.yaml
playbooks/roles/debian/named/tasks/main.yaml
playbooks/roles/openvpn/handlers/main.yaml
playbooks/roles/redhat/firewall/tasks/main.yaml
playbooks/roles/sshd/handlers/main.yaml
playbooks/tasks/service/README.txt [new file with mode: 0644]
playbooks/tasks/service/service [new file with mode: 0755]
playbooks/tasks/service/service.yaml [new file with mode: 0644]

index a4f4a8b26514d64860a822a61702d5df42856f34..53dd61864cf6b59c65ecd1975a4132bbf737edf8 100644 (file)
@@ -4,15 +4,15 @@
   tasks:
     - block:
       - name: Stop exim
-        become: true
-        service:
-          name: exim4
-          state: stopped
+        include_tasks: ~phd/admin/ansible/playbooks/tasks/service/service.yaml
+        vars:
+          service: exim4
+          command: stop
       - name: Stop SpamAssassin
-        become: true
-        service:
-          name: spamd
-          state: stopped
+        include_tasks: ~phd/admin/ansible/playbooks/tasks/service/service.yaml
+        vars:
+          service: spamd
+          command: stop
 
       - name: Backup SpamAssassin DB
         shell: "sa-learn --sync && exec sa-learn --backup >~/tmp/sa-learn.backup@{{ inventory_hostname }}"
           chdir: "~/tmp"
 
       - name: Start SpamAssassin
-        become: true
-        service:
-          name: spamd
-          state: started
+        include_tasks: ~phd/admin/ansible/playbooks/tasks/service/service.yaml
+        vars:
+          service: spamd
+          command: start
       - name: Start exim
-        become: true
-        service:
-          name: exim4
-          state: started
+        include_tasks: ~phd/admin/ansible/playbooks/tasks/service/service.yaml
+        vars:
+          service: exim4
+          command: start
       when: inventory_hostname != 'localhost'
 
     - name: Cleanup
index e4b495031f97640100e39ea6dd7ad615440142af..8498f1ce831fad023fc06e6b1cea3647588a65ac 100644 (file)
@@ -1,5 +1,5 @@
 - name: Reload apache
-  become: true
-  service:
-    name: apache2
-    state: reloaded
+  include_tasks: ~phd/admin/ansible/playbooks/tasks/service/service.yaml
+  vars:
+    service: apache2
+    command: reload
index 78b3539f79ddc18d2058a36cdbe6d3681d9c2f0c..ae3b5cbd5f542fa209ba98e0a8840699a30a7e4b 100644 (file)
@@ -34,8 +34,8 @@
         line: "domain {{ domain }}"
 
     - name: Reload BIND
-      become: true
-      service:
-        name: named
-        state: reloaded
+      include_tasks: ~phd/admin/ansible/playbooks/tasks/service/service.yaml
+      vars:
+        service: named
+        command: reload
   when: not domain_exists.stat.exists
index 8354bbf38ef5e1cb7d8e161ac3cc4ae167b35398..e7bbb2e483443e648637b97ded06fa3b3c8f6998 100644 (file)
@@ -1,11 +1,11 @@
 - name: Reload apache
-  become: true
-  service:
-    name: apache2
-    state: reloaded
+  include_tasks: ~phd/admin/ansible/playbooks/tasks/service/service.yaml
+  vars:
+    service: apache2
+    command: reload
 
 - name: Restart apache
-  become: true
-  service:
-    name: apache2
-    state: restarted
+  include_tasks: ~phd/admin/ansible/playbooks/tasks/service/service.yaml
+  vars:
+    service: apache2
+    command: restart
index 95dad5a830b18178b26f16b6027c82fe1069d1ca..ce8890f3a7933b8e58c09bf04b726c2f89b27b72 100644 (file)
@@ -1,5 +1,5 @@
 - name: Restart spamd
-  become: true
-  service:
-    name: spamd
-    state: reloaded
+  include_tasks: ~phd/admin/ansible/playbooks/tasks/service/service.yaml
+  vars:
+    service: spamd
+    command: reload
index 33594fd8902475f128a01db4e605456c0f9dedfd..6025d1b4c516049a96c5b15e0cc5e86cc0aefff5 100644 (file)
@@ -1,5 +1,5 @@
 - name: Restart firewall
-  become: true
-  service:
-    name: nftables.sh
-    state: started
+  include_tasks: ~phd/admin/ansible/playbooks/tasks/service/service.yaml
+  vars:
+    service: nftables.sh
+    command: start
index 33665309682ee2ba681b8c9ebb52447366308c14..c3d5ca10ba85308a502c8ddc523d4a07c7478f76 100644 (file)
         mode: 'u=rw,go='
 
     - name: Reload BIND
-      become: true
-      service:
-        name: named
-        state: reloaded
+      include_tasks: ~phd/admin/ansible/playbooks/tasks/service/service.yaml
+      vars:
+        service: named
+        command: reload
 
     - name: Configure resolver
       become: true
index 9b470dd84540f80e4ad15307c984ddb1e47b0299..488fb9ec18f96bb918e4b6ed757a43de9d98c0cc 100644 (file)
@@ -1,5 +1,5 @@
 - name: Reload OpenVPN
-  become: true
-  service:
-    name: openvpn
-    state: reloaded
+  include_tasks: ~phd/admin/ansible/playbooks/tasks/service/service.yaml
+  vars:
+    service: openvpn
+    command: reload
index 90744d74c64440e1e11b8557d1a93b10fe196b13..004214615efda819bce473c32285d9453dc3cb76 100644 (file)
@@ -7,25 +7,22 @@
   notify: Restart firewall
 
 - name: Disable firewalld
-  become: true
-  service:
-    name: firewalld.service
-    state: stopped
-    enabled: no
+  include_tasks: ~phd/admin/ansible/playbooks/tasks/service/service.yaml
+  vars:
+    service: firewalld.service
+    command: stop
 
 - name: Enable fail2ban
-  become: true
-  service:
-    name: fail2ban
-    state: started
-    enabled: yes
+  include_tasks: ~phd/admin/ansible/playbooks/tasks/service/service.yaml
+  vars:
+    service: fail2ban
+    command: start
 
 - name: Enable nftables-service
-  become: true
-  service:
-    name: nftables
-    state: started
-    enabled: yes
+  include_tasks: ~phd/admin/ansible/playbooks/tasks/service/service.yaml
+  vars:
+    service: nftables
+    command: start
 
 - name: Configure firewall
   become: true
index b7beb0a35cb92686f4f9aa6a7163800ece47f352..b07dd0226142cb35a007465fa77139ba04e3a8d8 100644 (file)
@@ -1,5 +1,5 @@
 - name: Reload sshd
-  become: true
-  service:
-    name: "ssh{{ ansible_facts.os_family == 'RedHat' and 'd' or '' }}"
-    state: reloaded
+  include_tasks: ~phd/admin/ansible/playbooks/tasks/service/service.yaml
+  vars:
+    service: "ssh{{ ansible_facts.os_family == 'RedHat' and 'd' or '' }}"
+    command: reload
diff --git a/playbooks/tasks/service/README.txt b/playbooks/tasks/service/README.txt
new file mode 100644 (file)
index 0000000..bbced3e
--- /dev/null
@@ -0,0 +1,8 @@
+Task to start/stop/reload/restart services with fallbacks.
+
+Try `systemctl start/stop/reload/restart $service`, then
+try `service $service start/stop/reload/restart`, then
+try `/etc/init.d/$service start/stop/reload/restart`.
+
+The `$service` and `$command` must be passed to the task
+in variables `service` and `command`.
diff --git a/playbooks/tasks/service/service b/playbooks/tasks/service/service
new file mode 100755 (executable)
index 0000000..8b1caac
--- /dev/null
@@ -0,0 +1,8 @@
+#! /bin/sh
+
+command="$1"
+service="$2"
+
+systemctl $command $service ||
+service $service $command ||
+exec invoke-rc.d $service $command
diff --git a/playbooks/tasks/service/service.yaml b/playbooks/tasks/service/service.yaml
new file mode 100644 (file)
index 0000000..7c56cfe
--- /dev/null
@@ -0,0 +1,3 @@
+- name: Manage a service
+  become: true
+  shell: "exec ~phd/admin/ansible/playbooks/tasks/service/service {{ command }} {{ service }}"