51312b8250
As suggested in #63 (Github issue), splitting the playbook's logic into multiple roles will be beneficial for maintainability. This patch realizes this split. Still, some components affect others, so the roles are not really independent of one another. For example: - disabling mxisd (`matrix_mxisd_enabled: false`), causes Synapse and riot-web to reconfigure themselves with other (public) Identity servers. - enabling matrix-corporal (`matrix_corporal_enabled: true`) affects how reverse-proxying (by `matrix-nginx-proxy`) is done, in order to put matrix-corporal's gateway server in front of Synapse We may be able to move away from such dependencies in the future, at the expense of a more complicated manual configuration, but it's probably not worth sacrificing the convenience we have now. As part of this work, the way we do "start components" has been redone now to use a loop, as suggested in #65 (Github issue). This should make restarting faster and more reliable.
84 lines
3 KiB
YAML
84 lines
3 KiB
YAML
---
|
|
|
|
# Pre-checks
|
|
|
|
- name: Fail if playbook called incorrectly
|
|
fail:
|
|
msg: "The `server_path_media_store` variable needs to be provided to this playbook, via --extra-vars"
|
|
when: "server_path_media_store is not defined or server_path_media_store.startswith('<')"
|
|
|
|
- name: Fail if media store is on Amazon S3
|
|
fail:
|
|
msg: "Your media store is on Amazon S3. Due to technical limitations, restoring is not supported."
|
|
when: "matrix_s3_media_store_enabled"
|
|
|
|
- name: Check if the provided media store directory exists
|
|
stat:
|
|
path: "{{ server_path_media_store }}"
|
|
register: server_path_media_store_stat
|
|
|
|
- name: Fail if provided media store directory doesn't exist on the server
|
|
fail:
|
|
msg: "{{ server_path_media_store }} cannot be found on the server"
|
|
when: "not server_path_media_store_stat.stat.exists or not server_path_media_store_stat.stat.isdir"
|
|
|
|
- name: Check if media store contains local_content
|
|
stat:
|
|
path: "{{ server_path_media_store }}/local_content"
|
|
register: server_path_media_store_local_content_stat
|
|
|
|
- name: Check if media store contains remote_content
|
|
stat:
|
|
path: "{{ server_path_media_store }}/remote_content"
|
|
register: server_path_media_store_remote_content_stat
|
|
|
|
- name: Fail if media store directory doesn't look okay (lacking remote and local content)
|
|
fail:
|
|
msg: "{{ server_path_media_store }} contains neither local_content nor remote_content directories. It's most likely a mistake and is not a media store directory."
|
|
when: "not server_path_media_store_local_content_stat.stat.exists and not server_path_media_store_remote_content_stat.stat.exists"
|
|
|
|
|
|
# Actual import work
|
|
|
|
- name: Ensure matrix-synapse is stopped
|
|
service:
|
|
name: matrix-synapse
|
|
state: stopped
|
|
daemon_reload: yes
|
|
register: stopping_result
|
|
|
|
# This can only work with local files, not if the media store is on Amazon S3,
|
|
# as it won't be accessible in such a case.
|
|
- name: Ensure provided media store directory is synchronized
|
|
synchronize:
|
|
src: "{{ server_path_media_store }}/"
|
|
dest: "{{ matrix_synapse_media_store_path }}"
|
|
delete: yes
|
|
# It's wasteful to preserve owner/group now. We chown below anyway.
|
|
owner: no
|
|
group: no
|
|
times: yes
|
|
delegate_to: "{{ inventory_hostname }}"
|
|
|
|
# This is for the generic case and fails in other cases (remote file systems),
|
|
# because in such cases the base path (matrix_synapse_media_store_path) is a mount point.
|
|
- name: Ensure media store permissions are correct (generic case)
|
|
file:
|
|
path: "{{ matrix_synapse_media_store_path }}"
|
|
owner: "{{ matrix_user_username }}"
|
|
group: "{{ matrix_user_username }}"
|
|
recurse: yes
|
|
when: "not matrix_s3_media_store_enabled"
|
|
|
|
# We don't chown for Goofys, because due to the way it's mounted,
|
|
# all files become owned by whoever needs to own them.
|
|
|
|
- name: Ensure Matrix Synapse is started (if it previously was)
|
|
service:
|
|
name: "{{ item }}"
|
|
state: started
|
|
daemon_reload: yes
|
|
when: stopping_result.changed
|
|
with_items:
|
|
- matrix-synapse
|