Move roles/matrix* to roles/custom/matrix*

This paves the way for installing other roles into `roles/galaxy` using `ansible-galaxy`,
similar to how it's done in:

- https://github.com/spantaleev/gitea-docker-ansible-deploy
- https://github.com/spantaleev/nextcloud-docker-ansible-deploy

In the near future, we'll be removing a lot of the shared role code from here
and using upstream roles for it. Some of the core `matrix-*` roles have
already been extracted out into other reusable roles:

- https://github.com/devture/com.devture.ansible.role.postgres
- https://github.com/devture/com.devture.ansible.role.systemd_docker_base
- https://github.com/devture/com.devture.ansible.role.timesync
- https://github.com/devture/com.devture.ansible.role.vars_preserver
- https://github.com/devture/com.devture.ansible.role.playbook_runtime_messages
- https://github.com/devture/com.devture.ansible.role.playbook_help

We just need to migrate to those.
This commit is contained in:
Slavi Pantaleev
2022-11-03 09:11:29 +02:00
parent 6c131138ad
commit 410a915a8a
722 changed files with 148 additions and 145 deletions

View File

@ -0,0 +1,17 @@
---
# 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

@ -0,0 +1,7 @@
---
# Ansible outputs the message in the `item=` field.
# It's unnecessary to output it again in the actual message, so we don't.
- ansible.builtin.debug:
msg: ""
with_items: "{{ matrix_playbook_runtime_results }}"
when: "matrix_playbook_runtime_results is defined and matrix_playbook_runtime_results | length > 0"

View File

@ -0,0 +1,19 @@
---
- 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/dump_runtime_results.yml"
tags:
- always
- ansible.builtin.import_tasks: "{{ role_path }}/tasks/run_docker_prune.yml"
tags:
- run-docker-prune

View File

@ -0,0 +1,7 @@
---
- name: Run Docker System Prune
ansible.builtin.command:
cmd: "{{ matrix_host_command_docker }} system prune -a -f"
register: matrix_common_after_docker_prune_result
changed_when: matrix_common_after_docker_prune_result.rc == 0

View File

@ -0,0 +1,73 @@
---
- name: Determine whether we should make services autostart
ansible.builtin.set_fact:
matrix_services_autostart_enabled_bool: "{{ true if matrix_services_autostart_enabled | default('') == '' else matrix_services_autostart_enabled | bool }}"
- name: Ensure systemd is reloaded
ansible.builtin.service:
daemon_reload: true
- name: Ensure Matrix services are stopped
ansible.builtin.service:
name: "{{ item }}"
state: stopped
with_items: "{{ matrix_systemd_services_list }}"
when: not ansible_check_mode
- name: Ensure Matrix services are started
ansible.builtin.service:
name: "{{ item }}"
enabled: "{{ matrix_services_autostart_enabled_bool }}"
state: started
with_items: "{{ matrix_systemd_services_list }}"
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
- when: "ansible_distribution != 'Archlinux'"
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 }}"
when:
- "item.endswith('.service') and (ansible_facts.services[item] | default(none) is none or ansible_facts.services[item].state != 'running')"
- when: "ansible_distribution == 'Archlinux'"
block:
# Currently there is a bug in ansible that renders is incompatible with systemd.
# service_facts is not collecting the data successfully.
# Therefore iterating here manually
- name: Fetch systemd information
ansible.builtin.systemd:
name: "{{ item }}"
register: systemdstatus
with_items: "{{ matrix_systemd_services_list }}"
- name: Fail if service isn't detected to be running
ansible.builtin.fail:
msg: >-
{{ item.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.item }}` and `journalctl -fu {{ item.item }}` on the server to investigate.
with_items: "{{ systemdstatus.results }}"
when: "item.status['ActiveState'] != 'active'"

View File

@ -0,0 +1,7 @@
---
- name: Ensure Matrix services stopped
ansible.builtin.service:
name: "{{ item }}"
state: stopped
with_items: "{{ matrix_systemd_services_list }}"