- name: install postgres package: name: - postgresql-server - postgresql-contrib state: present - name: create postgres directories file: path: "{{ postgres_dir }}/{{ item }}" owner: "{{ postgres_user }}" group: "{{ postgres_group }}" mode: 0750 state: directory loop: - "" - "data" - name: delete default data dir if exists file: path: "{{ postgres_default_dir }}" state: absent when: postgres_dir != "/var/postgresql" - name: link postgres directory to default one file: src: "{{ postgres_dir }}" dest: "{{ postgres_default_dir }}" owner: "{{ postgres_user }}" group: "{{ postgres_group }}" state: link mode: 0750 follow: false when: postgres_dir != "/var/postgresql" # NOTE: this tasks needs `pipelining` set to `false` to work correctly - name: init postgres database command: cmd: initdb -D "{{ postgres_dir }}/data/" -U "{{ postgres_db_user }}" --encoding=UTF-8 --locale=en_US.UTF-8 chdir: "{{ postgres_dir }}" register: result become: true become_user: "{{ postgres_user }}" failed_when: - result.rc != 0 - "'exists but is not empty' not in result.stderr" - name: enable and restart postgres service service: name: postgresql state: restarted enabled: true