From 4ede25d9541072f2106185870dfd70534fad8cf4 Mon Sep 17 00:00:00 2001 From: Kevin Velarde Date: Wed, 8 Oct 2025 09:07:11 -0600 Subject: [PATCH 1/3] Add redis.io repo template --- roles/redis/templates/redis.repo.j2 | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 roles/redis/templates/redis.repo.j2 diff --git a/roles/redis/templates/redis.repo.j2 b/roles/redis/templates/redis.repo.j2 new file mode 100644 index 00000000..c4ee1151 --- /dev/null +++ b/roles/redis/templates/redis.repo.j2 @@ -0,0 +1,5 @@ +[Redis] +name=Redis +baseurl=http://packages.redis.io/rpm/rockylinux{{ ansible_distribution_major_version }} +enabled=1 +gpgcheck=1 From 18f60f862940d22118f6def133654fa7b5e812db Mon Sep 17 00:00:00 2001 From: Kevin Velarde Date: Wed, 8 Oct 2025 15:39:20 -0600 Subject: [PATCH 2/3] Add redis_yum_repo --- roles/redis/defaults/main/install.yml | 38 +++++++++++----- roles/redis/tasks/install-from-repo.yml | 53 +++++++++++++++++------ roles/redis/tasks/install-redis-repo.yml | 20 +++++++++ roles/redis/tasks/install-remi-repo.yml | 3 +- roles/redis/tasks/validate-vars.yml | 18 ++++++-- roles/redis/templates/redis.repo.j2 | 2 +- roles/redis/vars/platform-release-6.0.yml | 15 ++++++- 7 files changed, 116 insertions(+), 33 deletions(-) create mode 100644 roles/redis/tasks/install-redis-repo.yml diff --git a/roles/redis/defaults/main/install.yml b/roles/redis/defaults/main/install.yml index ac62dd8b..10b75bf7 100644 --- a/roles/redis/defaults/main/install.yml +++ b/roles/redis/defaults/main/install.yml @@ -8,22 +8,38 @@ redis_security_packages: # Redis install from source - boolean # When set to 'true' Redis will be installed from source. # Otherwise Redis will be installed from YUM. -redis_install_from_source: true +redis_install_from_source: false -# Packages required to build Redis from source -redis_build_packages: - - tar - - unzip - - gcc - - gcc-c++ - - make - - systemd-devel +# The Redis repo to use - string +# Default - Redis +# Valid options are 'Redis', 'remi', 'default'. +# When set to 'default', neither the Remi or Redis.io repos will be installed and Redis +# will be installed from the repos already installed on the target and appstream can be used. +redis_yum_repo: Redis + +# The Redis.io repo is used when: +# - redis_install_from_source is set to 'false' +# - common_install_yum_repos is set to 'true' +# - redis_yum_repo is set to 'Redis' +redis_redis_io_repo: /etc/yum.repos.d/redis.repo +redis_redis_io_base_url: "http://packages.redis.io/rpm/rockylinux{{ ansible_distribution_major_version }}" +redis_redis_io_gpg_key: https://packages.redis.io/gpg -# The Remi and EPEL repos are used only when: +# The Remi and EPEL repos are used when: # - redis_install_from_source is set to 'false' # - common_install_yum_repos is set to 'true' -# - redis_packages contains 'remi' +# - redis_yum_repo is set to 'remi' redis_remi_repo_url: "http://rpms.remirepo.net/enterprise/remi-release-\ {{ ansible_distribution_version }}.rpm" redis_epel_repo_url: "https://dl.fedoraproject.org/pub/epel/epel-release-latest-\ {{ ansible_distribution_major_version }}.noarch.rpm" + +# The build packages are used when: +# - redis_install_from_source is set to 'true' +redis_build_packages: + - tar + - unzip + - gcc + - gcc-c++ + - make + - systemd-devel diff --git a/roles/redis/tasks/install-from-repo.yml b/roles/redis/tasks/install-from-repo.yml index 4d05685b..142bbddd 100644 --- a/roles/redis/tasks/install-from-repo.yml +++ b/roles/redis/tasks/install-from-repo.yml @@ -2,21 +2,48 @@ # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) --- - name: Install Redis from packages - when: not offline_install_enabled | bool + when: + - not offline_install_enabled | bool + - redis_packages is defined + - redis_packages is not none + - redis_packages is iterable block: - - name: Include tasks to install Remi repo - ansible.builtin.include_tasks: - file: install-remi-repo.yml - when: - - redis_packages is defined - - redis_packages is search('remi') + - name: Get list of yum repos (to disable temporarily) # noqa command-instead-of-module + ansible.builtin.command: yum -q repolist + register: repolist_result + changed_when: false - - name: Install Redis from packages - ansible.builtin.dnf: - name: '{{ redis_packages }}' - state: present - update_cache: true - enablerepo: "{{ redis_packages is search('remi') | ternary('remi', omit) }}" + - name: Install using Remi packages + when: redis_yum_repo == 'remi' + block: + - name: Include tasks to install Remi repo + ansible.builtin.include_tasks: + file: install-remi-repo.yml + + - name: Install Redis using Remi packages + ansible.builtin.dnf: + name: '{{ redis_packages }}' + state: present + update_cache: true + enablerepo: "{{ redis_yum_repo }}" + disablerepo: "{{ repolist_result.stdout_lines[1:] | map('split', ' ') + | map('first') | list }}" + + - name: Install Redis using Redis.io packages + when: redis_yum_repo == 'Redis' + block: + - name: Include tasks to install Redis.io repo + ansible.builtin.include_tasks: + file: install-redis-repo.yml + + - name: Install Redis using Redis.io packages + ansible.builtin.dnf: + name: '{{ redis_packages }}' + state: installed + update_cache: true + enablerepo: "{{ redis_yum_repo }}" + disablerepo: "{{ repolist_result.stdout_lines[1:] | map('split', ' ') + | map('first') | list }}" - name: Install Redis from packages (offline) ansible.builtin.import_role: diff --git a/roles/redis/tasks/install-redis-repo.yml b/roles/redis/tasks/install-redis-repo.yml new file mode 100644 index 00000000..ff068d9c --- /dev/null +++ b/roles/redis/tasks/install-redis-repo.yml @@ -0,0 +1,20 @@ +# Copyright (c) 2024, Itential, Inc +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) +--- +- name: Install Redis.io repo and GPG key + when: + - common_install_yum_repos | bool + - redis_yum_repo == 'Redis' + block: + - name: Install Redis.io repo + ansible.builtin.template: + src: "redis.repo.j2" + dest: "{{ redis_redis_io_repo }}" + owner: root + group: root + mode: "0644" + + - name: Import DNF repository GPG key + ansible.builtin.rpm_key: + state: present + key: "{{ redis_redis_io_gpg_key }}" diff --git a/roles/redis/tasks/install-remi-repo.yml b/roles/redis/tasks/install-remi-repo.yml index 38e371a4..90090fef 100644 --- a/roles/redis/tasks/install-remi-repo.yml +++ b/roles/redis/tasks/install-remi-repo.yml @@ -4,8 +4,7 @@ - name: Install Remi-related repos when: - common_install_yum_repos | bool - - redis_packages is defined - - redis_packages is search('remi') + - redis_yum_repo == 'remi' block: - name: Install EPEL repo ansible.builtin.dnf: diff --git a/roles/redis/tasks/validate-vars.yml b/roles/redis/tasks/validate-vars.yml index 1eb0ea1a..58803843 100644 --- a/roles/redis/tasks/validate-vars.yml +++ b/roles/redis/tasks/validate-vars.yml @@ -93,12 +93,20 @@ - redis_source_url is not defined - redis_install_from_source | bool - - name: Set redis_packages to the default value when not defined in inventory - ansible.builtin.set_fact: - redis_packages: "{{ redis_packages_default[ansible_distribution_major_version] }}" + - name: Set the Redis packages when: - redis_packages is not defined - not redis_install_from_source | bool + block: + - name: Set redis_packages to the Remi default value when not defined in inventory + ansible.builtin.set_fact: + redis_packages: "{{ redis_remi_packages_default[ansible_distribution_major_version] }}" + when: redis_yum_repo == 'remi' + + - name: Set redis_packages to the Redis.io default value when not defined in inventory + ansible.builtin.set_fact: + redis_packages: "{{ redis_redis_io_packages_default[ansible_distribution_major_version] }}" + when: redis_yum_repo == 'Redis' - name: Print Redis installation details when: not offline_install_enabled | bool @@ -110,7 +118,9 @@ - name: Print Redis installation details when installing from repo ansible.builtin.debug: - msg: "Redis packages: {{ redis_packages }}" + msg: + - "Redis packages: {{ redis_packages }}" + - "Redis yum repo: {{ redis_yum_repo }}" when: not redis_install_from_source | bool - name: Print Redis installation details (offline) diff --git a/roles/redis/templates/redis.repo.j2 b/roles/redis/templates/redis.repo.j2 index c4ee1151..192ea768 100644 --- a/roles/redis/templates/redis.repo.j2 +++ b/roles/redis/templates/redis.repo.j2 @@ -1,5 +1,5 @@ [Redis] name=Redis -baseurl=http://packages.redis.io/rpm/rockylinux{{ ansible_distribution_major_version }} +baseurl={{ redis_redis_io_base_url }} enabled=1 gpgcheck=1 diff --git a/roles/redis/vars/platform-release-6.0.yml b/roles/redis/vars/platform-release-6.0.yml index ddfbfb0e..96888dda 100644 --- a/roles/redis/vars/platform-release-6.0.yml +++ b/roles/redis/vars/platform-release-6.0.yml @@ -3,8 +3,9 @@ --- # The keys represent the EL major version (ansible_distribution_major_version) -# The redis_packages_default is used when the redis_install_from_source is set to 'false' -redis_packages_default: +# The redis_remi_packages_default is used when the redis_install_from_source is set to 'false' +# and redis_yum_repo is 'remi' +redis_remi_packages_default: "8": - "@redis:remi-7.2" "9": @@ -12,6 +13,16 @@ redis_packages_default: "2023": - "@redis:remi-7.2" +# The redis_redis_io_packages_default is used when the redis_install_from_source is set to 'false' +# and redis_yum_repo is 'remi' +redis_redis_io_packages_default: + "8": + - "redis" + "9": + - "redis" + "2023": + - "redis" + # The redis_source_url_default is used when the redis_install_from_source is set to 'true' redis_source_url_default: "8": "https://github.com/redis/redis/archive/7.4.6.tar.gz" From de7366be8992122e704c5695cf5bd7b064050810 Mon Sep 17 00:00:00 2001 From: Kevin Velarde Date: Wed, 8 Oct 2025 15:42:40 -0600 Subject: [PATCH 3/3] Fix typo in vars --- roles/redis/vars/platform-release-6.0.yml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/roles/redis/vars/platform-release-6.0.yml b/roles/redis/vars/platform-release-6.0.yml index 96888dda..6bd3fef0 100644 --- a/roles/redis/vars/platform-release-6.0.yml +++ b/roles/redis/vars/platform-release-6.0.yml @@ -3,6 +3,16 @@ --- # The keys represent the EL major version (ansible_distribution_major_version) +# The redis_redis_io_packages_default is used when the redis_install_from_source is set to 'false' +# and redis_yum_repo is 'Redis' +redis_redis_io_packages_default: + "8": + - "redis" + "9": + - "redis" + "2023": + - "redis" + # The redis_remi_packages_default is used when the redis_install_from_source is set to 'false' # and redis_yum_repo is 'remi' redis_remi_packages_default: @@ -13,16 +23,6 @@ redis_remi_packages_default: "2023": - "@redis:remi-7.2" -# The redis_redis_io_packages_default is used when the redis_install_from_source is set to 'false' -# and redis_yum_repo is 'remi' -redis_redis_io_packages_default: - "8": - - "redis" - "9": - - "redis" - "2023": - - "redis" - # The redis_source_url_default is used when the redis_install_from_source is set to 'true' redis_source_url_default: "8": "https://github.com/redis/redis/archive/7.4.6.tar.gz"