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