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.
125 lines
4.5 KiB
YAML
125 lines
4.5 KiB
YAML
---
|
|
|
|
- name: Set default postgres_dump_dir, if not provided
|
|
set_fact:
|
|
postgres_dump_dir: "/tmp"
|
|
when: "postgres_dump_dir|default('') == ''"
|
|
|
|
- name: Set postgres_dump_name, if not provided
|
|
set_fact:
|
|
postgres_dump_name: "matrix-postgres.out"
|
|
when: "postgres_dump_name|default('') == ''"
|
|
|
|
- name: Set postgres_auto_upgrade_backup_data_path, if not provided
|
|
set_fact:
|
|
postgres_auto_upgrade_backup_data_path: "{{ matrix_postgres_data_path }}-auto-upgrade-backup"
|
|
when: "postgres_auto_upgrade_backup_data_path|default('') == ''"
|
|
|
|
- name: Set postgres_start_wait_time, if not provided
|
|
set_fact:
|
|
postgres_start_wait_time: 15
|
|
when: "postgres_start_wait_time|default('') == ''"
|
|
|
|
- name: Fail, if trying to upgrade external Postgres database
|
|
fail:
|
|
msg: "Your configuration indicates that you're using an external Postgres database. Refusing to try and upgrade that."
|
|
when: "matrix_postgres_use_external"
|
|
|
|
- name: Check Postgres auto-upgrade backup data directory
|
|
stat:
|
|
path: "{{ postgres_auto_upgrade_backup_data_path }}"
|
|
register: result_auto_upgrade_path
|
|
|
|
- name: Abort, if existing Postgres auto-upgrade data path detected
|
|
fail:
|
|
msg: "Detected that a left-over {{ postgres_auto_upgrade_backup_data_path }} exists. You should rename it to {{ matrix_postgres_data_path }} if the previous upgrade went wrong, or delete it if it went well."
|
|
when: "result_auto_upgrade_path.stat.exists"
|
|
|
|
- import_tasks: tasks/util/detect_existing_postgres_version.yml
|
|
|
|
- name: Abort, if no existing Postgres version detected
|
|
fail:
|
|
msg: "Could not find existing Postgres installation"
|
|
when: "not matrix_postgres_detected_existing"
|
|
|
|
- name: Abort, if already at latest Postgres version
|
|
fail:
|
|
msg: "You are already running the latest Postgres version supported ({{ matrix_postgres_docker_image_latest }}). Nothing to do"
|
|
when: "matrix_postgres_detected_version_corresponding_docker_image == matrix_postgres_docker_image_latest"
|
|
|
|
- debug:
|
|
msg: "Upgrading database from {{ matrix_postgres_detected_version_corresponding_docker_image }} to {{ matrix_postgres_docker_image_latest }}"
|
|
|
|
- name: Ensure matrix-synapse is stopped
|
|
service:
|
|
name: matrix-synapse
|
|
state: stopped
|
|
|
|
- name: Ensure matrix-postgres is started
|
|
service:
|
|
name: matrix-postgres
|
|
state: started
|
|
daemon_reload: yes
|
|
|
|
- name: Wait a bit, so that Postgres can start
|
|
wait_for:
|
|
timeout: "{{ postgres_start_wait_time }}"
|
|
delegate_to: 127.0.0.1
|
|
become: false
|
|
|
|
- name: Perform Postgres database dump
|
|
command: |
|
|
/usr/bin/docker run --rm --name matrix-postgres-dump \
|
|
--network={{ matrix_docker_network }} \
|
|
--env-file={{ matrix_postgres_base_path }}/env-postgres-psql \
|
|
-v {{ postgres_dump_dir }}:/out \
|
|
{{ matrix_postgres_detected_version_corresponding_docker_image }} pg_dump -h matrix-postgres {{ matrix_postgres_db_name }} -f /out/{{ postgres_dump_name }}
|
|
|
|
- name: Ensure matrix-postgres is stopped
|
|
service:
|
|
name: matrix-postgres
|
|
state: stopped
|
|
|
|
- name: Rename existing Postgres data directory
|
|
command: "mv {{ matrix_postgres_data_path }} {{ postgres_auto_upgrade_backup_data_path }}"
|
|
|
|
- debug:
|
|
msg: "NOTE: Your Postgres data directory has been moved from `{{ matrix_postgres_data_path }}` to `{{ postgres_auto_upgrade_backup_data_path }}`. In the event of failure, you can move it back and run the playbook with --tags=setup-postgres to restore operation."
|
|
|
|
- import_tasks: tasks/setup_postgres.yml
|
|
|
|
- name: Ensure matrix-postgres autoruns and is restarted
|
|
service:
|
|
name: matrix-postgres
|
|
enabled: yes
|
|
state: restarted
|
|
daemon_reload: yes
|
|
|
|
- name: Wait a bit, so that Postgres can start
|
|
wait_for:
|
|
timeout: "{{ postgres_start_wait_time }}"
|
|
delegate_to: 127.0.0.1
|
|
become: false
|
|
|
|
- name: Perform Postgres database import
|
|
command: |
|
|
/usr/bin/docker run --rm --name matrix-postgres-import \
|
|
--network={{ matrix_docker_network }} \
|
|
--env-file={{ matrix_postgres_base_path }}/env-postgres-psql \
|
|
-v {{ postgres_dump_dir }}:/in:ro \
|
|
{{ matrix_postgres_docker_image_latest }} psql -v ON_ERROR_STOP=1 -h matrix-postgres -f /in/{{ postgres_dump_name }}
|
|
|
|
- name: Delete Postgres database dump file
|
|
file:
|
|
path: "{{ postgres_dump_dir }}/{{ postgres_dump_name }}"
|
|
state: absent
|
|
|
|
- name: Ensure matrix-synapse is started
|
|
service:
|
|
name: matrix-synapse
|
|
state: started
|
|
daemon_reload: yes
|
|
|
|
- debug:
|
|
msg: "NOTE: Your old Postgres data directory is preserved at `{{ postgres_auto_upgrade_backup_data_path }}`. You might want to get rid of it once you've confirmed that all is well."
|