Skip to content

Commit

Permalink
Refactor postgis extension logic
Browse files Browse the repository at this point in the history
Move repo setup for extension to separate task under repositories, add logic to determine what supported postgis version should be used to avoid hard-coding version numbers.
  • Loading branch information
jdnevin authored and JonathanRenon-EDB committed Sep 20, 2024
1 parent b48bac5 commit 4cab7df
Show file tree
Hide file tree
Showing 7 changed files with 42 additions and 17 deletions.
15 changes: 11 additions & 4 deletions roles/init/defaults/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,13 @@ default_postgres_log_file: "/var/log/postgres/postgres.log"

default_postgres_tablespaces: {}

supported_postgis_versions:
- '3.3'
- '3.4'

default_postgis_version: "{{ supported_postgis_versions | last }}"
postgis_version_maj_min: "{{ default_postgis_version | split('.') }}"

default_postgres_extensions_dictionary:
edb_pg_tuner:
packages:
Expand Down Expand Up @@ -283,14 +290,14 @@ default_postgres_extensions_dictionary:
packages:
postgresql:
Debian: &debian_pg_postgis_packages
- postgresql-{{ postgres_version }}-postgis-3
- postgresql-{{ postgres_versionNN }}-postgis-{{ postgis_version_maj_min[0] }}
RedHat: &redhat_pg_postgis_packages
- postgis34_{{ postgres_version }}
- postgis{{ postgis_version_maj_min[0] + postgis_version_maj_min[1] }}_{{ postgres_versionNN }}
Ubuntu: *debian_pg_postgis_packages
SLES: *redhat_pg_postgis_packages
epas:
Debian: &postgis_as_packages
- edb-as{{ postgres_version }}-postgis34
- edb-as{{ postgres_versionNN }}-postgis{{ postgis_version_maj_min[0] + postgis_version_maj_min[1] }}
RedHat: *postgis_as_packages
Ubuntu: *postgis_as_packages
SLES: *postgis_as_packages
Expand All @@ -301,7 +308,7 @@ default_postgres_extensions_dictionary:
SLES: *redhat_pg_postgis_packages
edbpge:
Debian: &postgis_pge_packages
- edb-postgresextended{{ postgres_version }}-postgis34
- edb-postgresextended{{ postgres_versionNN }}-postgis{{ postgis_version_maj_min[0] + postgis_version_maj_min[1] }}
RedHat: *postgis_pge_packages
Ubuntu: *postgis_pge_packages
SLES: *postgis_pge_packages
Expand Down
6 changes: 6 additions & 0 deletions roles/init/tasks/postgres.yml
Original file line number Diff line number Diff line change
Expand Up @@ -578,6 +578,12 @@
when: >
'pem-server' in role and pem_database_entry is empty
- set_fact:
postgis_version_maj_min: "{{ item | split('.') }}"
loop: "{{ supported_postgis_versions }}"
when: >
postgis_version|default(default_postgis_version) is match((item + '.*') )
- name: Set postgres_extensions_dictionary
set_fact:
postgres_extensions_dictionary: "{{ default_postgres_extensions_dictionary }}"
Expand Down
12 changes: 0 additions & 12 deletions roles/postgres/pkg/tasks/list-packages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,6 @@

# © Copyright EnterpriseDB UK Limited 2015-2024 - All rights reserved.

# Some extension packages require extra repositories to be set up to install dependencies

- name: Automatically run additional repository setup commands for recognized extensions
command: >
{% for command in item.value.repository_setup_commands[ansible_distribution] %} {{ command }} {% endfor %}
loop: "{{ lookup('dict', postgres_extensions_dictionary) }}"
when: >
'repository_setup_commands' in item.value
and
(item.key in postgres_extensions
or item.key in postgres_databases|json_query('[*].extensions[*].name|[]'))
# On Postgres 9.5, pgespresso is required to support rsync-based backups
# from a replica. (To do so, we also have to create the extension on the
# corresponding primary, which we don't do by default yet, because the
Expand Down
13 changes: 13 additions & 0 deletions roles/sys/repositories/tasks/extension-repositories.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---

# © Copyright EnterpriseDB UK Limited 2015-2024 - All rights reserved.

- name: Automatically run additional repository setup commands for recognized extensions
command: >
{% for command in item.value.repository_setup_commands[ansible_distribution] %} {{ command }} {% endfor %}
loop: "{{ lookup('dict', postgres_extensions_dictionary) }}"
when: >
'repository_setup_commands' in item.value
and
(item.key in postgres_extensions
or item.key in postgres_databases|json_query('[*].extensions[*].name|[]'))
4 changes: 4 additions & 0 deletions roles/sys/repositories/tasks/os/Debian/repositories.yml
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,10 @@
repository_path: /etc/apt/sources.list.d
repository_files: "{{ _2q_repositories|map(attribute='file')|list }}"

# Some extension packages require extra repositories to be set up to install dependencies

- include_tasks: extension-repositories.yml

- name: Update apt cache
apt:
update_cache: yes
4 changes: 4 additions & 0 deletions roles/sys/repositories/tasks/os/RedHat/repositories.yml
Original file line number Diff line number Diff line change
Expand Up @@ -393,6 +393,10 @@
ansible_distribution_major_version|int == 7
and failover_manager == 'patroni'

# Some extension packages require extra repositories to be set up to install dependencies

- include_tasks: extension-repositories.yml

- include_tasks: repository-cleanup.yml
vars:
repository_path: /etc/yum.repos.d
Expand Down
5 changes: 4 additions & 1 deletion roles/sys/repositories/tasks/os/SUSE/repositories.yml
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,10 @@
uri: https://downloads.enterprisedb.com/{{ edb_repos_token }}/{{ repository }}/rpm/sles/{{ ansible_distribution_major_version }}/noarch/
name: enterprisedb-{{ repository }}-noarch

# Some extension packages require extra repositories to be set up to install dependencies

- include_tasks: extension-repositories.yml

- when: postgres_flavour == 'epas'
block:
- name: Install SUSEConnect
Expand Down Expand Up @@ -113,4 +117,3 @@
repo: "PackageHub/15.5/{{ ansible_architecture }}"
when:
repo not in registration_status.stdout

0 comments on commit 4cab7df

Please sign in to comment.