You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
hetzner-ansible/roles/postgres/tasks/base-requirements.yml

145 lines
4.5 KiB
YAML

- name: "Adding group postgresql"
group:
name: postgres
gid: 2001
- name: "Adding user postgresql"
user:
name: postgres
uid: 2000
group: postgres
home: /var/lib/postgresql
system: true
shell: /bin/bash
- name: "Ensuring repository meta is installed"
apt:
name: ["debian-keyring", "debian-archive-keyring", "apt-transport-https"]
update_cache: yes
cache_valid_time: 900
state: present
- name: "Adding an apt signing key, uses whichever key is at the url"
ansible.builtin.apt_key:
url: https://www.postgresql.org/media/keys/ACCC4CF8.asc
state: present
validate_certs: false
- name: "Adding postgresql repository into sources list"
ansible.builtin.apt_repository:
repo: deb http://apt.postgresql.org/pub/repos/apt {{ default_postgres_target_distribution }} main
state: present
- name: "Ensuring postgres is installed"
apt:
name: "postgresql-{{ default_postgres_version }}"
update_cache: yes
cache_valid_time: 900
state: present
- name: "Setup listen interfaces for postgresql instance"
lineinfile:
state: present
regex: "^listen_addresses"
line: "{{ postgres_listen_addresses }}"
path: /etc/postgresql/{{ default_postgres_version }}/main/postgresql.conf
register: listen_addresses
- name: "Setting 'max_connections={{ default_max_connections }}'"
lineinfile:
state: present
regex: "^max_connections"
line: "max_connections = {{ default_max_connections }}"
path: /etc/postgresql/{{ default_postgres_version }}/main/postgresql.conf
register: max_connections
- name: "Setting 'shared_buffers={{ default_shared_buffers }}'"
lineinfile:
state: present
regex: "^shared_buffers"
line: "shared_buffers = {{ default_shared_buffers }}"
path: /etc/postgresql/{{ default_postgres_version }}/main/postgresql.conf
register: shared_buffers
- name: "Creating archive directory if necessary"
file:
state: directory
path: /postgresql/replication
owner: postgres
group: postgres
mode: "g+s"
- name: "Install prometheus postgres exporter..."
apt:
name: "prometheus-postgres-exporter"
update_cache: yes
cache_valid_time: 900
state: present
- name: Setup prometheus-postgres-exporter interface bind
lineinfile:
path: /etc/default/prometheus-postgres-exporter
regex: "^ARGS="
line: "ARGS=\"--web.listen-address='{{ stage_private_server_ip }}:{{ monitor_port_postgres }}'\""
- name: "Set DATA_SOURCE_NAME in /etc/default/prometheus-postgres-exporter"
lineinfile:
state: present
regex: "^DATA_SOURCE_URI"
line: "DATA_SOURCE_URI='postgres@:5432/postgres?host=/var/run/postgresql'"
path: /etc/default/prometheus-postgres-exporter
- name: "Set PG_EXPORTER_AUTO_DISCOVER_DATABASES in /etc/default/prometheus-postgres-exporter"
lineinfile:
state: present
regex: "^PG_EXPORTER_AUTO_DISCOVER_DATABASES"
line: "PG_EXPORTER_AUTO_DISCOVER_DATABASES=true"
path: /etc/default/prometheus-postgres-exporter
- name: "Set PG_EXPORTER_EXTEND_QUERY_PATH in /etc/default/prometheus-postgres-exporter"
lineinfile:
state: present
regex: "^PG_EXPORTER_EXTEND_QUERY_PATH"
line: "PG_EXPORTER_EXTEND_QUERY_PATH=/metrics/queries.yaml"
path: /etc/default/prometheus-postgres-exporter
- name: "Ensure /metrics directory exists"
file:
state: directory
path: /metrics
- name: "Ensure /metrics/queries.yaml exists"
copy: src=pg-exporter-queries.yml dest=/metrics/queries.yaml
- name: Check role prometheus exists
become: yes
become_user: postgres
shell: "/usr/bin/psql -Atc \"SELECT count(rolname) FROM pg_roles where rolname='prometheus'\""
register: role_check
ignore_errors: yes
- name: "Copy prometheus_postgres_exporter init script"
copy: src=init.sql dest=/tmp/prometheus_postgres_exporter.sql
when: "role_check.stdout == '0' and server_type == 'master'"
- name: "Execute prometheus_postgres_exporter init script"
become: true
become_user: postgres
shell: "psql -f /tmp/prometheus_postgres_exporter.sql"
when: "role_check.stdout == '0' and server_type == 'master'"
- name: "Delete prometheus_postgres_exporter init script"
file: path="/tmp/prometheus_postgres_exporter.sql" state=absent
when: "role_check.stdout == '0' and server_type == 'master'"
- name: "Restarting postgres if necessary"
service:
name: postgresql
state: restarted
when: listen_addresses.changed or max_connections.changed or shared_buffers.changed
- name: "Restart prometheus postgres exporter .."
service:
name: prometheus-postgres-exporter
state: restarted