---
#
# Setup postgresql server.
#
- name: on rhel8 hosts enable the postgresql 12 module.
  copy:
    dest: /etc/dnf/modules.d/postgresql.module
    content: |
      [postgresql]
      name=postgresql
      stream=12
      profiles=
      state=enabled
  when: ansible_distribution_major_version|int >= 8 and ansible_distribution == 'RedHat' and not inventory_hostname.startswith(('db-fas01.stg','db-koji01'))

- name: on db-fas01 enable the postgresql 9.6 module.
  copy:
    dest: /etc/dnf/modules.d/postgresql.module
    content: |
      [postgresql]
      name=postgresql
      stream=9.6
      profiles=
      state=enabled
  when: inventory_hostname.startswith('db-fas01')

- name: on db-koji01 enable the postgresql 15 module.
  copy:
    dest: /etc/dnf/modules.d/postgresql.module
    content: |
      [postgresql]
      name=postgresql
      stream=15
      profiles=
      state=enabled
  when: inventory_hostname.startswith('db-koji01')

- name: install postgresql server packages (EL < 8)
  package:
    state: present
    name:
    - postgresql-server
    - postgresql-contrib
    - postgresql-plpython
    - python-psycopg2
    - pxz
  when: ansible_distribution_major_version|int < 8 and ansible_distribution == 'RedHat'
  tags:
  - packages
  - postgresql

- name: install postgresql server packages (Fedora)
  package:
    state: present
    name:
    - postgresql-server
    - postgresql-contrib
    - postgresql-plpython3
    - python3-psycopg2
    - pxz
  when: ansible_distribution_major_version|int >= 29 and ansible_distribution == 'Fedora' and ansible_cmdline.ostree is not defined
  tags:
  - packages
  - postgresql

- name: install postgresql server packages (EL >= 8)
  package:
    state: present
    name:
    - postgresql-server
    - postgresql-contrib
    - postgresql-plpython3
    - python3-psycopg2
    - pxz
  when: ansible_distribution_major_version|int >= 8 and ansible_distribution == 'RedHat' and ansible_cmdline.ostree is not defined
  tags:
  - packages
  - postgresql

- name: Set kernel shared memory max to a larger value
  sysctl: name=kernel.shmmax value={{ kernel_shmmax }}
  when: kernel_shmmax is defined
  notify:
  - restart postgresql
  tags:
  - postgresql

- name: Initialize postgres if necessary
  command: /usr/bin/postgresql-setup initdb
           creates=/var/lib/pgsql/data/postgresql.conf
  notify:
  - restart postgresql
  tags:
  - postgresql

- name: Set postgresql-server to run on boot
  service: name=postgresql enabled=yes
  ignore_errors: true
  notify:
  - restart postgresql
  tags:
  - service
  - postgresql

- name: Add our postgres config file.
  copy: >
    src={{ item }}
    dest=/var/lib/pgsql/data/{{ item }}
    owner=postgres
  with_items:
  - pg_hba.conf
  notify:
  - restart postgresql
  tags:
  - config
  - postgresql

- name: postgresql config template (el7 / postgresql 9.2)
  template: dest=/var/lib/pgsql/data/postgresql.conf src=postgresql.conf
  when: ansible_distribution_major_version|int < 8 and ansible_distribution == 'RedHat'
  notify:
  - restart postgresql
  tags:
  - config
  - postgresql

- name: postgresql config template (Fedora / el8 / postgresql 12)
  template: dest=/var/lib/pgsql/data/postgresql.conf src=postgresql.conf-12
  when: (ansible_distribution_major_version|int == 8 and ansible_distribution == 'RedHat') or ansible_distribution != 'RedHat'
  notify:
  - restart postgresql
  tags:
  - config
  - postgresql

- name: postgresql config template (el9 / postgresql 15)
  template: dest=/var/lib/pgsql/data/postgresql.conf src=postgresql.conf-15
  when: (ansible_distribution_major_version|int == 9 and ansible_distribution == 'RedHat')
  notify:
  - restart postgresql
  tags:
  - config
  - postgresql

- name: Ensure postgres has a place to backup to
  file: dest=/backups state=directory owner=postgres
  tags:
  - postgresql

- name: Copy over backup scriplet
  copy: src=backup-database dest=/usr/local/bin/backup-database mode=0755
  when: not inventory_hostname.startswith('db-koji01.iad2')
  tags:
  - postgresql

- name: Copy over backup scriplet
  copy: src=backup-database.db-koji01 dest=/usr/local/bin/backup-database mode=0755
  when: inventory_hostname.startswith('db-koji01.iad2')
  tags:
  - postgresql

- name: Copy over anitya public backup scriplet
  copy: src=backup-database.anitya dest=/usr/local/bin/backup-database.anitya mode=0755
  tags:
  - postgresql
  when: inventory_hostname.startswith('db01.phx2') or inventory_hostname.startswith('db01.iad2')

- name: Copy over anitya publib backup cron
  copy: src=cron-backup-anitya-public dest=/etc/cron.d/cron-backup-anitya-public mode=0644
  tags:
  - postgresql
  when: inventory_hostname.startswith('db01.phx2') or inventory_hostname.startswith('db01.iad2')

- name: Set up some cronjobs to backup databases as configured
  template: >
    src=cron-backup-database
    dest=/etc/cron.d/cron-backup-database-{{ item }}
  with_items:
  - "{{ dbs_to_backup }}"
  when: dbs_to_backup != []
  tags:
  - cron
  - postgresql

#- name: install script to kill long running pgsql jobs
#  copy: >
#    src=kill_idle_xact_92.sh
#    dest=/usr/local/bin/kill_idle_xact_92.sh
#    mode=0755
#  when: inventory_hostname.startswith('db-koji01')
#  tags:
#  - cron
#  - postgresql
#
#- name: Set up a cron job to kill long postresql queries
#  copy: >
#    src=koji-cleanup-locks.cron
#    dest=/etc/cron.d/koji-cleanup-locks.cron
#  when: inventory_hostname.startswith('db-koji01')
#  tags:
#  - cron
#  - postgresql
#
- name: Set up a script for cron job to clean long fas sessions on fas database server only
  copy: >
    src=fasdb-cleanup-sessions
    dest=/usr/local/bin/fasdb-cleanup-sessions
    mode=755
  when: inventory_hostname.startswith('db-fas01')
  tags:
  - cron
  - postgresql

- name: Set up a cron job to clean long fas sessions on fas database server only
  copy: >
    src=fasdb-cleanup-sessions.cron
    dest=/etc/cron.d/fasdb-cleanup-sessions.cron
  when: inventory_hostname.startswith('db-fas01')
  tags:
  - cron
  - postgresql

- name: Set up datanommer/datagrepper SAR script
  copy: >
    src=datagrepper_sar.py
    dest=/usr/local/bin/datagrepper_sar.py mode=0700
  when: inventory_hostname.startswith('db-datanommer01')
  tags:
  - postgresql
  - SAR
  - GBDR

- import_tasks: datanommer.yml
  when: inventory_hostname.startswith('db-datanommer02') or (env == "staging" and inventory_hostname.startswith('db-datanommer'))
