ansible/test/integration/targets/setup_postgresql_db/tasks/main.yml
Sam Doran d7546ba336
Fix PostgreSQL tests for newer FreeBSD versions (#67658)
Use PostgreSQL 9.5 on FreeBSD 12.0, and PostgreSQL 11 on FreeBSD 12.1 and 11.3 due to the Python packages having a dependency on that version of PostgreSQL and automatically uninstalling PostgreSQL 9.5.

* Use separate PostgreSQL versions for 12.0 and 12.1
2020-02-27 15:01:15 -05:00

215 lines
6.3 KiB
YAML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

- name: python 2
set_fact:
python_suffix: ""
when: ansible_python_version is version('3', '<')
- name: python 3
set_fact:
python_suffix: "-py3"
when: ansible_python_version is version('3', '>=')
- name: Include distribution and Python version specific variables
include_vars: "{{ lookup('first_found', params) }}"
vars:
params:
files:
- '{{ ansible_distribution }}-{{ ansible_distribution_major_version }}{{ python_suffix }}.yml'
- '{{ ansible_distribution }}-{{ ansible_distribution_version }}{{ python_suffix }}.yml'
- '{{ ansible_os_family }}{{ python_suffix }}.yml'
- 'default{{ python_suffix }}.yml'
paths:
- "{{ role_path }}/vars"
- name: make sure the dbus service is started under systemd
systemd:
name: dbus
state: started
when: ansible_service_mgr == 'systemd' and ansible_distribution == 'Fedora'
# Make sure we start fresh
- name: stop postgresql service
service: name={{ postgresql_service }} state=stopped
ignore_errors: True
- name: remove old db (RedHat or Suse)
file:
path: "{{ pg_dir }}"
state: absent
ignore_errors: True
when: ansible_os_family == "RedHat" or ansible_os_family == "Suse"
- name: remove old db (FreeBSD)
file:
path: "{{ pg_dir }}"
state: absent
ignore_errors: True
when: ansible_os_family == "FreeBSD"
# Theoretically, pg_dropcluster should work but it doesn't so remove files
- name: remove old db config and files (debian)
file:
path: '{{ loop_item }}'
state: absent
ignore_errors: True
when: ansible_os_family == "Debian"
loop:
- /etc/postgresql
- /var/lib/postgresql
loop_control:
loop_var: loop_item
- name: install dependencies for postgresql test
package:
name: "{{ postgresql_package_item }}"
state: present
with_items: "{{ postgresql_packages }}"
loop_control:
loop_var: postgresql_package_item
- name: initialize postgres (FreeBSD)
command: /usr/local/etc/rc.d/postgresql oneinitdb
when: ansible_os_family == "FreeBSD"
- name: Initialize postgres (RedHat systemd)
command: postgresql-setup initdb
when: ansible_os_family == "RedHat" and ansible_service_mgr == "systemd"
- name: Initialize postgres (RedHat sysv)
command: /sbin/service postgresql initdb
when: ansible_os_family == "RedHat" and ansible_service_mgr != "systemd"
- name: Initialize postgres (Debian)
shell: '. /usr/share/postgresql-common/maintscripts-functions && set_system_locale && /usr/bin/pg_createcluster -u postgres {{ pg_ver }} main'
args:
creates: "/etc/postgresql/{{ pg_ver }}/"
when: ansible_os_family == 'Debian'
- name: Initialize postgres (Suse)
service: name=postgresql state=restarted
when: ansible_os_family == 'Suse'
- name: Copy pg_hba into place
template:
src: files/pg_hba.conf
dest: "{{ pg_hba_location }}"
owner: "{{ pg_user }}"
group: "{{ pg_group }}"
mode: "0644"
- name: Generate locales (Debian)
locale_gen:
name: '{{ item }}'
state: present
with_items:
- pt_BR
- es_ES
when: ansible_os_family == 'Debian'
# Suse: locales are installed by default (glibc-locale package).
# Fedora 23: locales are installed by default (glibc-common package)
# CentOS: all locales are installed by default (glibc-common package) but some
# RPM macros could prevent their installation (for example when using anaconda
# instLangs parameter).
- block:
- name: Install langpacks (RHEL8)
yum:
name:
- glibc-langpack-es
- glibc-langpack-pt
- glibc-all-langpacks
state: present
when: ansible_distribution_major_version is version('8', '>=')
- name: Check if locales need to be generated (RedHat)
shell: "localedef --list-archive | grep -a -q '^{{ locale }}$'"
register: locale_present
ignore_errors: True
with_items:
- es_ES
- pt_BR
loop_control:
loop_var: locale
- name: Reinstall internationalization files
shell: 'yum -y reinstall glibc-common || yum -y install glibc-common'
args:
warn: no
when: locale_present is failed
- name: Generate locale (RedHat)
command: 'localedef -f ISO-8859-1 -i {{ item.locale }} {{ item.locale }}'
when: item is failed
with_items: '{{ locale_present.results }}'
when: ansible_os_family == 'RedHat' and ansible_distribution != 'Fedora'
- name: Install glibc langpacks (Fedora >= 24)
package:
name: '{{ item }}'
state: 'latest'
with_items:
- glibc-langpack-es
- glibc-langpack-pt
when: ansible_distribution == 'Fedora' and ansible_distribution_major_version is version('24', '>=')
- name: enable postgresql service (FreeBSD)
lineinfile:
path: /etc/rc.conf
line: 'postgresql_enable="YES"'
when: ansible_os_family == "FreeBSD"
- name: start postgresql service
# work-around for issue on FreeBSD where service won't restart if currently stopped
service: name={{ postgresql_service }} state=started
- name: restart postgresql service
service: name={{ postgresql_service }} state=restarted
########################
# Setup dummy extension:
- name: copy control file for dummy ext
copy:
src: dummy.control
dest: "/usr/share/postgresql/{{ pg_ver }}/extension/dummy.control"
mode: 0444
when: ansible_os_family == 'Debian'
- name: copy version files for dummy ext
copy:
src: "{{ item }}"
dest: "/usr/share/postgresql/{{ pg_ver }}/extension/{{ item }}"
mode: 0444
with_items:
- dummy--1.0.sql
- dummy--2.0.sql
- dummy--3.0.sql
when: ansible_os_family == 'Debian'
- name: add update paths
file:
path: "/usr/share/postgresql/{{ pg_ver }}/extension/{{ item }}"
mode: 0444
state: touch
with_items:
- dummy--1.0--2.0.sql
- dummy--2.0--3.0.sql
when: ansible_os_family == 'Debian'
- name: Get PostgreSQL version
become_user: "{{ pg_user }}"
become: yes
shell: "echo 'SHOW SERVER_VERSION' | psql --tuples-only --no-align --dbname postgres"
register: postgres_version_resp
- name: Print PostgreSQL server version
debug:
msg: "{{ postgres_version_resp.stdout }}"
# SSL configuration.
# Restricted using Debian family because of there are errors on other distributions
# that not related with PostgreSQL or psycopg2 SSL support.
# The tests key point is to be sure that ssl options work in general
- import_tasks: ssl.yml
when:
- ansible_os_family == 'Debian'
- postgres_version_resp.stdout is version('9.4', '>=')