Following simple ansible playbook allows you to install the PostgreSQL on CentOS/RHEL, clean up the data directory, initialize the DB, Add the PostgreSQL as a service, enable local login, create SQL user, schema and DB.
I have parameterized following configurations which sits on group_vars/all.yml
remote_ssh_user: your_ssh_user postgres_repo: https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-redhat96-9.6-3.noarch.rpm sql_user: your_sql_user sql_passwd: passwd_you_want_to_setup sql_schema: schema_name_to_be_added
Following is my main.yml for the postgres role which sits on roles/postgres/tasks/main.yml
- name: Install downlaod/file plugins
yum: name={{ item }} state=present
become: true
with_items:
- wget
- python-psycopg2
- name: add repository (CentOS6/CentOS7)
yum: name="{{postgres_repo}}" state=present
- name: install postgres server 9.6
yum: name=postgresql96-server state=present
- name: Clean the data directory
file:
state: absent
path: /var/lib/pgsql/9.6/data/
- name: initialize the DB
command: /usr/pgsql-9.6/bin/postgresql96-setup initdb
- name: Add to startup
command: systemctl enable postgresql-9.6.service
- name: start the service
command: systemctl start postgresql-9.6.service
- name: allow local login
lineinfile:
path: /var/lib/pgsql/9.6/data/pg_hba.conf
line: 'host all all 127.0.0.1/32 md5'
regexp : '^host( )*all( )*all( )*127\.0\.0\.1\/32( )*ident*'
state: present
- name: allow local login
lineinfile:
path: /var/lib/pgsql/9.6/data/pg_hba.conf
line: 'host all all ::1/128 md5'
regexp : '^host( )*all( )*all( )*::1/128 ( )*ident*'
state: present
- name: Re-start the service
command: systemctl restart postgresql-9.6.service
- postgresql_user:
name: "{{sql_user}}"
password: "{{sql_passwd}}"
become: true
become_user: postgres
- postgresql_schema:
name: "{{sql_schema}}"
owner: "{{sql_user}}"
become: true
become_user: postgres
- postgresql_db:
name: "{{sql_schema}}"
owner: "{{sql_user}}"
become: true
become_user: postgres
I can now call the postgres role from my play book which is saved as install_postgresql.yml
# role for postgres
- hosts: localhost
remote_user: "{{remote_ssh_user}}"
roles:
- { role: postgres }
Runnig your playbook
ansible-playbook install_postgresql.yml