85 lines
2.3 KiB
YAML
85 lines
2.3 KiB
YAML
---
|
|
- name: install depencies packages
|
|
ansible.builtin.package:
|
|
name:
|
|
- gpg
|
|
- python3-psycopg2
|
|
tags: postgresql
|
|
|
|
- import_tasks: repo.yml
|
|
when: postgresql_use_official_repository
|
|
|
|
- name: install packages
|
|
ansible.builtin.package:
|
|
name:
|
|
- 'postgresql-{{ postgresql_version }}'
|
|
tags: postgresql
|
|
|
|
- name: copy config
|
|
ansible.builtin.template:
|
|
src: '{{ item }}.j2'
|
|
dest: '/etc/postgresql/{{ postgresql_version }}/main/{{ item }}'
|
|
owner: root
|
|
group: root
|
|
mode: 0644
|
|
loop:
|
|
- postgresql.conf
|
|
- pg_hba.conf
|
|
notify: reload postgresql
|
|
tags: postgresql
|
|
|
|
- name: enable and start service
|
|
ansible.builtin.service:
|
|
name: 'postgresql@{{ postgresql_version }}-main'
|
|
state: started
|
|
enabled: true
|
|
tags: postgresql
|
|
|
|
- name: wait for service is up
|
|
ansible.builtin.wait_for:
|
|
port: 5432
|
|
tags: postgresql
|
|
|
|
- name: manage databases
|
|
community.general.postgresql_db:
|
|
name: '{{ item.name }}'
|
|
encoding: '{{ item.encoding|default("UTF-8") }}'
|
|
state: '{{ item.state|default("present") }}'
|
|
lc_collate: '{{ item.lc_collate|default("C.UTF-8") }}'
|
|
lc_ctype: '{{ item.lc_ctype|default("C.UTF-8") }}'
|
|
template: '{{ item.template|default("template0") }}'
|
|
loop: '{{ postgresql_databases }}'
|
|
become: true
|
|
become_user: postgres
|
|
when: postgresql_primary
|
|
tags: postgresql
|
|
|
|
- name: manage users
|
|
community.general.postgresql_user:
|
|
name: '{{ item.key }}'
|
|
password: '{{ item.value.password }}'
|
|
role_attr_flags: '{{ item.value.attributes|default([])|join(",") }}'
|
|
state: '{{ item.value.state|default("present") }}'
|
|
loop: '{{ postgresql_users|dict2items }}'
|
|
loop_control:
|
|
label: '{{ item.key }}'
|
|
become: true
|
|
become_user: postgres
|
|
when: postgresql_primary
|
|
tags: postgresql
|
|
|
|
- name: manage user's privileges
|
|
community.postgresql.postgresql_privs:
|
|
db: '{{ item.database }}'
|
|
roles: '{{ item.role }}'
|
|
type: '{{ item.type|default("table") }}'
|
|
objs: '{{ item.objets|default(["ALL_IN_SCHEMA"])|join(",") }}'
|
|
privs: '{{ item.privileges|join(",") }}'
|
|
state: '{{ item.state|default("present") }}'
|
|
loop: '{{ postgresql_privileges }}'
|
|
loop_control:
|
|
label: '{{ item.role }}/{{ item.database }}'
|
|
become: true
|
|
become_user: postgres
|
|
when: postgresql_primary
|
|
tags: postgresql
|