patroni/templates/patroni.yaml.j2
2023-08-31 13:36:29 +03:00

226 lines
9.3 KiB
Django/Jinja

#jinja2: trim_blocks:True,lstrip_blocks:True
---
scope: {{ patroni_cluster_name }}
name: {{ ansible_hostname }}
namespace: {{ patroni_namespace }}
{% if patroni_log_destination == 'logfile' %}
log:
level: {{ patroni_log_level |upper }}
traceback_level: {{ patroni_log_traceback_level |upper }}
format: {{ patroni_log_format |quote }}
dateformat: {{ patroni_log_dateformat |quote }}
max_queue_size: {{ patroni_log_max_queue_size |int }}
dir: {{ patroni_log_dir }}
file_num: {{ patroni_log_file_num |int }}
file_size: {{ patroni_log_file_size |int }}
loggers:
patroni.postmaster: {{ patroni_log_loggers_patroni_postmaster |upper }}
urllib3: {{ patroni_log_loggers_urllib3 |upper }}
{% endif %}
ctl:
certfile: {{ patroni_ssl_path }}/{{ patroni_self_signed_cert_name }}.crt
keyfile: {{ patroni_ssl_path }}/{{ patroni_self_signed_cert_name }}.key
cafile: {{ patroni_ssl_path }}/CA-cert.crt
restapi:
listen: {{ patroni_restapi_listen_address }}:{{ patroni_restapi_listen_port }}
connect_address: {{ hostvars[inventory_hostname]['ansible_host'] }}:{{ patroni_restapi_listen_port }}
{% if patroni_ssl|bool %}
certfile: {{ patroni_ssl_path }}/{{ patroni_self_signed_cert_name }}.crt
keyfile: {{ patroni_ssl_path }}/{{ patroni_self_signed_cert_name }}.key
cafile: {{ patroni_ssl_path }}/CA-cert.crt
authentication:
username: {{ patroni_restapi_username }}
password: {{ patroni_restapi_password }}
{% endif %}
{% if not patroni_dcs_exists|bool and patroni_dcs_type == 'etcd' %}
etcd:
hosts: {% for host in groups['etcd'] %}{{ hostvars[host]['ansible_host'] }}:2379{% if not loop.last %},{% endif %}{% endfor %}
{% endif %}
{% if patroni_dcs_exists|bool and patroni_dcs_type == 'etcd' %}
etcd:
hosts: {% for etcd_hosts in patroni_etcd_hosts %}{{etcd_hosts.host}}:{{etcd_hosts.port}}{% if not loop.last %},{% endif %}{% endfor %}
{% endif %}
{% if patroni_dcs_exists|bool and patroni_dcs_type == 'consul' %}
consul:
hosts: {% for consul_hosts in patroni_consul_hosts %}{{consul_hosts.host}}:{{consul_hosts.port}}{% if not loop.last %},{% endif %}{% endfor %}
{% endif %}
{% if not patroni_dcs_exists|bool and patroni_dcs_type == 'consul' %}
consul:
host: localhost
{% endif %}
bootstrap:
method: {{ patroni_cluster_bootstrap_method }}
{% if patroni_cluster_bootstrap_method == 'wal-g' %}
wal-g:
command: {{ patroni_restore_script }}
no_params: True
recovery_conf:
recovery_target_action: promote
recovery_target_timeline: {{ patroni_wal_g_pitr }}
restore_command: {{ patroni_cluster_restore_command }}
{% endif %}
{% if patroni_cluster_bootstrap_method == 'pg_probackup' %}
pg_probackup:
command: {{ pg_probackup_patroni_cluster_bootstrap_command }}
no_params: true
{% endif %}
dcs:
ttl: {{ patroni_ttl |d(30, true) |int }}
loop_wait: {{ patroni_loop_wait |d(10, true) |int }}
retry_timeout: {{ patroni_retry_timeout |d(10, true) |int }}
maximum_lag_on_failover: {{ patroni_maximum_lag_on_failover |d(1048576, true) |int }}
master_start_timeout: {{ patroni_master_start_timeout |d(300, true) |int }}
synchronous_mode: {{ patroni_synchronous_mode |string |d(false, true) |lower }}
synchronous_mode_strict: {{ patroni_synchronous_mode_strict |string |d(false, true) |lower }}
synchronous_node_count: {{ patroni_synchronous_node_count |d(1, true) |int }}
{% if patroni_standby_cluster.host is defined and patroni_standby_cluster.host | length > 0 %}
standby_cluster:
host: {{ patroni_standby_cluster.host }}
port: {{ patroni_standby_cluster.port }}
{% if patroni_standby_cluster.primary_slot_name is defined and patroni_standby_cluster.primary_slot_name | length > 0 %}
primary_slot_name: {{ patroni_standby_cluster.primary_slot_name }}
{% endif %}
{% if patroni_standby_cluster.restore_command is defined and patroni_standby_cluster.restore_command | length > 0 %}
restore_command: {{ patroni_standby_cluster.restore_command }}
{% endif %}
{% if patroni_standby_cluster.recovery_min_apply_delay is defined and patroni_standby_cluster.recovery_min_apply_delay | length > 0 %}
recovery_min_apply_delay: {{ patroni_standby_cluster.recovery_min_apply_delay }}
{% endif %}
{% endif %}
postgresql:
use_pg_rewind: {{ patroni_postgresql_use_pg_rewind |string |d(false, true) |lower }}
use_slots: true
parameters: {{ patroni_postgresql_parameters_combined }}
initdb: # List options to be passed on to initdb
- encoding: {{ patroni_postgresql_encoding }}
- locale: {{ patroni_postgresql_locale }}
- data-checksums
pg_hba: # Add following lines to pg_hba.conf after running 'initdb'
{% if patroni_ssl|bool %}
{% for host in groups[patroni_play_group] %}
- hostssl all all {{ hostvars[host]['ansible_host'] }}/32 {{ patroni_postgresql_password_encryption_algorithm }}
{% endfor %}
{% else %}
{% for host in groups[patroni_play_group] %}
- host all all {{ hostvars[host]['ansible_host'] }}/32 {{ patroni_postgresql_password_encryption_algorithm }}
{% endfor %}
{% endif %}
{% for host in groups[patroni_play_group] %}
- host replication {{ patroni_replication_username }} {{ hostvars[host]['ansible_host'] }}/32 {{ patroni_postgresql_password_encryption_algorithm }}
{% endfor %}
- host all all 127.0.0.1/32 {{ patroni_postgresql_password_encryption_algorithm }}
- hostssl all all 127.0.0.1/32 {{ patroni_postgresql_password_encryption_algorithm }}
- host all all 0.0.0.0/0 {{ patroni_postgresql_password_encryption_algorithm }}
- hostssl all all 0.0.0.0/0 {{ patroni_postgresql_password_encryption_algorithm }}
- host replication replicator 0.0.0.0/0 {{ patroni_postgresql_password_encryption_algorithm }}
postgresql:
listen: {{ hostvars[inventory_hostname]['ansible_host'] }},127.0.0.1:{{ patroni_postgresql_port }}
connect_address: {{ hostvars[inventory_hostname]['ansible_host'] }}:{{ patroni_postgresql_port }}
use_unix_socket: true
data_dir: {{ patroni_postgresql_home_dir }}/{{ patroni_postgresql_major_version }}/{{ patroni_postgresql_cluster_name }}
bin_dir: {{ patroni_postgresql_bin_dir }}
config_dir: {{ patroni_postgresql_home_dir }}/{{ patroni_postgresql_major_version }}/{{ patroni_postgresql_cluster_name }}
pgpass: {{ patroni_postgresql_home_dir }}/.pgpass_patroni
authentication:
replication:
username: {{ patroni_replication_username }}
password: {{ patroni_replication_password }}
{% if patroni_ssl|bool %}
sslcert: {{ patroni_ssl_path }}/{{ patroni_self_signed_cert_name }}.crt
sslkey: {{ patroni_ssl_path }}/{{ patroni_self_signed_cert_name}}.key
{% endif %}
superuser:
username: {{ patroni_superuser_username }}
password: {{ patroni_superuser_password }}
{% if patroni_ssl|bool %}
sslcert: {{ patroni_ssl_path }}/{{ patroni_self_signed_cert_name }}.crt
sslkey: {{ patroni_ssl_path }}/{{ patroni_self_signed_cert_name}}.key
{% endif %}
parameters:
unix_socket_directories: {{ patroni_postgresql_unix_socket_dir }}
{% if patroni_ssl|bool %}
ssl: on
ssl_cert_file: {{ patroni_ssl_path }}/{{ patroni_self_signed_cert_name }}.crt
ssl_key_file: {{ patroni_ssl_path }}/{{ patroni_self_signed_cert_name}}.key
{% endif %}
{% if patroni_postgresql_pg_ident is defined and patroni_postgresql_pg_ident | length > 0 %}
pg_ident:
{% for ident in patroni_postgresql_pg_ident %}
- {{ ident.mapname }} {{ ident.system_username }} {{ ident.pg_username }}
{% endfor %}
{% endif %}
remove_data_directory_on_rewind_failure: {{ patroni_remove_data_directory_on_rewind_failure |string |d(false, true) |lower }}
remove_data_directory_on_diverged_timelines: {{ patroni_remove_data_directory_on_diverged_timelines |string |d(false, true) |lower }}
# callbacks:
# on_start:
# on_stop:
# on_restart:
# on_reload:
# on_role_change:
create_replica_methods:
{% if patroni_create_replica_methods is defined and patroni_create_replica_methods | length > 0 %}
{% for create_replica_method in patroni_create_replica_methods %}
- {{ create_replica_method }}
{% endfor %}
{% if 'pgbackrest' in patroni_create_replica_methods %}
pgbackrest:
{% for item in pgbackrest %}
{{ item.option }}: {{ item.value }}
{% endfor %}
{% endif %}
{% if 'wal_g' in patroni_create_replica_methods %}
wal_g:
{% for item in patroni_wal_g_create_replica_methods %}
{{ item.option }}: {{ item.value }}
{% endfor %}
{% endif %}
{% if 'basebackup' in patroni_create_replica_methods %}
basebackup:
{% for item in patroni_basebackup_create_replica_methods %}
{{ item.option }}: '{{ item.value }}'
{% endfor %}
{% if patroni_postgresql_major_version is version('10', '>=') and patroni_postgresql_wal_dir is defined and patroni_postgresql_wal_dir | length > 0 %}
waldir: {{ patroni_postgresql_wal_dir }}
{% endif %}
{% endif %}
{% if 'pg_probackup' in patroni_create_replica_methods %}
pg_probackup:
{% for item in patroni_pg_probackup_create_replica_methods %}
{{ item.option }}: {{ item.value }}
{% endfor %}
{% endif %}
{% else %}
- basebackup
basebackup:
max-rate: '100M'
{% endif %}
watchdog:
mode: off # Allowed values: off, automatic, required
device: /dev/watchdog
safety_margin: 5
tags:
nofailover: false
noloadbalance: false
clonefrom: false
nosync: false
# specify a node to replicate from (cascading replication)
# replicatefrom: (node name)