From 37cad3784aa6f40fd5ee9f40c34340e11d6b4f9c Mon Sep 17 00:00:00 2001 From: GuillaumeHold Date: Fri, 5 May 2023 14:13:05 +0200 Subject: [PATCH] feat: airgap-install for postgresql server --- roles/postgresql/defaults/main.yml | 21 +++++++++ roles/postgresql/tasks/packages.yml | 72 ++++++++++++++++++++++------- 2 files changed, 76 insertions(+), 17 deletions(-) diff --git a/roles/postgresql/defaults/main.yml b/roles/postgresql/defaults/main.yml index 4bd0758..a648216 100644 --- a/roles/postgresql/defaults/main.yml +++ b/roles/postgresql/defaults/main.yml @@ -10,6 +10,8 @@ proxy_env: no_proxy: "{{ no_proxy | default ('') }}" NO_PROXY: "{{ no_proxy | default ('') }}" +postgresql_airgap_install: false +postgresql_install_from_file: false postgresql_use_public_repo: yes postgresql_public_repo_rpm_url: "https://download.postgresql.org/pub/repos/yum/reporpms/EL-{{ ansible_distribution_major_version }}-x86_64/pgdg-redhat-repo-latest.noarch.rpm" @@ -29,6 +31,25 @@ postgresql_client_default_packages: - libpq5 modern: # centos 8 and above - python3-psycopg2 + +# database packages paths for air-gap install +# provide url path to package on satelite repo or path to local file +postgresql_default_packages_path: + common: + - https://download.postgresql.org/pub/repos/yum/12/redhat/rhel-7-x86_64/postgresql12-server-12.14-1PGDG.rhel7.x86_64.rpm + legacy: # centos 7 and below + - https://download.postgresql.org/pub/repos/yum/common/redhat/rhel-7-x86_64/python2-psycopg2-2.8.6-1.rhel7.x86_64.rpm + modern: # centos 8 and above + - https://download.postgresql.org/pub/repos/yum/common/redhat/rhel-7-x86_64/python3-psycopg2-2.8.6-1.rhel7.x86_64.rpm + +# client packages paths for air-gap install +# provide url path to package on satelite repo or path to local file +postgresql_client_default_packages_path: + legacy: # centos 7 and below + - https://download.postgresql.org/pub/repos/yum/common/redhat/rhel-7-x86_64/python2-psycopg2-2.8.6-1.rhel7.x86_64.rpm + - https://download.postgresql.org/pub/repos/yum/common/redhat/rhel-7-x86_64/libpq5-15.2-42.1PGDG.rhel7.x86_64.rpm + modern: # centos 8 and above + - https://download.postgresql.org/pub/repos/yum/common/redhat/rhel-7-x86_64/python3-psycopg2-2.8.6-1.rhel7.x86_64.rpm postgresql_listen_addresses: "*" postgresql_port: 5432 diff --git a/roles/postgresql/tasks/packages.yml b/roles/postgresql/tasks/packages.yml index 1165def..2c43935 100644 --- a/roles/postgresql/tasks/packages.yml +++ b/roles/postgresql/tasks/packages.yml @@ -2,20 +2,58 @@ # SPDX-License-Identifier: Apache-2.0 --- -- name: Disable dnf module postgresql - command: dnf module disable postgresql -y - args: - warn: no - when: ansible_distribution_major_version | int > 7 - register: dnf_result - changed_when: '"Disabling modules" in dnf_result.stdout' - notify: yum makecache - -- import_tasks: public_repo.yml - -- name: Install PostgreSQL packages - yum: - name: "{{ postgresql_default_packages['common'] + postgresql_default_packages[packages_version] }}" - state: present - vars: - packages_version: "{{ ( (ansible_distribution_major_version | int) < 8) | ternary('legacy','modern') }}" + +- name: Install from public repo + block: + - name: Disable dnf module postgresql + command: dnf module disable postgresql -y + args: + warn: no + when: ansible_distribution_major_version | int > 7 + register: dnf_result + changed_when: '"Disabling modules" in dnf_result.stdout' + notify: yum makecache + + - import_tasks: public_repo.yml + + - name: Install PostgreSQL packages + yum: + name: "{{ postgresql_default_packages['common'] + postgresql_default_packages[packages_version] }}" + state: present + vars: + packages_version: "{{ ( (ansible_distribution_major_version | int) < 8) | ternary('legacy','modern') }}" + when: postgresql_airgap_install == false + +- name: Install from provided packages + block: + + - name: Disable dnf module postgresql + command: dnf module disable postgresql -y + args: + warn: no + when: ansible_distribution_major_version | int > 7 + register: dnf_result + changed_when: '"Disabling modules" in dnf_result.stdout' + notify: yum makecache + + - name: Upload {{ item }} + copy: + src: files/{{ item }} + dest: "{{ binaries_upload_dir }}" + owner: root + group: root + mode: "644" + diff: false + vars: + packages_version: "{{ ( (ansible_distribution_major_version | int) < 8) | ternary('legacy','modern') }}" + loop: "{{ postgresql_default_packages['common'] + postgresql_default_packages[packages_version] }}" + when: postgresql_install_from_file == true + + - name: Install PostgreSQL packages + yum: + name: "{{ postgresql_default_packages_path['common'] + postgresql_default_packages_path[packages_version] }}" + state: present + vars: + packages_version: "{{ ( (ansible_distribution_major_version | int) < 8) | ternary('legacy','modern') }}" + + when: postgresql_airgap_install == true