# postgres ~~ roles/postgres/tasks/main.yml # postgresql database server --- - name: ensure postgres is installed package: name: "{{ item }}" state: present loop: - "postgresql-server" - "postgresql-contrib" - name: ensure postgres directories exists 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 shell: | su - _postgresql -c \ 'initdb -D "{{ postgres_dir }}/data/" -U "{{ postgres_dbuser }}" \ --encoding=UTF-8 \ --locale=en_US.UTF-8' args: chdir: "{{ postgres_dir }}" register: result failed_when: result.rc != 0 and result.stderr is defined and "exists but is not empty" not in result.stderr - name: enable and restart postgres service service: name: postgresql state: restarted enabled: true