ansible/test/integration/targets/postgresql_subscription/tasks/postgresql_subscription_initial.yml
Andrey Klychkov 22fe622589 postgresql_subscription: new module (#63661)
* postgresql_subscription: setup master-standby cluster into one container

* postgresql_subscription: setup master-standby cluster into one container, fix

* postgresql_subscription: setup master-standby cluster into one container, set up publication

* postgresql_subscription: setup master-standby cluster into one container, add module template

* postgresql_subscription: setup master-standby cluster into one container, fix tests

* postgresql_subscription: setup master-standby cluster into one container, create subscr via shell

* postgresql_subscription: setup replication, state stat

* postgresql_subscription: add basic present mode

* postgresql_subscription: add assertions

* postgresql_subscription: add samples

* postgresql_subscription: state absent, cascade

* postgresql_subscription: add owner param

* postgresql_subscription: update

* postgresql_subscription: refresh

* postgresql_subscription: doc, warns

* postgresql_subscription: relinfo

* postgresql_subscription: fixes

* postgresql_subscription: fix CI tests
2019-11-06 14:19:30 +00:00

697 lines
21 KiB
YAML

# Copyright: (c) 2019, Andrew Klychkov (@Andersson007) <aaklychkov@mail.ru>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
- vars:
task_parameters: &task_parameters
become_user: '{{ pg_user }}'
become: yes
register: result
pg_parameters: &pg_parameters
login_user: '{{ pg_user }}'
login_db: '{{ test_db }}'
block:
- name: Create roles to test owner parameter
<<: *task_parameters
postgresql_user:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ item }}'
role_attr_flags: SUPERUSER,LOGIN
loop:
- '{{ test_role1 }}'
- '{{ test_role2 }}'
####################
# Test mode: present
####################
- name: Create subscription
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
state: present
publications: '{{ test_pub }}'
connparams:
host: 127.0.0.1
port: '{{ master_port }}'
user: '{{ replication_role }}'
password: '{{ replication_pass }}'
dbname: '{{ test_db }}'
- assert:
that:
- result is changed
- result.name == '{{ test_subscription }}'
- result.queries == ["CREATE SUBSCRIPTION test CONNECTION 'host=127.0.0.1 port={{ master_port }} user={{ replication_role }} password={{ replication_pass }} dbname={{ test_db }}' PUBLICATION {{ test_pub }}"]
- result.exists == true
- result.initial_state == {}
- result.final_state.owner == '{{ pg_user }}'
- result.final_state.enabled == true
- result.final_state.publications == ["{{ test_pub }}"]
- result.final_state.synccommit == true
- result.final_state.slotname == '{{ test_subscription }}'
- result.final_state.conninfo.dbname == '{{ test_db }}'
- result.final_state.conninfo.host == '127.0.0.1'
- result.final_state.conninfo.port == {{ master_port }}
- result.final_state.conninfo.user == '{{ replication_role }}'
- result.final_state.conninfo.password == '{{ replication_pass }}'
#################
# Test mode: stat
#################
- name: Stat mode in check mode
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
state: stat
check_mode: yes
- assert:
that:
- result is not changed
- result.name == '{{ test_subscription }}'
- result.exists == true
- result.final_state == result.initial_state
- result.final_state.owner == '{{ pg_user }}'
- result.final_state.enabled == true
- result.final_state.publications == ["{{ test_pub }}"]
- result.final_state.synccommit == true
- result.final_state.slotname == '{{ test_subscription }}'
- result.final_state.conninfo.dbname == '{{ test_db }}'
- result.final_state.conninfo.host == '127.0.0.1'
- result.final_state.conninfo.port == {{ master_port }}
- result.final_state.conninfo.user == '{{ replication_role }}'
- result.final_state.conninfo.password == '{{ replication_pass }}'
- name: Stat mode
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
state: stat
- assert:
that:
- result is not changed
- result.name == '{{ test_subscription }}'
- result.exists == true
- result.final_state == result.initial_state
- result.final_state.owner == '{{ pg_user }}'
- result.final_state.enabled == true
- result.final_state.publications == ["{{ test_pub }}"]
- result.final_state.synccommit == true
- result.final_state.slotname == '{{ test_subscription }}'
- result.final_state.conninfo.dbname == '{{ test_db }}'
- result.final_state.conninfo.host == '127.0.0.1'
- result.final_state.conninfo.port == {{ master_port }}
- result.final_state.conninfo.user == '{{ replication_role }}'
- result.final_state.conninfo.password == '{{ replication_pass }}'
###################
# Test mode: absent
###################
- name: Drop subscription in check mode
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
state: absent
check_mode: yes
- assert:
that:
- result is changed
- result.queries == ["DROP SUBSCRIPTION {{ test_subscription }}"]
- result.final_state == result.initial_state
- name: Check the subscription exists
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
state: stat
- assert:
that:
- result is not changed
- result.name == '{{ test_subscription }}'
- result.exists == true
- name: Drop subscription
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
state: absent
- assert:
that:
- result is changed
- result.queries == ["DROP SUBSCRIPTION {{ test_subscription }}"]
- result.final_state != result.initial_state
- name: Check the subscription doesn't exist
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
state: stat
- assert:
that:
- result is not changed
- result.name == '{{ test_subscription }}'
- result.exists == false
##################
# Test owner param
##################
- name: Create with owner
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
state: present
publications: '{{ test_pub }}'
owner: '{{ test_role1 }}'
connparams:
host: 127.0.0.1
port: '{{ master_port }}'
user: '{{ replication_role }}'
password: '{{ replication_pass }}'
dbname: '{{ test_db }}'
- assert:
that:
- result.final_state.owner == '{{ test_role1 }}'
- result.queries[1] == 'ALTER SUBSCRIPTION {{ test_subscription }} OWNER TO "{{ test_role1 }}"'
- name: Try to set this owner again
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
state: present
publications: '{{ test_pub }}'
owner: '{{ test_role1 }}'
- assert:
that:
- result is not changed
- result.initial_state == result.final_state
- result.final_state.owner == '{{ test_role1 }}'
- name: Check owner
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
state: stat
- assert:
that:
- result is not changed
- result.name == '{{ test_subscription }}'
- result.exists == true
- result.initial_state.owner == '{{ test_role1 }}'
- name: Set another owner in check mode
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
state: present
publications: '{{ test_pub }}'
owner: '{{ test_role2 }}'
check_mode: yes
- assert:
that:
- result is changed
- result.initial_state == result.final_state
- result.final_state.owner == '{{ test_role1 }}'
- result.queries == ['ALTER SUBSCRIPTION {{ test_subscription }} OWNER TO "{{ test_role2 }}"']
- name: Check owner
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
state: stat
- assert:
that:
- result is not changed
- result.name == '{{ test_subscription }}'
- result.exists == true
- result.initial_state.owner == '{{ test_role1 }}'
- name: Set another owner
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
state: present
publications: '{{ test_pub }}'
owner: '{{ test_role2 }}'
- assert:
that:
- result is changed
- result.initial_state != result.final_state
- result.final_state.owner == '{{ test_role2 }}'
- result.queries == ['ALTER SUBSCRIPTION {{ test_subscription }} OWNER TO "{{ test_role2 }}"']
- name: Check owner
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
state: stat
- assert:
that:
- result is not changed
- result.name == '{{ test_subscription }}'
- result.exists == true
- result.initial_state.owner == '{{ test_role2 }}'
##############################
# Test cascade and owner param
##############################
- name: Drop subscription cascade in check mode
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
state: absent
cascade: yes
check_mode: yes
- assert:
that:
- result is changed
- result.queries == ["DROP SUBSCRIPTION {{ test_subscription }} CASCADE"]
- result.final_state == result.initial_state
- name: Check the subscription exists
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
state: stat
- assert:
that:
- result is not changed
- result.name == '{{ test_subscription }}'
- result.exists == true
- name: Drop subscription cascade
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
state: absent
cascade: yes
- assert:
that:
- result is changed
- result.queries == ["DROP SUBSCRIPTION {{ test_subscription }} CASCADE"]
- result.final_state != result.initial_state
- name: Check the subscription doesn't exist
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
state: stat
- assert:
that:
- result is not changed
- result.name == '{{ test_subscription }}'
- result.exists == false
###########################
# Test subsparams parameter
###########################
- name: Create subscription with subsparams
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
state: present
publications: '{{ test_pub }}'
connparams:
host: 127.0.0.1
port: '{{ master_port }}'
user: '{{ replication_role }}'
password: '{{ replication_pass }}'
dbname: '{{ test_db }}'
subsparams:
enabled: no
synchronous_commit: no
- assert:
that:
- result is changed
- result.name == '{{ test_subscription }}'
- result.queries == ["CREATE SUBSCRIPTION test CONNECTION 'host=127.0.0.1 port={{ master_port }} user={{ replication_role }} password={{ replication_pass }} dbname={{ test_db }}' PUBLICATION {{ test_pub }} WITH (enabled = false, synchronous_commit = false)"]
- result.exists == true
- result.final_state.enabled == false
- result.final_state.synccommit == false
- name: Stat mode
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
state: stat
- assert:
that:
- result.name == '{{ test_subscription }}'
- result.final_state.enabled == false
- result.final_state.synccommit == false
- name: Enable changed params
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
publications: '{{ test_pub }}'
subsparams:
enabled: yes
synchronous_commit: yes
- assert:
that:
- result is changed
- result.name == '{{ test_subscription }}'
- result.queries == ["ALTER SUBSCRIPTION {{ test_subscription }} ENABLE", "ALTER SUBSCRIPTION {{ test_subscription }} SET (synchronous_commit = true)"]
- result.exists == true
- result.final_state.enabled == true
- result.final_state.synccommit == true
- name: Stat mode
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
state: stat
- assert:
that:
- result.name == '{{ test_subscription }}'
- result.final_state.enabled == true
- result.final_state.synccommit == true
- name: Enable the same params again
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
publications: '{{ test_pub }}'
subsparams:
enabled: yes
synchronous_commit: yes
- assert:
that:
- result is not changed
- result.name == '{{ test_subscription }}'
- result.queries == []
- result.exists == true
- result.final_state == result.initial_state
- result.final_state.enabled == true
- result.final_state.synccommit == true
##########################
# Test change publications
##########################
- name: Change publications in check mode
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
state: present
publications:
- '{{ test_pub }}'
- '{{ test_pub2 }}'
check_mode: yes
- assert:
that:
- result is changed
- result.name == '{{ test_subscription }}'
- result.final_state.publications == result.initial_state.publications
- result.final_state.publications == ['{{ test_pub }}']
- result.queries == ['ALTER SUBSCRIPTION {{ test_subscription }} SET PUBLICATION {{ test_pub }}, {{ test_pub2 }}']
- name: Check publications
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
state: stat
- assert:
that:
- result.name == '{{ test_subscription }}'
- result.final_state.publications == ['{{ test_pub }}']
- name: Change publications
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
state: present
publications:
- '{{ test_pub }}'
- '{{ test_pub2 }}'
- assert:
that:
- result is changed
- result.name == '{{ test_subscription }}'
- result.final_state.publications != result.initial_state.publications
- result.final_state.publications == ['{{ test_pub }}', '{{ test_pub2 }}']
- result.queries == ['ALTER SUBSCRIPTION {{ test_subscription }} SET PUBLICATION {{ test_pub }}, {{ test_pub2 }}']
- name: Check publications
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
state: stat
- assert:
that:
- result.name == '{{ test_subscription }}'
- result.final_state.publications == ['{{ test_pub }}', '{{ test_pub2 }}']
- name: Change publications with the same values again
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
state: present
publications:
- '{{ test_pub }}'
- '{{ test_pub2 }}'
- assert:
that:
- result is not changed
- result.name == '{{ test_subscription }}'
- result.final_state.publications == result.initial_state.publications
- result.final_state.publications == ['{{ test_pub }}', '{{ test_pub2 }}']
- result.queries == []
######################
# Test update conninfo
######################
- name: Change conninfo in check mode
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
state: present
connparams:
host: 127.0.0.1
port: '{{ master_port }}'
user: '{{ replication_role }}'
password: '{{ replication_pass }}'
dbname: '{{ test_db }}'
connect_timeout: '{{ conn_timeout }}'
check_mode: yes
- assert:
that:
- result is changed
- result.name == '{{ test_subscription }}'
- result.queries == ["ALTER SUBSCRIPTION {{ test_subscription }} CONNECTION 'host=127.0.0.1 port={{ master_port }} user={{ replication_role }} password={{ replication_pass }} dbname={{ test_db }} connect_timeout={{ conn_timeout }}'"]
- result.initial_state.conninfo == result.final_state.conninfo
- name: Change conninfo
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
state: present
relinfo: yes
connparams:
host: 127.0.0.1
port: '{{ master_port }}'
user: '{{ replication_role }}'
password: '{{ replication_pass }}'
dbname: '{{ test_db }}'
connect_timeout: '{{ conn_timeout }}'
- assert:
that:
- result is changed
- result.name == '{{ test_subscription }}'
- result.queries == ["ALTER SUBSCRIPTION {{ test_subscription }} CONNECTION 'host=127.0.0.1 port={{ master_port }} user={{ replication_role }} password={{ replication_pass }} dbname={{ test_db }} connect_timeout={{ conn_timeout }}'"]
- result.initial_state.conninfo != result.final_state.conninfo
- name: Check publications
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
state: stat
- assert:
that:
- result.name == '{{ test_subscription }}'
- result.final_state.conninfo.connect_timeout == {{ conn_timeout }}
- name: Try to change conninfo again with the same values
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
state: present
connparams:
host: 127.0.0.1
port: '{{ master_port }}'
user: '{{ replication_role }}'
password: '{{ replication_pass }}'
dbname: '{{ test_db }}'
connect_timeout: '{{ conn_timeout }}'
- assert:
that:
- result is not changed
- result.name == '{{ test_subscription }}'
- result.queries == []
- result.initial_state.conninfo == result.final_state.conninfo
- result.final_state.conninfo.connect_timeout == {{ conn_timeout }}
####################
# Test state refresh
####################
- name: Refresh in check mode
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
state: refresh
check_mode: yes
- assert:
that:
- result is changed
- result.name == '{{ test_subscription }}'
- result.queries == ["ALTER SUBSCRIPTION {{ test_subscription }} REFRESH PUBLICATION"]
- name: Refresh
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
state: refresh
- assert:
that:
- result is changed
- result.name == '{{ test_subscription }}'
- result.queries == ["ALTER SUBSCRIPTION {{ test_subscription }} REFRESH PUBLICATION"]
####################
# Test relinfo param
####################
- name: Get relinfo
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
state: stat
relinfo: yes
- assert:
that:
- result.name == '{{ test_subscription }}'
- result.final_state.relinfo[0].relname == '{{ test_table1 }}'
- result.final_state == result.initial_state
##########
# Clean up
##########
- name: Drop subscription
<<: *task_parameters
postgresql_subscription:
<<: *pg_parameters
login_port: '{{ replica_port }}'
name: '{{ test_subscription }}'
state: absent