--- # Pre-checks - name: Fail if Postgres not enabled fail: msg: "Postgres via the matrix-postgres role is not enabled (`matrix_postgres_enabled`). Cannot import." when: "not matrix_postgres_enabled" - name: Fail if playbook called incorrectly fail: msg: "The `server_path_homeserver_db` variable needs to be provided to this playbook, via --extra-vars" when: "server_path_homeserver_db is not defined or server_path_homeserver_db.startswith('<')" - name: Check if the provided SQLite homeserver.db file exists stat: path: "{{ server_path_homeserver_db }}" register: result_server_path_homeserver_db_stat - name: Fail if provided SQLite homeserver.db file doesn't exist fail: msg: "File cannot be found on the server at {{ server_path_homeserver_db }}" when: not result_server_path_homeserver_db_stat.stat.exists # Defaults - name: Set postgres_start_wait_time, if not provided set_fact: postgres_start_wait_time: 15 when: "postgres_start_wait_time|default('') == ''" # Actual import work - name: Ensure matrix-postgres is stopped service: name: matrix-postgres state: stopped daemon_reload: yes - name: Ensure postgres data is wiped out file: path: "{{ matrix_postgres_data_path }}" state: absent - name: Ensure postgres data path exists file: path: "{{ matrix_postgres_data_path }}" state: directory mode: 0700 owner: "{{ matrix_user_username }}" group: "{{ matrix_user_username }}" - name: Ensure matrix-postgres is started service: name: matrix-postgres 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 # If the actual migration command (below) fails, it will leave a container behind. # Starting it again later will relaunch that one, which may or may not work. # To ensure we're starting from a clean state, ensure any such leftovers are removed. - name: Cleanup any old leftover migration container docker_container: name: matrix-synapse-migrate state: absent - name: Importing SQLite database into Postgres docker_container: name: matrix-synapse-migrate image: "{{ matrix_synapse_docker_image }}" detach: no cleanup: yes entrypoint: /usr/local/bin/python command: "/usr/local/bin/synapse_port_db --sqlite-database {{ server_path_homeserver_db }} --postgres-config /data/homeserver.yaml" user: "{{ matrix_user_uid }}:{{ matrix_user_gid }}" volumes: - "{{ matrix_synapse_config_dir_path }}:/data" - "{{ matrix_synapse_run_path }}:/matrix-run" - "{{ server_path_homeserver_db }}:/{{ server_path_homeserver_db }}:ro" networks: - name: "{{ matrix_docker_network }}"