Replace matrix-common-after systemd service management with com.devture.ansible.role.systemd_service_manager

This commit is contained in:
Slavi Pantaleev
2022-11-23 10:14:28 +02:00
parent eec5de7aba
commit 93d4f8d425
12 changed files with 150 additions and 219 deletions

View File

@ -253,27 +253,6 @@ matrix_well_known_matrix_server_enabled: true
# See `matrix_homeserver_admin_contacts`, `matrix_homeserver_support_url`, etc.
matrix_well_known_matrix_support_enabled: false
# matrix_systemd_services_list_auto contains a list of systemd services and their priorities.
# This list is managed by the playbook. You're not meant to override this variable.
# To add your own items to the list, use `matrix_systemd_services_list_additional`
matrix_systemd_services_list_auto: []
# matrix_systemd_services_list_additional contains your own list of systemd services and their priorities.
#
# Example:
# matrix_systemd_services_list_additional:
# - name: some-service.service
# priority: 1250
# - name: another-service.service
# priority: 3500
matrix_systemd_services_list_additional: []
# matrix_systemd_services_list contains a list of systemd services and their priorities.
matrix_systemd_services_list: "{{ matrix_systemd_services_list_auto + matrix_systemd_services_list_additional }}"
# matrix_systemd_services_autostart_enabled controls whether systemd services should auto-start when the system reboots
matrix_systemd_services_autostart_enabled: true
matrix_homeserver_container_extra_arguments_auto: []
matrix_homeserver_app_service_config_files_auto: []

View File

@ -1,17 +0,0 @@
---
# Specifies how long to wait between starting systemd services and checking if they're started.
#
# A too low value may lead to a failure, as services may not have enough time to start and potentially fail.
#
# A value higher than 30 seconds (or any multiple of that) may also not work well, because a failing systemd service
# auto-restarts after 30 seconds (`RestartSec=30` in systemd service files).
# Checking if a service is running right after it had potentially restarted in such a way will lead us to
# thinking it's running, while it's merely starting again (and likely to fail again, given that it already did once).
#
# All of the services we manage are also started sequentially, which in itself can take a long time.
# There may be a ~10 second (or even larger) interval between starting the first service and starting the last one.
# This makes it even harder to pick a correct value. Such a 10 second gap and a waiting time of 20 seconds will
# put us right at the "dangerous" 30-second mark.
#
# We can try to measure this gap and adjust our waiting time accordingly, but we currently don't.
matrix_common_after_systemd_service_start_wait_for_timeout_seconds: 15

View File

@ -1,15 +1,5 @@
---
- ansible.builtin.import_tasks: "{{ role_path }}/tasks/start.yml"
when: run_start | bool
tags:
- start
- ansible.builtin.import_tasks: "{{ role_path }}/tasks/stop.yml"
when: run_stop | bool
tags:
- stop
- ansible.builtin.import_tasks: "{{ role_path }}/tasks/run_docker_prune.yml"
tags:
- run-docker-prune

View File

@ -1,48 +0,0 @@
---
- name: Ensure systemd is reloaded
ansible.builtin.service:
daemon_reload: true
- name: Ensure Matrix services are stopped
ansible.builtin.service:
name: "{{ item.name }}"
state: stopped
with_items: "{{ matrix_systemd_services_list | sort (attribute='priority,name', reverse=true) }}"
when: not ansible_check_mode
- name: Ensure Matrix services are started
ansible.builtin.service:
name: "{{ item.name }}"
state: started
enabled: "{{ matrix_systemd_services_autostart_enabled }}"
with_items: "{{ matrix_systemd_services_list | sort (attribute='priority,name') }}"
when: not ansible_check_mode
# If we check service state immediately, we may succeed,
# because it takes some time for the service to attempt to start and actually fail.
#
# Waiting too long (30s) may not work for a similar reason,
# as we may run into systemd's automatic restart logic retrying the service.
- name: Wait a bit, so that services can start (or fail)
ansible.builtin.wait_for:
timeout: "{{ matrix_common_after_systemd_service_start_wait_for_timeout_seconds }}"
delegate_to: 127.0.0.1
become: false
- block:
- name: Populate service facts
ansible.builtin.service_facts:
- name: Fail if service isn't detected to be running
ansible.builtin.fail:
msg: >-
{{ item }} was not detected to be running.
It's possible that there's a configuration problem or another service on your server interferes with it (uses the same ports, etc.).
Try running `systemctl status {{ item }}` and `journalctl -fu {{ item }}` on the server to investigate.
If you're on a slow or overloaded server, it may be that services take a longer time to start and that this error is a false-positive.
You can consider raising the value of the `matrix_common_after_systemd_service_start_wait_for_timeout_seconds` variable.
See `roles/custom/matrix-common-after/defaults/main.yml` for more details about that.
with_items: "{{ matrix_systemd_services_list | map(attribute='name') }}"
when:
- "item.endswith('.service') and (ansible_facts.services[item] | default(none) is none or ansible_facts.services[item].state != 'running')"

View File

@ -1,7 +0,0 @@
---
- name: Ensure Matrix services stopped
ansible.builtin.service:
name: "{{ item.name }}"
state: stopped
with_items: "{{ matrix_systemd_services_list | sort (attribute='priority,name', reverse=true) }}"

View File

@ -1,5 +1,5 @@
---
- ansible.builtin.set_fact:
matrix_systemd_services_list: "{{ [{'name': 'matrix-jitsi-jvb.service', 'priority': 1000}] }}"
devture_systemd_service_manager_services_list_auto: "{{ [{'name': 'matrix-jitsi-jvb.service', 'priority': 1000}] }}"
when: matrix_jitsi_enabled | bool

View File

@ -27,7 +27,7 @@
state: stopped
enabled: false
with_items: "{{ matrix_synapse_workers_current_systemd_services.files }}"
when: "not ansible_check_mode and item.path | basename not in matrix_systemd_services_list | map(attribute='name')"
when: "not ansible_check_mode and item.path | basename not in devture_systemd_service_manager_services_list | map(attribute='name')"
- name: Ensure unnecessary worker systemd services are cleaned
ansible.builtin.file:

View File

@ -53,7 +53,7 @@
when: "'replication_port' not in matrix_synapse_worker_details"
- ansible.builtin.set_fact:
matrix_systemd_services_list_auto: "{{ matrix_systemd_services_list_auto + [{'name': (matrix_synapse_worker_details.name + '.service'), 'priority': 1100}] }}"
devture_systemd_service_manager_services_list_auto: "{{ devture_systemd_service_manager_services_list_auto + [{'name': (matrix_synapse_worker_details.name + '.service'), 'priority': 1100}] }}"
- ansible.builtin.set_fact:
matrix_synapse_webserving_workers_systemd_services_list: "{{ matrix_synapse_webserving_workers_systemd_services_list + [matrix_synapse_worker_details.name + '.service'] }}"

View File

@ -30,3 +30,7 @@
- {'old': 'matrix_docker_installation_enabled', 'new': 'matrix_playbook_docker_installation_enabled'}
- {'old': 'matrix_docker_package_name', 'new': '<Not applicable. Docker is installed using https://github.com/geerlingguy/ansible-role-docker now>'}
- {'old': 'matrix_systemd_services_list', 'new': 'devture_systemd_service_manager_services_list_additional'}
- {'old': 'matrix_common_after_systemd_service_start_wait_for_timeout_seconds', 'new': 'devture_systemd_service_manager_up_verification_delay_seconds'}
- {'old': 'matrix_systemd_services_autostart_enabled', 'new': 'devture_systemd_service_manager_services_autostart_enabled'}