๐Ÿ“— Ansible playbooks and roles for building an idempotent, interconnected and scalable infrastructure
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
ansible-playbooks/roles/postgres/tasks/install.yml

151 lines
3.2 KiB

- name: set pg_cfg
set_fact:
pg_cfg: "{{ postgresql_default_config | d({}) |
combine(postgresql_config | d({}), recursive=true) }}"
- name: install dependencies
include_tasks: tasks/install_packages.yml
vars:
package:
- postgresql
- postgresql-contrib
- py3-psycopg2
- name: create user and group
include_tasks: tasks/create_user.yml
vars:
user:
name: "{{ postgresql_user }}"
group: "{{ postgresql_group }}"
- name: create config directory
file:
path: "{{ postgresql_conf_dir }}"
state: directory
mode: 0770
owner: "{{ postgresql_user }}"
group: "{{ postgresql_group }}"
- block:
- name: create data directory
file:
path: "{{ postgresql_data_dir }}"
state: directory
mode: 0700
owner: "{{ postgresql_user }}"
group: "{{ postgresql_group }}"
rescue:
- meta: noop
- name: include custom config in default postgres config
lineinfile:
path: "{{ postgresql_conf_dir }}/postgresql.conf"
line: "include 'custom.conf'"
create: yes
mode: 0400
owner: "{{ postgresql_user }}"
group: "{{ postgresql_group }}"
notify: restart postgresql
- name: template custom config
template:
src: postgresql.j2
dest: "{{ postgresql_conf_dir }}/custom.conf"
force: yes
mode: 0400
owner: "{{ postgresql_user }}"
group: "{{ postgresql_group }}"
lstrip_blocks: yes
notify: restart postgresql
vars:
config: "{{ pg_cfg }}"
- name: template pg_hba.conf if it does not exist
template:
src: pg_hba.j2
dest: "{{ postgresql_conf_dir }}/pg_hba.conf"
force: no
mode: 0400
owner: "{{ postgresql_user }}"
group: "{{ postgresql_group }}"
notify: restart postgresql
- name: ensure postgres hba allows local connections
community.postgresql.postgresql_pg_hba:
dest: "{{ postgresql_conf_dir }}/pg_hba.conf"
contype: local
databases: all
users: all
method: trust
notify: restart postgresql
- name: edit service config
lineinfile:
path: /etc/conf.d/postgresql
regexp: "^{{ item.name }}="
line: '{{ item.name }}="{{ item.value }}"'
notify: restart postgresql
loop:
- name: conf_dir
value: "{{ postgresql_conf_dir }}"
- name: data_dir
value: "{{ postgresql_data_dir }}"
- name: pg_opts
value: -c log_destination='syslog'
- name: initdb_opts
value: --locale=en_US.UTF-8
- name: disable logfile in service config
lineinfile:
path: /etc/conf.d/postgresql
regexp: '^logfile=(.*)$'
line: '#logfile=\1'
backrefs: yes
notify: restart postgresql
- name: collect .new files
find:
paths: "{{ postgresql_conf_dir }}"
patterns: "*.new"
register: new_files
- name: remove .new files
file:
path: "{{ item.path }}"
state: absent
loop: "{{ new_files.files | flatten(levels=1) }}"
- name: remove old postgres log file
file:
path: /var/log/postgresql/postmaster.log
state: absent
changed_when: no
- name: flush handlers
meta: flush_handlers
# TODO: backup configuration for postgres
- name: enable and start postgres
service:
name: postgresql
state: started
enabled: yes
environment:
LANG: 'en_US.UTF-8'