summaryrefslogtreecommitdiff
path: root/test/integration/targets/postgresql_user/tasks/postgresql_user_initial.yml
blob: ccd42847c67d3c92a26b222c1162249be8ec87da (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#
# Create and destroy user, test 'password' and 'encrypted' parameters
#
# unencrypted values are not supported on newer versions
# do not run the encrypted: no tests if on 10+
- set_fact:
    encryption_values:
    - 'yes'

- set_fact:
    encryption_values: '{{ encryption_values + ["no"]}}'
  when: postgres_version_resp.stdout is version('10', '<=')

- include_tasks: test_password.yml
  vars:
    encrypted: '{{ loop_item }}'
    db_password1: 'secretù' # use UTF-8
  loop: '{{ encryption_values }}'
  loop_control:
    loop_var: loop_item

# BYPASSRLS role attribute was introduced in PostgreSQL 9.5, so
# we want to test attribute management differently depending
# on the version.
- set_fact:
    bypassrls_supported: "{{ postgres_version_resp.stdout is version('9.5.0', '>=') }}"

# test 'no_password_change' and 'role_attr_flags' parameters
- include_tasks: test_no_password_change.yml
  vars:
    no_password_changes: '{{ loop_item }}'
  loop:
    - 'yes'
    - 'no'
  loop_control:
    loop_var: loop_item

### TODO: fail_on_user

#
# Test login_user functionality
#
- name: Create a user to test login module parameters
  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

- name: Create db
  postgresql_db:
    name: "{{ db_name }}"
    state: "present"
    login_user: "{{ db_user1 }}"
    login_password: "password"
    login_host: "localhost"

- name: Check that database created
  become: yes
  become_user: "{{ pg_user }}"
  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: Create a user
  postgresql_user:
    name: "{{ db_user2 }}"
    state: "present"
    encrypted: 'yes'
    password: "md55c8ccfd9d6711fc69a7eae647fc54f51"
    db: "{{ db_name }}"
    login_user: "{{ db_user1 }}"
    login_password: "password"
    login_host: "localhost"

- name: Check that it was created
  become: yes
  become_user: "{{ pg_user }}"
  shell: echo "select * from pg_user where usename='{{ db_user2 }}';" | psql -d postgres
  register: result

- assert:
    that:
      - "result.stdout_lines[-1] == '(1 row)'"

- name: Grant database privileges
  postgresql_privs:
    type: "database"
    state: "present"
    roles: "{{ db_user2 }}"
    privs: "CREATE,connect"
    objs: "{{ db_name }}"
    db: "{{ db_name }}"
    login: "{{ db_user1 }}"
    password: "password"
    host: "localhost"

- name: Check that the user has the requested permissions (database)
  become: yes
  become_user: "{{ pg_user }}"
  shell: echo "select datacl from pg_database where datname='{{ db_name }}';" | psql {{ db_name }}
  register: result_database

- assert:
    that:
      - "result_database.stdout_lines[-1] == '(1 row)'"
      - "db_user2 ~ '=Cc' in result_database.stdout"

- name: Remove user
  postgresql_user:
    name: "{{ db_user2 }}"
    state: 'absent'
    priv: "ALL"
    db: "{{ db_name }}"
    login_user: "{{ db_user1 }}"
    login_password: "password"
    login_host: "localhost"

- name: Check that they were removed
  become: yes
  become_user: "{{ pg_user }}"
  shell: echo "select * from pg_user where usename='{{ db_user2 }}';" | psql -d postgres
  register: result

- assert:
    that:
      - "result.stdout_lines[-1] == '(0 rows)'"

- name: Destroy DB
  postgresql_db:
    state: absent
    name: "{{ db_name }}"
    login_user: "{{ db_user1 }}"
    login_password: "password"
    login_host: "localhost"

- name: Check that database was destroyed
  become: yes
  become_user: "{{ pg_user }}"
  shell: echo "select datname from pg_database where datname = '{{ db_name }}';" | psql -d postgres
  register: result

- assert:
    that:
      - "result.stdout_lines[-1] == '(0 rows)'"