|
1 | 1 | ---
|
2 | 2 |
|
| 3 | +- name: Set PostgreSQL dotless version fact |
| 4 | + set_fact: |
| 5 | + __postgresql_version_dotless: "{{ postgresql_version | replace('.', '') }}" |
| 6 | + __postgresql_command_sep: "{{ postgresql_version is version('10', '>=') | ternary('-', '') }}" |
| 7 | + |
3 | 8 | # Using the rpm URL format of the yum module causes Ansible to download the rpm
|
4 | 9 | # every time to check whether it's installed, so, don't do that.
|
5 | 10 | - name: Check pgdg repository package (RedHat)
|
|
8 | 13 | register: __postgresql_repo_pkg_installed_result
|
9 | 14 | ignore_errors: yes
|
10 | 15 |
|
11 |
| -# URLs for Fedora look like (line split for linting purposes): |
12 |
| -# http://yum.postgresql.org/<pg_version>/fedora/fedora-<os_major_version>-<arch> |
13 |
| -# /pgdg-fedora<pg_version_without_period>-<pg_version>-<rpm_release_version>.noarch.rpm |
14 |
| -# URLs for RedHat and all derivatives look like: |
15 |
| -# http://yum.postgresql.org/<pg_version>/redhat/rhel-<os_major_version>-<arch> |
16 |
| -# /pgdg-<dist><pg_version_without_period>-<pg_version>-<rpm_release_version>.noarch.rpm |
17 |
| - |
18 |
| -# There's no direct way to determine the latest pacakge, so we have to use a |
19 |
| -# helper script to parse the directory list and figure it out. |
20 |
| -- name: Determine latest pgdg repository package (RedHat) |
21 |
| - script: >- |
22 |
| - get_repo_rpm_release.py |
23 |
| - http://yum.postgresql.org/{{ postgresql_version }}/{{ postgresql_pgdg_families[ansible_distribution] |
24 |
| - | default("redhat") }}/{{ postgresql_pgdg_shortfamilies[ansible_distribution] |
25 |
| - | default("rhel") }}-{{ ansible_distribution_major_version }}-{{ ansible_architecture }}/ {{ |
26 |
| - postgresql_pgdg_dists[ansible_distribution] |
27 |
| - }} |
28 |
| - register: __postgresql_pgdg_repo_pkg_name_result |
29 |
| - when: __postgresql_repo_pkg_installed_result is failed |
30 |
| - |
31 | 16 | - name: Install pgdg repository package (RedHat)
|
32 | 17 | yum:
|
33 | 18 | name: >-
|
34 |
| - http://yum.postgresql.org/{{ postgresql_version }}/{{ postgresql_pgdg_families[ansible_distribution] |
35 |
| - | default("redhat") }}/{{ postgresql_pgdg_shortfamilies[ansible_distribution] |
36 |
| - | default("rhel") }}-{{ ansible_distribution_major_version }}-{{ ansible_architecture }}/{{ |
37 |
| - __postgresql_pgdg_repo_pkg_name_result.stdout.strip() |
38 |
| - }} |
| 19 | + https://download.postgresql.org/pub/repos/yum/reporpms/{{ postgresql_pgdg_shortfamilies[ansible_distribution] |
| 20 | + | default("EL") }}-{{ ansible_distribution_major_version }}-{{ ansible_architecture }}/pgdg-{{ |
| 21 | + postgresql_pgdg_families[ansible_distribution] | default("redhat") }}-repo-latest.noarch.rpm |
39 | 22 | register: __postgresql_yum_result
|
40 | 23 | until: __postgresql_yum_result is succeeded
|
41 | 24 | retries: 5
|
42 | 25 | delay: 5
|
43 | 26 | when: __postgresql_repo_pkg_installed_result is failed
|
44 | 27 |
|
| 28 | +#- name: Collect installed repos |
| 29 | +# yum: |
| 30 | +# list: repos |
| 31 | +# until: __postgresql_yum_repolist_result is succeeded |
| 32 | +# retries: 5 |
| 33 | +# delay: 5 |
| 34 | +# register: __postgresql_yum_repolist_result |
| 35 | + |
| 36 | +# Not supported (and no good workaround) until there is a solution for https://github.com/ansible/ansible/issues/41178 |
| 37 | +#- name: Ensure that only the desired PostgreSQL version's repo is enabled |
| 38 | +# yum_repository: |
| 39 | +# name: item.repoid |
| 40 | +# enabled: "{{ (item.repoid == 'pgdg' ~ __postgresql_version_dotless) if item.repoid.startswith('pgdg') else item.state == 'enabled' }}" |
| 41 | +# # "{{ __postgresql_yum_repolist_result.results | selectattr('repoid', 'startswith', 'pgdg') | list }}" would be nice |
| 42 | +# # here but alas there is no `startswith` test |
| 43 | +# loop: "{{ __postgresql_yum_repolist_result.results }}" |
| 44 | + |
45 | 45 | - name: Install PostgreSQL (RedHat)
|
46 | 46 | yum:
|
47 |
| - name: postgresql{{ postgresql_version | replace('.', '') }}-server |
| 47 | + name: postgresql{{ __postgresql_version_dotless }}-server |
48 | 48 |
|
49 | 49 | - name: Check for pgdata directory
|
50 | 50 | stat:
|
|
57 | 57 | args:
|
58 | 58 | warn: false # Use of /sbin/service is valid here, ignore lint error
|
59 | 59 | when: >-
|
60 |
| - ansible_distribution_major_version | int < 7 |
| 60 | + ansible_distribution_major_version is version(7, '<') |
61 | 61 | and (pgdata_stat.stat.isdir is not defined or not pgdata_stat.stat.isdir)
|
62 | 62 |
|
63 | 63 | - name: Initialize database (RedHat >= 7)
|
64 | 64 | command: >-
|
65 |
| - /usr/pgsql-{{ postgresql_version }}/bin/postgresql{{ |
66 |
| - '-' if postgresql_version is version_compare('10', '>=') else '' }}{{ |
67 |
| - postgresql_version | replace('.', '') }}-setup initdb |
| 65 | + /usr/pgsql-{{ postgresql_version }}/bin/postgresql{{ __postgresql_command_sep }}{{ |
| 66 | + __postgresql_version_dotless }}-setup initdb |
68 | 67 | when: >-
|
69 |
| - ansible_distribution_major_version | int >= 7 |
| 68 | + ansible_distribution_major_version is version(7, '>=') |
70 | 69 | and (pgdata_stat.stat.isdir is not defined or not pgdata_stat.stat.isdir)
|
0 commit comments