527d5f57d5
Moving it above the "uninstalling" set of tasks is better. Extracting it out to another file at the same time, for readability, especially given that it will probably have to become more complex in the future (potentially installing `jq`, etc.)
172 lines
6.5 KiB
YAML
172 lines
6.5 KiB
YAML
---
|
|
|
|
#
|
|
# Tasks related to setting up an internal postgres server
|
|
#
|
|
|
|
- import_tasks: "{{ role_path }}/tasks/migrate_postgres_data_directory.yml"
|
|
when: matrix_postgres_enabled|bool
|
|
|
|
- import_tasks: "{{ role_path }}/tasks/util/detect_existing_postgres_version.yml"
|
|
when: matrix_postgres_enabled|bool
|
|
|
|
# If we have found an existing version (installed from before), we use its corresponding Docker image.
|
|
# If not, we install using the latest Postgres.
|
|
#
|
|
# Upgrading is supposed to be performed separately and explicitly (see `upgrade_postgres.yml`).
|
|
- set_fact:
|
|
matrix_postgres_docker_image_to_use: "{{ matrix_postgres_docker_image_latest if matrix_postgres_detected_version_corresponding_docker_image == '' else matrix_postgres_detected_version_corresponding_docker_image }}"
|
|
when: matrix_postgres_enabled|bool
|
|
|
|
- name: Inject warning if on an old version of Postgres
|
|
set_fact:
|
|
matrix_playbook_runtime_results: |
|
|
{{
|
|
matrix_playbook_runtime_results|default([])
|
|
+
|
|
[
|
|
"NOTE: Your setup is on an old Postgres version ({{ matrix_postgres_docker_image_to_use }}), while {{ matrix_postgres_docker_image_latest }} is supported. You can upgrade using --tags=upgrade-postgres"
|
|
]
|
|
}}
|
|
when: "matrix_postgres_enabled|bool and matrix_postgres_docker_image_to_use != matrix_postgres_docker_image_latest"
|
|
|
|
# Even if we don't run the internal server, we still need this for running the CLI
|
|
- name: Ensure postgres Docker image is pulled
|
|
docker_image:
|
|
name: "{{ matrix_postgres_docker_image_to_use }}"
|
|
source: "{{ 'pull' if ansible_version.major > 2 or ansible_version.minor > 7 else omit }}"
|
|
force_source: "{{ matrix_postgres_docker_image_force_pull if ansible_version.major > 2 or ansible_version.minor >= 8 else omit }}"
|
|
force: "{{ omit if ansible_version.major > 2 or ansible_version.minor >= 8 else matrix_postgres_docker_image_force_pull }}"
|
|
when: matrix_postgres_enabled|bool
|
|
|
|
- name: Ensure Postgres paths exist
|
|
file:
|
|
path: "{{ item }}"
|
|
state: directory
|
|
mode: 0700
|
|
owner: "{{ matrix_user_username }}"
|
|
group: "{{ matrix_user_groupname }}"
|
|
with_items:
|
|
- "{{ matrix_postgres_base_path }}"
|
|
- "{{ matrix_postgres_data_path }}"
|
|
when: matrix_postgres_enabled|bool
|
|
|
|
# We do this as a separate task, because:
|
|
# - we'd like to do it for the data path only, not for the base path (which contains root-owned environment variable files we'd like to leave as-is)
|
|
# - we need to do it without `mode`, or we risk making certain `.conf` and other files's executable bit to flip to true
|
|
- name: Ensure Postgres data path ownership is correct
|
|
file:
|
|
path: "{{ matrix_postgres_data_path }}"
|
|
state: directory
|
|
owner: "{{ matrix_user_username }}"
|
|
group: "{{ matrix_user_groupname }}"
|
|
recurse: yes
|
|
when: matrix_postgres_enabled|bool
|
|
|
|
- name: Ensure Postgres environment variables file created
|
|
template:
|
|
src: "{{ role_path }}/templates/{{ item }}.j2"
|
|
dest: "{{ matrix_postgres_base_path }}/{{ item }}"
|
|
mode: 0640
|
|
with_items:
|
|
- "env-postgres-psql"
|
|
- "env-postgres-server"
|
|
when: matrix_postgres_enabled|bool
|
|
|
|
- name: Ensure matrix-postgres-cli script created
|
|
template:
|
|
src: "{{ role_path }}/templates/usr-local-bin/matrix-postgres-cli.j2"
|
|
dest: "{{ matrix_local_bin_path }}/matrix-postgres-cli"
|
|
mode: 0750
|
|
when: matrix_postgres_enabled|bool
|
|
|
|
- name: Ensure matrix-change-user-admin-status script created
|
|
template:
|
|
src: "{{ role_path }}/templates/usr-local-bin/matrix-change-user-admin-status.j2"
|
|
dest: "{{ matrix_local_bin_path }}/matrix-change-user-admin-status"
|
|
mode: 0750
|
|
when: matrix_postgres_enabled|bool
|
|
|
|
- name: (Migration) Ensure old matrix-make-user-admin script deleted
|
|
file:
|
|
path: "{{ matrix_local_bin_path }}/matrix-make-user-admin"
|
|
state: absent
|
|
when: matrix_postgres_enabled|bool
|
|
|
|
- name: Ensure matrix-postgres-update-user-password-hash script created
|
|
template:
|
|
src: "{{ role_path }}/templates/usr-local-bin/matrix-postgres-update-user-password-hash.j2"
|
|
dest: "{{ matrix_local_bin_path }}/matrix-postgres-update-user-password-hash"
|
|
mode: 0750
|
|
when: matrix_postgres_enabled|bool
|
|
|
|
- name: Ensure matrix-postgres.service installed
|
|
template:
|
|
src: "{{ role_path }}/templates/systemd/matrix-postgres.service.j2"
|
|
dest: "{{ matrix_systemd_path }}/matrix-postgres.service"
|
|
mode: 0644
|
|
register: matrix_postgres_systemd_service_result
|
|
when: matrix_postgres_enabled|bool
|
|
|
|
- name: Ensure systemd reloaded after matrix-postgres.service installation
|
|
service:
|
|
daemon_reload: yes
|
|
when: "matrix_postgres_enabled|bool and matrix_postgres_systemd_service_result.changed"
|
|
|
|
- include_tasks:
|
|
file: "{{ role_path }}/tasks/util/create_additional_databases.yml"
|
|
apply:
|
|
tags:
|
|
- always
|
|
when: "matrix_postgres_enabled|bool"
|
|
|
|
#
|
|
# Tasks related to getting rid of the internal postgres server (if it was previously enabled)
|
|
#
|
|
|
|
- name: Check existence of matrix-postgres service
|
|
stat:
|
|
path: "{{ matrix_systemd_path }}/matrix-postgres.service"
|
|
register: matrix_postgres_service_stat
|
|
when: "not matrix_postgres_enabled|bool"
|
|
|
|
- name: Ensure matrix-postgres is stopped
|
|
service:
|
|
name: matrix-postgres
|
|
state: stopped
|
|
daemon_reload: yes
|
|
when: "not matrix_postgres_enabled|bool and matrix_postgres_service_stat.stat.exists"
|
|
|
|
- name: Ensure matrix-postgres.service doesn't exist
|
|
file:
|
|
path: "{{ matrix_systemd_path }}/matrix-postgres.service"
|
|
state: absent
|
|
when: "not matrix_postgres_enabled|bool and matrix_postgres_service_stat.stat.exists"
|
|
|
|
- name: Ensure systemd reloaded after matrix-postgres.service removal
|
|
service:
|
|
daemon_reload: yes
|
|
when: "not matrix_postgres_enabled|bool and matrix_postgres_service_stat.stat.exists"
|
|
|
|
- name: Check existence of matrix-postgres local data path
|
|
stat:
|
|
path: "{{ matrix_postgres_data_path }}"
|
|
register: matrix_postgres_data_path_stat
|
|
when: "not matrix_postgres_enabled|bool"
|
|
|
|
# We just want to notify the user. Deleting data is too destructive.
|
|
- name: Notify if matrix-postgres local data remains
|
|
debug:
|
|
msg: "Note: You are not using a local PostgreSQL database, but some old data remains from before in `{{ matrix_postgres_data_path }}`. Feel free to delete it."
|
|
when: "not matrix_postgres_enabled|bool and matrix_postgres_data_path_stat.stat.exists"
|
|
|
|
- name: Remove Postgres scripts
|
|
file:
|
|
path: "{{ matrix_local_bin_path }}/{{ item }}"
|
|
state: absent
|
|
with_items:
|
|
- matrix-postgres-cli
|
|
- matrix-change-user-admin-status
|
|
- matrix-postgres-update-user-password-hash
|
|
when: "not matrix_postgres_enabled|bool"
|