- import_role: name: jail tasks_from: jail_setup - name: Check if database is initialized stat: path: /var/db/postgres/data18/PG_VERSION register: _pg_data - name: Initialize database shell: /usr/local/etc/rc.d/postgresql initdb when: not _pg_data.stat.exists - name: Allow LAN connections in pg_hba.conf lineinfile: path: /var/db/postgres/data18/pg_hba.conf line: "host all all {{ jail_lan_cidr }} scram-sha-256" regexp: "^host.*all.*all.*scram-sha-256" notify: Reload postgresql - name: Listen on all interfaces lineinfile: path: /var/db/postgres/data18/postgresql.conf line: "listen_addresses = '*'" regexp: "^listen_addresses" notify: Reload postgresql - name: Start postgres service: name: postgresql state: started - name: Flush handlers meta: flush_handlers - import_role: name: jail tasks_from: jail_launch - name: Create database users shell: "su -l postgres -c \"psql -tc \\\"SELECT 1 FROM pg_roles WHERE rolname='{{ item }}'\\\"\" | grep -q 1 || su -l postgres -c \"psql -c \\\"CREATE ROLE {{ item }} LOGIN PASSWORD '{{ pg_user_passwords[item] }}'\\\"\"" loop: "{{ pg_users }}" register: _pg_user changed_when: "'CREATE ROLE' in _pg_user.stdout" no_log: true - name: Create databases shell: "su -l postgres -c \"psql -tc \\\"SELECT 1 FROM pg_database WHERE datname='{{ item.name }}'\\\"\" | grep -q 1 || su -l postgres -c \"createdb -O {{ item.owner }} {{ item.name }}\"" loop: "{{ pg_databases }}" register: _pg_db changed_when: "'CREATE DATABASE' in _pg_db.stdout" - name: Run database init SQL shell: "su -l postgres -c \"psql -d {{ item.item.name }} -c \\\"{{ item.item.init }}\\\"\"" loop: "{{ _pg_db.results }}" loop_control: label: "{{ item.item.name }}" when: item.changed and item.item.init is defined