--- - name: Install postgresql and psycopg2 apt: update_cache: true pkg: - postgresql - python3-psycopg2 state: present register: apt_result retries: 3 until: apt_result is succeeded - name: Ensure main postgresql directory exists file: path: /etc/postgresql/{{ postgresql.version }}/main/ state: directory owner: postgres group: postgres mode: 0755 - name: Ensure configuration directory exists file: path: /etc/postgresql/{{ postgresql.version }}/main/conf.d state: directory owner: postgres group: postgres mode: 0755 - name: Configuration of postgresql {{ postgresql.version }} template: src: postgresql/{{ item }}.j2 dest: /etc/postgresql/{{ postgresql.version }}/main/{{ item }} mode: 0640 owner: postgres group: postgres loop: - pg_hba.conf - pg_ident.conf - postgresql.conf notify: - Reload postgresql - name: Enable and start PostgreSQL systemd: name: postgresql.service state: started enabled: true - name: Create databases become: true become_user: postgres postgresql_db: name: "{{ item }}" encoding: UTF-8 lc_collate: en_US.UTF-8 lc_ctype: en_US.UTF-8 template: template0 loop: "{{ postgresql.databases }}" - name: Create users become: true become_user: postgres postgresql_user: db: "{{ item.database }}" name: "{{ item.name }}" password: "{{ item.password }}" no_log: true loop: "{{ postgresql.users }}" - name: Grant privileges to users become: true become_user: postgres postgresql_privs: db: postgres type: database role: "{{ item.name }}" privs: "{{ item.privs | join(',') }}" obj: "{{ item.database }}" no_log: true loop: "{{ postgresql.users }}" ...