- 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