From e8545f2f3c1cf30d5224db4b0b545b028dc652e9 Mon Sep 17 00:00:00 2001 From: Oleg Broytman Date: Sat, 27 Jun 2026 23:09:50 +0300 Subject: [PATCH] Feat: Start/stop/reload/restart services with fallbacks --- playbooks/debian/sa-merge-all.yaml | 32 +++++++++---------- .../add-apache-vhost/handlers/main.yaml | 8 ++--- .../debian/add-dns-domain/tasks/main.yaml | 8 ++--- .../roles/debian/apache/handlers/main.yaml | 16 +++++----- .../roles/debian/email/handlers/main.yaml | 8 ++--- .../roles/debian/firewall/handlers/main.yaml | 8 ++--- playbooks/roles/debian/named/tasks/main.yaml | 8 ++--- playbooks/roles/openvpn/handlers/main.yaml | 8 ++--- .../roles/redhat/firewall/tasks/main.yaml | 27 +++++++--------- playbooks/roles/sshd/handlers/main.yaml | 8 ++--- playbooks/tasks/service/README.txt | 8 +++++ playbooks/tasks/service/service | 8 +++++ playbooks/tasks/service/service.yaml | 3 ++ 13 files changed, 83 insertions(+), 67 deletions(-) create mode 100644 playbooks/tasks/service/README.txt create mode 100755 playbooks/tasks/service/service create mode 100644 playbooks/tasks/service/service.yaml diff --git a/playbooks/debian/sa-merge-all.yaml b/playbooks/debian/sa-merge-all.yaml index a4f4a8b..53dd618 100644 --- a/playbooks/debian/sa-merge-all.yaml +++ b/playbooks/debian/sa-merge-all.yaml @@ -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 }}" @@ -40,15 +40,15 @@ 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 diff --git a/playbooks/roles/debian/add-apache-vhost/handlers/main.yaml b/playbooks/roles/debian/add-apache-vhost/handlers/main.yaml index e4b4950..8498f1c 100644 --- a/playbooks/roles/debian/add-apache-vhost/handlers/main.yaml +++ b/playbooks/roles/debian/add-apache-vhost/handlers/main.yaml @@ -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 diff --git a/playbooks/roles/debian/add-dns-domain/tasks/main.yaml b/playbooks/roles/debian/add-dns-domain/tasks/main.yaml index 78b3539..ae3b5cb 100644 --- a/playbooks/roles/debian/add-dns-domain/tasks/main.yaml +++ b/playbooks/roles/debian/add-dns-domain/tasks/main.yaml @@ -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 diff --git a/playbooks/roles/debian/apache/handlers/main.yaml b/playbooks/roles/debian/apache/handlers/main.yaml index 8354bbf..e7bbb2e 100644 --- a/playbooks/roles/debian/apache/handlers/main.yaml +++ b/playbooks/roles/debian/apache/handlers/main.yaml @@ -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 diff --git a/playbooks/roles/debian/email/handlers/main.yaml b/playbooks/roles/debian/email/handlers/main.yaml index 95dad5a..ce8890f 100644 --- a/playbooks/roles/debian/email/handlers/main.yaml +++ b/playbooks/roles/debian/email/handlers/main.yaml @@ -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 diff --git a/playbooks/roles/debian/firewall/handlers/main.yaml b/playbooks/roles/debian/firewall/handlers/main.yaml index 33594fd..6025d1b 100644 --- a/playbooks/roles/debian/firewall/handlers/main.yaml +++ b/playbooks/roles/debian/firewall/handlers/main.yaml @@ -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 diff --git a/playbooks/roles/debian/named/tasks/main.yaml b/playbooks/roles/debian/named/tasks/main.yaml index 3366530..c3d5ca1 100644 --- a/playbooks/roles/debian/named/tasks/main.yaml +++ b/playbooks/roles/debian/named/tasks/main.yaml @@ -30,10 +30,10 @@ 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 diff --git a/playbooks/roles/openvpn/handlers/main.yaml b/playbooks/roles/openvpn/handlers/main.yaml index 9b470dd..488fb9e 100644 --- a/playbooks/roles/openvpn/handlers/main.yaml +++ b/playbooks/roles/openvpn/handlers/main.yaml @@ -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 diff --git a/playbooks/roles/redhat/firewall/tasks/main.yaml b/playbooks/roles/redhat/firewall/tasks/main.yaml index 90744d7..0042146 100644 --- a/playbooks/roles/redhat/firewall/tasks/main.yaml +++ b/playbooks/roles/redhat/firewall/tasks/main.yaml @@ -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 diff --git a/playbooks/roles/sshd/handlers/main.yaml b/playbooks/roles/sshd/handlers/main.yaml index b7beb0a..b07dd02 100644 --- a/playbooks/roles/sshd/handlers/main.yaml +++ b/playbooks/roles/sshd/handlers/main.yaml @@ -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 index 0000000..bbced3e --- /dev/null +++ b/playbooks/tasks/service/README.txt @@ -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 index 0000000..8b1caac --- /dev/null +++ b/playbooks/tasks/service/service @@ -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 index 0000000..7c56cfe --- /dev/null +++ b/playbooks/tasks/service/service.yaml @@ -0,0 +1,3 @@ +- name: Manage a service + become: true + shell: "exec ~phd/admin/ansible/playbooks/tasks/service/service {{ command }} {{ service }}" -- 2.47.3