]> git.immae.eu Git - github/fretlink/ansible-postgresql-role.git/blame - tasks/postgres-cluster.yml
Merge branch 'standby-clone-pg_basebackup'
[github/fretlink/ansible-postgresql-role.git] / tasks / postgres-cluster.yml
CommitLineData
f1a9ab46
P
1---
2- set_fact:
3 postgres_version: "{{ postgres_cluster.version }}"
4 postgres_cluster_name: "{{ postgres_cluster.name }}"
5 postgres_port: "{{ postgres_cluster.port }}"
6 postgres_fsync_enabled: "{{ postgres_cluster.fsync_enabled }}"
7 postgres_archive_enabled: "{{ postgres_cluster.archive_enabled }}"
8d168915 8 postgres_wal_level: "{{ postgres_cluster.wal_level|default('logical') }}"
f1a9ab46
P
9 postgres_max_replication_slots: "{{ postgres_cluster.max_replication_slots | default(10) }}"
10 postgres_extra_config: "{{ postgres_cluster.extra_config | default({}) }}"
11 barman_directory: "{{ postgres_cluster.barman_directory | default(None) }}"
12 postgres_primary: "{{ postgres_cluster.primary | default(None) }}"
13 postgres_checksums: "{{ postgres_cluster.checksums | default(True) }}"
14
d0bc90e0
P
15- name: Install postgresql version {{ postgres_version }}
16 apt: name=postgresql-{{ postgres_version }}
17 when: ansible_distribution_release != 'NA'
18
19- name: Install pg_repack version {{ postgres_version }}
20 apt: name=postgresql-{{ postgres_version }}-repack
21 when:
22 - ansible_distribution_release != 'NA'
8d168915 23 - postgres_version in ['9.3', '9.4', '9.5', '9.6', '10', '11', '12']
d0bc90e0
P
24
25- name: Set initdb options
26 set_fact: postgres_initdb_option="{% if postgres_checksums %}--data-checksums{% endif %}"
27
28- name: Create postgres cluster {{ postgres_version }}/{{ postgres_cluster_name }} if needed
29 command: /usr/bin/pg_createcluster {{ postgres_version }} {{ postgres_cluster_name }} -- {{ postgres_initdb_option }}
30 args:
31 creates: /var/lib/postgresql/{{ postgres_version }}/{{ postgres_cluster_name }}/
32
33- name: Check postgres server key
34 stat: path=/var/lib/postgresql/{{ postgres_version }}/{{ postgres_cluster_name }}/server.key
35 register: server_key
36
37- name: Copy snakeoil key in postgres dir
38 copy:
39 src=/etc/ssl/private/ssl-cert-snakeoil.key
40 dest=/var/lib/postgresql/{{ postgres_version }}/{{ postgres_cluster_name }}/server.key
41 remote_src=true
42 owner=postgres
43 group=postgres
44 mode="0600"
45 when: not server_key.stat.exists or server_key.stat.islnk
46
47- name: Check postgres server certificate
48 stat: path=/var/lib/postgresql/{{ postgres_version }}/{{ postgres_cluster_name }}/server.crt
49 register: server_crt
50
51- name: Copy snakeoil certificate in postgres dir
52 copy:
53 src=/etc/ssl/certs/ssl-cert-snakeoil.pem
54 dest=/var/lib/postgresql/{{ postgres_version }}/{{ postgres_cluster_name }}/server.crt
55 remote_src=true
56 owner=postgres
57 group=postgres
58 mode="0644"
59 when: not server_crt.stat.exists or server_crt.stat.islnk
60
61- name: Add standby clone from barman script
62 include: postgres-standby-barman.yml
b722248e
P
63 when: postgres_barman_server is defined and postgres_primary.restore_barman_directory is defined
64
65- name: Add standby clone from pg_basebackup
66 include: postgres-standby-basebackup.yml
67 when: postgres_primary and postgres_primary.pg_basebackup is defined
d0bc90e0
P
68
69- name: Determine SSD or rotational disks
70 raw: 'lsblk --noheadings --nodeps --raw --output=rota | grep -q 1'
71 check_mode: no
72 ignore_errors: yes
73 register: rotational_disk
74
75- name: Set specific random page cost for SSDs
76 set_fact:
77 postgres_specific_random_page_cost: "1.0"
78 when:
79 - rotational_disk.failed is defined
80 - rotational_disk.failed
81
82- name: Upload postgresql.conf
83 template: src=postgresql.{{ postgres_version }}.conf.j2 dest=/etc/postgresql/{{ postgres_version }}/{{ postgres_cluster_name }}/postgresql.conf
84
85- name: Upload pg_hba.conf
86 template: src=pg_hba.conf.j2 dest=/etc/postgresql/{{ postgres_version }}/{{ postgres_cluster_name }}/pg_hba.conf
87
88- name: Upload recovery.conf
89 template: src=recovery.conf.j2 dest=/var/lib/postgresql/{{ postgres_version }}/{{ postgres_cluster_name }}/recovery.conf owner=postgres group=postgres mode=0600
8d168915 90 when: postgres_primary and postgres_version is version('12', '<')
d0bc90e0
P
91 no_log: True
92
8d168915
P
93- name: Define secondary nodes as secondaries with corresponding signal files
94 file:
95 path: "{{ item }}"
96 state: touch
97 when: postgres_primary and postgres_version is version('12', '>=')
98 with_items:
99 - /var/lib/postgresql/{{ postgres_version }}/{{ postgres_cluster_name }}/standby.signal
100
d0bc90e0
P
101- name: Create log file
102 file:
103 path={{ postgres_log_dir }}/postgresql-{{ postgres_version }}-{{ postgres_cluster_name }}.log
104 state=touch
105 owner=postgres
106 group=adm
107 when: postgres_log_dir is defined and postgres_log_dir
108
109- name: Create log symlink for pg_lsclusters
110 file: dest=/etc/postgresql/{{ postgres_version }}/{{ postgres_cluster_name }}/log src={{ postgres_log_dir }}/postgresql-{{ postgres_version }}-{{ postgres_cluster_name }}.log state=link
111 when: postgres_log_dir is defined and postgres_log_dir