mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-08-06 14:14:22 -07:00
Initial commit
This commit is contained in:
commit
aebc1b03fd
4861 changed files with 812621 additions and 0 deletions
5
tests/integration/targets/postgresql_db/aliases
Normal file
5
tests/integration/targets/postgresql_db/aliases
Normal file
|
@ -0,0 +1,5 @@
|
|||
destructive
|
||||
shippable/posix/group4
|
||||
postgresql_db
|
||||
skip/aix
|
||||
skip/osx
|
|
@ -0,0 +1,6 @@
|
|||
db_name: 'ansible_db'
|
||||
db_user1: 'ansible.db.user1'
|
||||
db_user2: 'ansible.db.user2'
|
||||
tmp_dir: '/tmp'
|
||||
db_session_role1: 'session_role1'
|
||||
db_session_role2: 'session_role2'
|
2
tests/integration/targets/postgresql_db/meta/main.yml
Normal file
2
tests/integration/targets/postgresql_db/meta/main.yml
Normal file
|
@ -0,0 +1,2 @@
|
|||
dependencies:
|
||||
- setup_postgresql_db
|
31
tests/integration/targets/postgresql_db/tasks/main.yml
Normal file
31
tests/integration/targets/postgresql_db/tasks/main.yml
Normal file
|
@ -0,0 +1,31 @@
|
|||
- import_tasks: postgresql_db_session_role.yml
|
||||
|
||||
# Initial tests of postgresql_db module:
|
||||
- import_tasks: postgresql_db_initial.yml
|
||||
|
||||
# General tests:
|
||||
- import_tasks: postgresql_db_general.yml
|
||||
|
||||
# Dump/restore tests per format:
|
||||
- include_tasks: state_dump_restore.yml
|
||||
vars:
|
||||
test_fixture: user
|
||||
file: '{{ loop_item }}'
|
||||
loop:
|
||||
- dbdata.sql
|
||||
- dbdata.sql.gz
|
||||
- dbdata.sql.bz2
|
||||
- dbdata.sql.xz
|
||||
- dbdata.tar
|
||||
- dbdata.tar.gz
|
||||
- dbdata.tar.bz2
|
||||
- dbdata.tar.xz
|
||||
- dbdata.pgc
|
||||
loop_control:
|
||||
loop_var: loop_item
|
||||
|
||||
# Dump/restore tests per other logins:
|
||||
- import_tasks: state_dump_restore.yml
|
||||
vars:
|
||||
file: dbdata.tar
|
||||
test_fixture: admin
|
|
@ -0,0 +1,152 @@
|
|||
- 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
|
|
@ -0,0 +1,366 @@
|
|||
#
|
||||
# Create and destroy db
|
||||
#
|
||||
- name: Create DB
|
||||
become_user: "{{ pg_user }}"
|
||||
become: yes
|
||||
postgresql_db:
|
||||
state: present
|
||||
name: "{{ db_name }}"
|
||||
login_user: "{{ pg_user }}"
|
||||
register: result
|
||||
|
||||
- name: assert that module reports the db was created
|
||||
assert:
|
||||
that:
|
||||
- result is changed
|
||||
- result.db == "{{ db_name }}"
|
||||
- result.executed_commands == ['CREATE DATABASE "{{ db_name }}"']
|
||||
|
||||
- name: Check that database created
|
||||
become_user: "{{ pg_user }}"
|
||||
become: yes
|
||||
shell: echo "select datname from pg_database where datname = '{{ db_name }}';" | psql -d postgres
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- "result.stdout_lines[-1] == '(1 row)'"
|
||||
|
||||
- name: Run create on an already created db
|
||||
become_user: "{{ pg_user }}"
|
||||
become: yes
|
||||
postgresql_db:
|
||||
state: present
|
||||
name: "{{ db_name }}"
|
||||
login_user: "{{ pg_user }}"
|
||||
register: result
|
||||
|
||||
- name: assert that module reports the db was unchanged
|
||||
assert:
|
||||
that:
|
||||
- result is not changed
|
||||
|
||||
- name: Destroy DB
|
||||
become_user: "{{ pg_user }}"
|
||||
become: yes
|
||||
postgresql_db:
|
||||
state: absent
|
||||
name: "{{ db_name }}"
|
||||
login_user: "{{ pg_user }}"
|
||||
register: result
|
||||
|
||||
- name: assert that module reports the db was changed
|
||||
assert:
|
||||
that:
|
||||
- result is changed
|
||||
- result.executed_commands == ['DROP DATABASE "{{ db_name }}"']
|
||||
|
||||
- name: Check that database was destroyed
|
||||
become_user: "{{ pg_user }}"
|
||||
become: yes
|
||||
shell: echo "select datname from pg_database where datname = '{{ db_name }}';" | psql -d postgres
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- "result.stdout_lines[-1] == '(0 rows)'"
|
||||
|
||||
- name: Destroy DB
|
||||
become_user: "{{ pg_user }}"
|
||||
become: yes
|
||||
postgresql_db:
|
||||
state: absent
|
||||
name: "{{ db_name }}"
|
||||
login_user: "{{ pg_user }}"
|
||||
register: result
|
||||
|
||||
- name: assert that removing an already removed db makes no change
|
||||
assert:
|
||||
that:
|
||||
- result is not changed
|
||||
|
||||
|
||||
# This corner case works to add but not to drop. This is sufficiently crazy
|
||||
# that I'm not going to attempt to fix it unless someone lets me know that they
|
||||
# need the functionality
|
||||
#
|
||||
# - postgresql_db:
|
||||
# state: 'present'
|
||||
# name: '"silly.""name"'
|
||||
# - shell: echo "select datname from pg_database where datname = 'silly.""name';" | psql
|
||||
# register: result
|
||||
#
|
||||
# - assert:
|
||||
# that: "result.stdout_lines[-1] == '(1 row)'"
|
||||
# - postgresql_db:
|
||||
# state: absent
|
||||
# name: '"silly.""name"'
|
||||
# - shell: echo "select datname from pg_database where datname = 'silly.""name';" | psql
|
||||
# register: result
|
||||
#
|
||||
# - assert:
|
||||
# that: "result.stdout_lines[-1] == '(0 rows)'"
|
||||
|
||||
#
|
||||
# Test conn_limit, encoding, collate, ctype, template options
|
||||
#
|
||||
- name: Create a DB with conn_limit, encoding, collate, ctype, and template options
|
||||
become_user: "{{ pg_user }}"
|
||||
become: yes
|
||||
postgresql_db:
|
||||
name: '{{ db_name }}'
|
||||
state: 'present'
|
||||
conn_limit: '100'
|
||||
encoding: 'LATIN1'
|
||||
lc_collate: 'pt_BR{{ locale_latin_suffix }}'
|
||||
lc_ctype: 'es_ES{{ locale_latin_suffix }}'
|
||||
template: 'template0'
|
||||
login_user: "{{ pg_user }}"
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is changed
|
||||
- result.executed_commands == ["CREATE DATABASE \"{{ db_name }}\" TEMPLATE \"template0\" ENCODING 'LATIN1' LC_COLLATE 'pt_BR{{ locale_latin_suffix }}' LC_CTYPE 'es_ES{{ locale_latin_suffix }}' CONNECTION LIMIT 100"] or result.executed_commands == ["CREATE DATABASE \"{{ db_name }}\" TEMPLATE \"template0\" ENCODING E'LATIN1' LC_COLLATE E'pt_BR{{ locale_latin_suffix }}' LC_CTYPE E'es_ES{{ locale_latin_suffix }}' CONNECTION LIMIT 100"]
|
||||
|
||||
- name: Check that the DB has all of our options
|
||||
become_user: "{{ pg_user }}"
|
||||
become: yes
|
||||
shell: echo "select datname, datconnlimit, pg_encoding_to_char(encoding), datcollate, datctype from pg_database where datname = '{{ db_name }}';" | psql -d postgres
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- "result.stdout_lines[-1] == '(1 row)'"
|
||||
- "'LATIN1' in result.stdout_lines[-2]"
|
||||
- "'pt_BR' in result.stdout_lines[-2]"
|
||||
- "'es_ES' in result.stdout_lines[-2]"
|
||||
- "'UTF8' not in result.stdout_lines[-2]"
|
||||
- "'en_US' not in result.stdout_lines[-2]"
|
||||
- "'100' in result.stdout_lines[-2]"
|
||||
|
||||
- name: Check that running db creation with options a second time does nothing
|
||||
become_user: "{{ pg_user }}"
|
||||
become: yes
|
||||
postgresql_db:
|
||||
name: '{{ db_name }}'
|
||||
state: 'present'
|
||||
conn_limit: '100'
|
||||
encoding: 'LATIN1'
|
||||
lc_collate: 'pt_BR{{ locale_latin_suffix }}'
|
||||
lc_ctype: 'es_ES{{ locale_latin_suffix }}'
|
||||
template: 'template0'
|
||||
login_user: "{{ pg_user }}"
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is not changed
|
||||
|
||||
|
||||
- name: Check that attempting to change encoding returns an error
|
||||
become_user: "{{ pg_user }}"
|
||||
become: yes
|
||||
postgresql_db:
|
||||
name: '{{ db_name }}'
|
||||
state: 'present'
|
||||
encoding: 'UTF8'
|
||||
lc_collate: 'pt_BR{{ locale_utf8_suffix }}'
|
||||
lc_ctype: 'es_ES{{ locale_utf8_suffix }}'
|
||||
template: 'template0'
|
||||
login_user: "{{ pg_user }}"
|
||||
register: result
|
||||
ignore_errors: yes
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is failed
|
||||
|
||||
- name: Check that changing the conn_limit actually works
|
||||
become_user: "{{ pg_user }}"
|
||||
become: yes
|
||||
postgresql_db:
|
||||
name: '{{ db_name }}'
|
||||
state: 'present'
|
||||
conn_limit: '200'
|
||||
encoding: 'LATIN1'
|
||||
lc_collate: 'pt_BR{{ locale_latin_suffix }}'
|
||||
lc_ctype: 'es_ES{{ locale_latin_suffix }}'
|
||||
template: 'template0'
|
||||
login_user: "{{ pg_user }}"
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is changed
|
||||
- result.executed_commands == ['ALTER DATABASE "{{ db_name }}" CONNECTION LIMIT 200']
|
||||
|
||||
- name: Check that conn_limit has actually been set / updated to 200
|
||||
become_user: "{{ pg_user }}"
|
||||
become: yes
|
||||
shell: echo "SELECT datconnlimit AS conn_limit FROM pg_database WHERE datname = '{{ db_name }}';" | psql -d postgres
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- "result.stdout_lines[-1] == '(1 row)'"
|
||||
- "'200' == '{{ result.stdout_lines[-2] | trim }}'"
|
||||
|
||||
- name: Cleanup test DB
|
||||
become_user: "{{ pg_user }}"
|
||||
become: yes
|
||||
postgresql_db:
|
||||
name: '{{ db_name }}'
|
||||
state: 'absent'
|
||||
login_user: "{{ pg_user }}"
|
||||
|
||||
- shell: echo "select datname, pg_encoding_to_char(encoding), datcollate, datctype from pg_database where datname = '{{ db_name }}';" | psql -d postgres
|
||||
become_user: "{{ pg_user }}"
|
||||
become: yes
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- "result.stdout_lines[-1] == '(0 rows)'"
|
||||
|
||||
#
|
||||
# Test db ownership
|
||||
#
|
||||
- name: Create an unprivileged user to own a DB
|
||||
become_user: "{{ pg_user }}"
|
||||
become: yes
|
||||
postgresql_user:
|
||||
name: "{{ item }}"
|
||||
encrypted: 'yes'
|
||||
password: "md55c8ccfd9d6711fc69a7eae647fc54f51"
|
||||
login_user: "{{ pg_user }}"
|
||||
db: postgres
|
||||
loop:
|
||||
- "{{ db_user1 }}"
|
||||
- "{{ db_user2 }}"
|
||||
|
||||
- name: Create db with user ownership
|
||||
become_user: "{{ pg_user }}"
|
||||
become: yes
|
||||
postgresql_db:
|
||||
name: "{{ db_name }}"
|
||||
state: "present"
|
||||
owner: "{{ db_user1 }}"
|
||||
login_user: "{{ pg_user }}"
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is changed
|
||||
- result.executed_commands == ['CREATE DATABASE "{{ db_name }}" OWNER "{{ db_user1 }}"']
|
||||
|
||||
- name: Check that the user owns the newly created DB
|
||||
become_user: "{{ pg_user }}"
|
||||
become: yes
|
||||
postgresql_query:
|
||||
db: postgres
|
||||
login_user: "{{ pg_user }}"
|
||||
query: >
|
||||
SELECT 1 FROM pg_catalog.pg_database
|
||||
WHERE datname = '{{ db_name }}'
|
||||
AND pg_catalog.pg_get_userbyid(datdba) = '{{ db_user1 }}'
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result.rowcount == 1
|
||||
|
||||
- name: Change the owner on an existing db, username with dots
|
||||
become_user: "{{ pg_user }}"
|
||||
become: yes
|
||||
postgresql_db:
|
||||
name: "{{ db_name }}"
|
||||
state: "present"
|
||||
owner: "{{ db_user2 }}"
|
||||
login_user: "{{ pg_user }}"
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is changed
|
||||
- result.executed_commands == ['ALTER DATABASE "{{ db_name }}" OWNER TO "{{ db_user2 }}"']
|
||||
|
||||
- name: Check the previous step
|
||||
become_user: "{{ pg_user }}"
|
||||
become: yes
|
||||
postgresql_query:
|
||||
login_user: "{{ pg_user }}"
|
||||
db: postgres
|
||||
query: >
|
||||
SELECT 1 FROM pg_catalog.pg_database
|
||||
WHERE datname = '{{ db_name }}'
|
||||
AND pg_catalog.pg_get_userbyid(datdba) = '{{ db_user2 }}'
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result.rowcount == 1
|
||||
|
||||
- name: Change the owner on an existing db
|
||||
become_user: "{{ pg_user }}"
|
||||
become: yes
|
||||
postgresql_db:
|
||||
name: "{{ db_name }}"
|
||||
state: "present"
|
||||
owner: "{{ pg_user }}"
|
||||
login_user: "{{ pg_user }}"
|
||||
register: result
|
||||
|
||||
- name: assert that ansible says it changed the db
|
||||
assert:
|
||||
that:
|
||||
- result is changed
|
||||
|
||||
- name: Check that the user owns the newly created DB
|
||||
become_user: "{{ pg_user }}"
|
||||
become: yes
|
||||
shell: echo "select pg_catalog.pg_get_userbyid(datdba) from pg_catalog.pg_database where datname = '{{ db_name }}';" | psql -d postgres
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- "result.stdout_lines[-1] == '(1 row)'"
|
||||
- "'{{ pg_user }}' == '{{ result.stdout_lines[-2] | trim }}'"
|
||||
|
||||
- name: Cleanup db
|
||||
become_user: "{{ pg_user }}"
|
||||
become: yes
|
||||
postgresql_db:
|
||||
name: "{{ db_name }}"
|
||||
state: "absent"
|
||||
login_user: "{{ pg_user }}"
|
||||
|
||||
- name: Check that database was destroyed
|
||||
become_user: "{{ pg_user }}"
|
||||
become: yes
|
||||
shell: echo "select datname from pg_database where datname = '{{ db_name }}';" | psql -d postgres
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- "result.stdout_lines[-1] == '(0 rows)'"
|
||||
|
||||
- name: Cleanup test user
|
||||
become_user: "{{ pg_user }}"
|
||||
become: yes
|
||||
postgresql_user:
|
||||
name: "{{ db_user1 }}"
|
||||
state: 'absent'
|
||||
login_user: "{{ pg_user }}"
|
||||
db: postgres
|
||||
|
||||
- name: Check that they were removed
|
||||
become_user: "{{ pg_user }}"
|
||||
become: yes
|
||||
shell: echo "select * from pg_user where usename='{{ db_user1 }}';" | psql -d postgres
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- "result.stdout_lines[-1] == '(0 rows)'"
|
|
@ -0,0 +1,80 @@
|
|||
- name: Check that becoming an non-existing user throws an error
|
||||
become_user: "{{ pg_user }}"
|
||||
become: yes
|
||||
postgresql_db:
|
||||
state: present
|
||||
name: must_fail
|
||||
login_user: "{{ pg_user }}"
|
||||
session_role: "{{ db_session_role1 }}"
|
||||
register: result
|
||||
ignore_errors: yes
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is failed
|
||||
|
||||
- name: Create a high privileged user
|
||||
become: yes
|
||||
become_user: "{{ pg_user }}"
|
||||
postgresql_user:
|
||||
name: "{{ db_session_role1 }}"
|
||||
state: "present"
|
||||
password: "password"
|
||||
role_attr_flags: "CREATEDB,LOGIN,CREATEROLE"
|
||||
login_user: "{{ pg_user }}"
|
||||
db: postgres
|
||||
|
||||
- name: Create a low privileged user using the newly created user
|
||||
become: yes
|
||||
become_user: "{{ pg_user }}"
|
||||
postgresql_user:
|
||||
name: "{{ db_session_role2 }}"
|
||||
state: "present"
|
||||
password: "password"
|
||||
role_attr_flags: "LOGIN"
|
||||
login_user: "{{ pg_user }}"
|
||||
session_role: "{{ db_session_role1 }}"
|
||||
db: postgres
|
||||
|
||||
- name: Create DB as session_role
|
||||
become_user: "{{ pg_user }}"
|
||||
become: yes
|
||||
postgresql_db:
|
||||
state: present
|
||||
name: "{{ db_session_role1 }}"
|
||||
login_user: "{{ pg_user }}"
|
||||
session_role: "{{ db_session_role1 }}"
|
||||
register: result
|
||||
|
||||
- name: Check that database created and is owned by correct user
|
||||
become_user: "{{ pg_user }}"
|
||||
become: yes
|
||||
shell: echo "select rolname from pg_database join pg_roles on datdba = pg_roles.oid where datname = '{{ db_session_role1 }}';" | psql -AtXq postgres
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- "result.stdout_lines[-1] == '{{ db_session_role1 }}'"
|
||||
|
||||
- name: Fail when creating database as low privileged user
|
||||
become_user: "{{ pg_user }}"
|
||||
become: yes
|
||||
postgresql_db:
|
||||
state: present
|
||||
name: "{{ db_session_role2 }}"
|
||||
login_user: "{{ pg_user }}"
|
||||
session_role: "{{ db_session_role2 }}"
|
||||
register: result
|
||||
ignore_errors: yes
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is failed
|
||||
|
||||
- name: Drop test db
|
||||
become_user: "{{ pg_user }}"
|
||||
become: yes
|
||||
postgresql_db:
|
||||
state: absent
|
||||
name: "{{ db_session_role1 }}"
|
||||
login_user: "{{ pg_user }}"
|
|
@ -0,0 +1,164 @@
|
|||
# test code for state dump and restore for postgresql_db module
|
||||
# copied from mysql_db/tasks/state_dump_import.yml
|
||||
# (c) 2014, Wayne Rosario <wrosario@ansible.com>
|
||||
|
||||
# This file is part of Ansible
|
||||
#
|
||||
# Ansible is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# Ansible is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# ============================================================
|
||||
|
||||
- name: Create a test user
|
||||
become: yes
|
||||
become_user: "{{ pg_user }}"
|
||||
postgresql_user:
|
||||
name: "{{ db_user1 }}"
|
||||
state: "present"
|
||||
encrypted: 'yes'
|
||||
password: "password"
|
||||
role_attr_flags: "CREATEDB,LOGIN,CREATEROLE"
|
||||
login_user: "{{ pg_user }}"
|
||||
db: postgres
|
||||
|
||||
- set_fact: db_file_name="{{tmp_dir}}/{{file}}"
|
||||
|
||||
- set_fact:
|
||||
admin_str: "psql -U {{ pg_user }}"
|
||||
|
||||
- set_fact:
|
||||
user_str: "env PGPASSWORD=password psql -h localhost -U {{ db_user1 }} {{ db_name }}"
|
||||
when: test_fixture == "user"
|
||||
# "-n public" is required to work around pg_restore issues with plpgsql
|
||||
|
||||
- set_fact:
|
||||
user_str: "psql -U {{ pg_user }} {{ db_name }}"
|
||||
when: test_fixture == "admin"
|
||||
|
||||
|
||||
|
||||
- set_fact:
|
||||
sql_create: "create table employee(id int, name varchar(100));"
|
||||
sql_insert: "insert into employee values (47,'Joe Smith');"
|
||||
sql_select: "select * from employee;"
|
||||
|
||||
- name: state dump/restore - create database
|
||||
postgresql_db:
|
||||
state: present
|
||||
name: "{{ db_name }}"
|
||||
owner: "{{ db_user1 }}"
|
||||
login_user: "{{ pg_user }}"
|
||||
|
||||
- name: state dump/restore - create table employee
|
||||
command: '{{ user_str }} -c "{{ sql_create }}"'
|
||||
|
||||
- name: state dump/restore - insert data into table employee
|
||||
command: '{{ user_str }} -c "{{ sql_insert }}"'
|
||||
|
||||
- name: state dump/restore - file name should not exist
|
||||
file: name={{ db_file_name }} state=absent
|
||||
|
||||
- name: test state=dump to backup the database (expect changed=true)
|
||||
postgresql_db:
|
||||
name: "{{ db_name }}"
|
||||
target: "{{ db_file_name }}"
|
||||
owner: "{{ db_user1 }}"
|
||||
login_user: '{{(test_fixture == "user")|ternary(db_user1, pg_user)}}'
|
||||
target_opts: '{{(test_fixture == "user")|ternary("-n public", omit)}}'
|
||||
login_host: '{{(test_fixture == "user")|ternary("localhost", omit)}}'
|
||||
login_password: '{{(test_fixture == "user")|ternary("password", omit)}}'
|
||||
state: dump
|
||||
dump_extra_args: --exclude-table=fake
|
||||
register: result
|
||||
become_user: "{{ pg_user }}"
|
||||
become: yes
|
||||
|
||||
- name: assert output message backup the database
|
||||
assert:
|
||||
that:
|
||||
- result is changed
|
||||
- result.executed_commands[0] is search("--exclude-table=fake")
|
||||
|
||||
- name: assert database was backed up successfully
|
||||
command: file {{ db_file_name }}
|
||||
register: result
|
||||
|
||||
- name: state dump/restore - remove database for restore
|
||||
postgresql_db:
|
||||
name: "{{ db_name }}"
|
||||
target: "{{ db_file_name }}"
|
||||
owner: "{{ db_user1 }}"
|
||||
login_user: '{{(test_fixture == "user")|ternary(db_user1, pg_user)}}'
|
||||
target_opts: '{{(test_fixture == "user")|ternary("-n public", omit)}}'
|
||||
login_host: '{{(test_fixture == "user")|ternary("localhost", omit)}}'
|
||||
login_password: '{{(test_fixture == "user")|ternary("password", omit)}}'
|
||||
state: absent
|
||||
|
||||
- name: state dump/restore - re-create database
|
||||
postgresql_db:
|
||||
state: present
|
||||
name: "{{ db_name }}"
|
||||
owner: "{{ db_user1 }}"
|
||||
login_user: "{{ pg_user }}"
|
||||
|
||||
- name: test state=restore to restore the database (expect changed=true)
|
||||
postgresql_db:
|
||||
name: "{{ db_name }}"
|
||||
target: "{{ db_file_name }}"
|
||||
owner: "{{ db_user1 }}"
|
||||
login_user: '{{(test_fixture == "user")|ternary(db_user1, pg_user)}}'
|
||||
target_opts: '{{(test_fixture == "user")|ternary("-n public", omit)}}'
|
||||
login_host: '{{(test_fixture == "user")|ternary("localhost", omit)}}'
|
||||
login_password: '{{(test_fixture == "user")|ternary("password", omit)}}'
|
||||
state: restore
|
||||
register: result
|
||||
become_user: "{{ pg_user }}"
|
||||
become: yes
|
||||
|
||||
- name: assert output message restore the database
|
||||
assert:
|
||||
that:
|
||||
- result is changed
|
||||
|
||||
- name: select data from table employee
|
||||
command: '{{ user_str }} -c "{{ sql_select }}"'
|
||||
register: result
|
||||
|
||||
- name: assert data in database is from the restore database
|
||||
assert:
|
||||
that:
|
||||
- "'47' in result.stdout"
|
||||
- "'Joe Smith' in result.stdout"
|
||||
|
||||
- name: state dump/restore - remove database name
|
||||
postgresql_db:
|
||||
name: "{{ db_name }}"
|
||||
target: "{{ db_file_name }}"
|
||||
owner: "{{ db_user1 }}"
|
||||
login_user: '{{(test_fixture == "user")|ternary(db_user1, pg_user)}}'
|
||||
target_opts: '{{(test_fixture == "user")|ternary("-n public", omit)}}'
|
||||
login_host: '{{(test_fixture == "user")|ternary("localhost", omit)}}'
|
||||
login_password: '{{(test_fixture == "user")|ternary("password", omit)}}'
|
||||
state: absent
|
||||
|
||||
- name: remove file name
|
||||
file: name={{ db_file_name }} state=absent
|
||||
|
||||
- name: Remove the test user
|
||||
become: yes
|
||||
become_user: "{{ pg_user }}"
|
||||
postgresql_user:
|
||||
name: "{{ db_user1 }}"
|
||||
state: "absent"
|
||||
login_user: "{{ pg_user }}"
|
||||
db: postgres
|
Loading…
Add table
Add a link
Reference in a new issue