---

- name: Ensure systemd reloaded
  service:
    daemon_reload: yes

- name: Ensure Matrix services stopped
  service:
    name: "{{ item }}"
    state: stopped
  with_items: "{{ matrix_systemd_services_list }}"

- name: Ensure Matrix services started
  service:
    name: "{{ item }}"
    enabled: yes
    state: started
  with_items: "{{ matrix_systemd_services_list }}"

# 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)
  wait_for:
    timeout: 5
  delegate_to: 127.0.0.1
  become: false

- name: Populate service facts
  service_facts:

- name: Fail if service isn't detected to be running
  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.
  with_items: "{{ matrix_systemd_services_list }}"
  when: "ansible_facts.services[item + '.service']|default(none) is none or ansible_facts.services[item + '.service'].state != 'running'"