- become_user: '{{ pg_user }}' become: true vars: db_tablespace: bar tblspc_location: /ssd db_name: acme block_parameters: become_user: '{{ pg_user }}' become: true task_parameters: register: result pg_parameters: login_user: '{{ pg_user }}' block: - name: postgresql_db - drop dir for test tablespace become: true become_user: root file: path: '{{ tblspc_location }}' state: absent ignore_errors: true - name: postgresql_db - disable selinux become: true become_user: root shell: setenforce 0 ignore_errors: true - name: postgresql_db - create dir for test tablespace become: true become_user: root file: path: '{{ tblspc_location }}' state: directory owner: '{{ pg_user }}' group: '{{ pg_user }}' mode: '0700' - name: postgresql_db_ - create a new tablespace postgresql_tablespace: login_user: '{{ pg_user }}' login_db: postgres name: '{{ db_tablespace }}' location: '{{ tblspc_location }}' - register: result name: postgresql_db_tablespace - Create DB with tablespace option in check mode check_mode: true postgresql_db: login_user: '{{ pg_user }}' maintenance_db: postgres name: '{{ db_name }}' tablespace: '{{ db_tablespace }}' - assert: that: - result is changed - register: result name: postgresql_db_tablespace - Check actual DB tablespace, rowcount must be 0 because actually nothing changed postgresql_query: login_user: '{{ pg_user }}' login_db: postgres query: 'SELECT 1 FROM pg_database AS d JOIN pg_tablespace AS t ON d.dattablespace = t.oid WHERE d.datname = ''{{ db_name }}'' AND t.spcname = ''{{ db_tablespace }}'' ' - assert: that: - result.rowcount == 0 - register: result name: postgresql_db_tablespace - Create DB with tablespace option postgresql_db: login_user: '{{ pg_user }}' maintenance_db: postgres name: '{{ db_name }}' tablespace: '{{ db_tablespace }}' - assert: that: - result is changed - result.executed_commands == ['CREATE DATABASE "{{ db_name }}" TABLESPACE "{{ db_tablespace }}"'] - register: result name: postgresql_db_tablespace - Check actual DB tablespace, rowcount must be 1 postgresql_query: login_user: '{{ pg_user }}' login_db: postgres query: 'SELECT 1 FROM pg_database AS d JOIN pg_tablespace AS t ON d.dattablespace = t.oid WHERE d.datname = ''{{ db_name }}'' AND t.spcname = ''{{ db_tablespace }}'' ' - assert: that: - result.rowcount == 1 - register: result name: postgresql_db_tablespace - The same DB with tablespace option again postgresql_db: login_user: '{{ pg_user }}' maintenance_db: postgres name: '{{ db_name }}' tablespace: '{{ db_tablespace }}' - assert: that: - result is not changed - register: result name: postgresql_db_tablespace - Change tablespace in check_mode check_mode: true postgresql_db: login_user: '{{ pg_user }}' maintenance_db: postgres name: '{{ db_name }}' tablespace: pg_default - assert: that: - result is changed - register: result name: postgresql_db_tablespace - Check actual DB tablespace, rowcount must be 1 because actually nothing changed postgresql_query: login_user: '{{ pg_user }}' login_db: postgres query: 'SELECT 1 FROM pg_database AS d JOIN pg_tablespace AS t ON d.dattablespace = t.oid WHERE d.datname = ''{{ db_name }}'' AND t.spcname = ''{{ db_tablespace }}'' ' - assert: that: - result.rowcount == 1 - register: result name: postgresql_db_tablespace - Change tablespace in actual mode postgresql_db: login_user: '{{ pg_user }}' maintenance_db: postgres name: '{{ db_name }}' tablespace: pg_default - assert: that: - result is changed - register: result name: postgresql_db_tablespace - Check actual DB tablespace, rowcount must be 1 postgresql_query: login_user: '{{ pg_user }}' login_db: postgres query: 'SELECT 1 FROM pg_database AS d JOIN pg_tablespace AS t ON d.dattablespace = t.oid WHERE d.datname = ''{{ db_name }}'' AND t.spcname = ''pg_default'' ' - assert: that: - result.rowcount == 1 - register: result name: postgresql_db_tablespace - Drop test DB postgresql_db: login_user: '{{ pg_user }}' maintenance_db: postgres name: '{{ db_name }}' state: absent - register: result name: postgresql_db_tablespace - Remove tablespace postgresql_tablespace: login_user: '{{ pg_user }}' login_db: postgres name: '{{ db_tablespace }}' state: absent