Unify approaches for repo setup between apt/dnf

Currently we maintain a separate variables for repository configuration
for Debian and EL platforms. With that these variables are not available
for override in group/host_vars, which makes it tough to maintain
different client versions between multiple availability zone.

So this patch brings in alignment in a variables that are used for
different platforms along with enabling deployers to define them
in group_vars.

Depends-On: https://review.opendev.org/c/openstack/openstack-ansible/+/929636
Change-Id: I1d90143d59423a9411ed9eeed1faf61d99551f4d
This commit is contained in:
Dmitriy Rabotyagov 2024-09-17 15:52:22 +02:00
parent 2f753e506f
commit 90deaaa8eb
6 changed files with 85 additions and 59 deletions

View File

@ -42,6 +42,10 @@ ceph_pkg_source: ceph
ceph_stable_release: reef
ceph_apt_pinned_packages: [{package: "*", release: "ceph.com", priority: 1001}]
ceph_repo_url_region: "download" # see here for other mirros http://docs.ceph.com/docs/master/install/mirrors/
ceph_repo_url: https://{{ ceph_repo_url_region }}.ceph.com/{{ _ceph_repo_distro_suffix }}-{{ ceph_stable_release }}
ceph_repos: "{{ _ceph_repos }}"
# Ceph Authentication
cephx: true

View File

@ -0,0 +1,18 @@
---
upgrade:
- |
The configuration of repositories for the ceph_client role through
the `ceph_yum_repo_url` and `ceph_repo_url` variable is changed.
These variables were replaced by unified `ceph_repo_url` variable.
With that `ceph_apt_repos` has bee replaced by `ceph_repos` variable
which should follow deb822_repository format for Debian/Ubuntu and
`yum_repository` for CentOS Stream/Rocky Linux.
deprecations:
- |
In order to unify Ceph client installation approaches for EL and Debian
platforms following variables were deprecated and are silently ignored:
* ceph_yum_repo_url
* ceph_apt_repo_url
* ceph_apt_repos

View File

@ -15,7 +15,7 @@
- name: Validate repo config is deb822 format
vars:
_repo_check: "{{ ceph_apt_repos.values() | selectattr('repo', 'defined') | map(attribute='repo') }}"
_repo_check: "{{ ceph_repos | selectattr('repo', 'defined') | map(attribute='repo') }}"
ansible.builtin.assert:
that: _repo_check | length == 0
fail_msg: "The following repository definitions must be updated to deb822 format {{ _repo_check }}"
@ -24,7 +24,7 @@
- name: Find legacy repository files
find:
paths: /etc/apt/sources.list.d/
patterns: "{{ ceph_apt_repo_url | urlsplit('hostname') | replace('.', '_') }}_*.list"
patterns: "{{ ceph_repo_url | urlsplit('hostname') | replace('.', '_') }}_*.list"
register: _legacy_apt_repos
- name: Clean up legacy repository config not in deb822 format
@ -70,7 +70,7 @@
trusted: "{{ item.trusted | default(omit) }}"
types: "{{ item.types | default(omit) }}"
uris: "{{ item.uris | default(omit) }}"
loop: "{{ ceph_apt_repos.values() }}"
loop: "{{ ceph_repos }}"
loop_control:
label: "{{ loop_label | to_json }}"
register: deb822_repos

View File

@ -15,42 +15,23 @@
- name: Download EPEL gpg keys
get_url:
url: "{{ ceph_centos_epel_key }}"
dest: /etc/pki/rpm-gpg
url: "{{ item.url }}"
dest: "{{ item.key }}"
mode: "0640"
with_items: "{{ ceph_gpg_keys | selectattr('url', 'defined') }}"
register: _get_yum_keys
until: _get_yum_keys is success
retries: 5
delay: 2
- name: Install EPEL gpg keys
rpm_key:
key: "/etc/pki/rpm-gpg/{{ ceph_centos_epel_key.split('/')[-1] }}"
state: present
- name: Install the EPEL repository
yum_repository:
name: ceph-client-deps
baseurl: "{{ ceph_centos_epel_mirror ~ '/' ~ ansible_facts['distribution_major_version'] ~ '/Everything/' ~ ansible_facts['architecture'] }}"
description: "Extra Packages for Enterprise Linux {{ ansible_facts['distribution_major_version'] }} - $basearch"
gpgcheck: yes
gpgkey: "file:///etc/pki/rpm-gpg/{{ ceph_centos_epel_key.split('/')[-1] }}"
enabled: yes
state: present
includepkgs: 'lttng-ust*, userspace-rcu, libbabeltrace, leveldb, liboath, fmt, thrift'
when:
- ansible_facts['pkg_mgr'] == 'dnf'
register: install_epel_repo
until: install_epel_repo is success
retries: 5
delay: 2
- ceph_pkg_source == 'ceph'
- name: Copy Ceph gpg keyfile to the key location
copy:
src: "gpg/{{ item.key | basename }}"
src: "{{ item.src }}"
dest: "{{ item.key }}"
mode: '0644'
with_items: "{{ ceph_gpg_keys }}"
mode: "0640"
with_items: "{{ ceph_gpg_keys | selectattr('src', 'defined') }}"
when:
- ceph_pkg_source == 'ceph'
@ -69,24 +50,22 @@
retries: 5
delay: 2
- name: Add ceph repo
- name: Install required repositories
yum_repository:
name: ceph
description: "Ceph packages for $basearch"
file: ceph
baseurl: "{{ ceph_yum_repo_url }}/$basearch"
gpgcheck: yes
enabled: yes
priority: 50
state: present
- name: Add ceph noarch repo
yum_repository:
name: ceph-noarch
description: "Ceph noarch packages"
file: ceph
baseurl: "{{ ceph_yum_repo_url }}/noarch"
gpgcheck: yes
enabled: yes
priority: 50
state: present
baseurl: "{{ item.baseurl }}"
description: "{{ item.description | default(omit) }}"
enabled: "{{ item.enabled | default(True) }}"
file: "{{ item.file | default(omit) }}"
includepkgs: "{{ item.includepkgs | default(omit) }}"
gpgcheck: "{{ item.gpgcheck | default(omit) }}"
gpgkey: "{{ item.gpgkey | default(omit) }}"
name: "{{ item.name }}"
priority: "{{ item.priority | default(omit) }}"
state: "{{ item.enabled | default('present') }}"
with_items: "{{ ceph_repos }}"
when:
- ansible_facts['pkg_mgr'] == 'dnf'
register: install_repo
until: install_repo is success
retries: 5
delay: 2

View File

@ -17,9 +17,6 @@
## APT Cache Options
cache_timeout: 600
# Ceph.com repository variables
ceph_apt_repo_url_region: "download" # or "eu" for Netherlands based mirror
ceph_apt_repo_url: "http://{{ ceph_apt_repo_url_region }}.ceph.com/debian-{{ ceph_stable_release }}"
libvirt_packages:
- libvirt-daemon-system
@ -32,12 +29,11 @@ python_ceph_packages:
- python3-rados
- python3-rbd
# Apt repositories
ceph_apt_repos:
ceph:
name: "Ceph"
_ceph_repo_distro_suffix: debian
_ceph_repos:
- name: "ceph"
suites: "{{ ansible_facts['distribution_release'] }}"
uris: "{{ ceph_apt_repo_url }}"
uris: "{{ ceph_repo_url }}"
signed_by: "{{ lookup('file', 'gpg/460f3994') }}"
components: main
architectures: "{{ ansible_facts['architecture'] }}"

View File

@ -17,6 +17,11 @@
ceph_gpg_keys:
# download.ceph.com/keys/release.asc
- key: /etc/pki/rpm-gpg/ceph_com_keys_release
src: gpg/ceph_com_keys_release
state: "{{ (ceph_pkg_source == 'ceph') | ternary('present', 'absent') }}"
- key: "/etc/pki/rpm-gpg/{{ ceph_centos_epel_key | basename }}"
url: "{{ ceph_centos_epel_key }}"
state: "{{ (ceph_pkg_source == 'ceph') | ternary('present', 'absent') }}"
libvirt_packages:
- libvirt-daemon-kvm
@ -29,7 +34,31 @@ python_ceph_packages:
- python3-rados
- python3-rbd
ceph_repo_url_region: "download" # see here for other mirros http://docs.ceph.com/docs/master/install/mirrors/
ceph_yum_repo_url: "https://{{ ceph_repo_url_region }}.ceph.com/rpm-{{ ceph_stable_release }}/el{{ ansible_facts['distribution_major_version'] }}"
_ceph_repo_distro_suffix: rpm
_ceph_repos:
- name: ceph-client-deps
baseurl: "{{ ceph_centos_epel_mirror ~ '/' ~ ansible_facts['distribution_major_version'] ~ '/Everything/' ~ ansible_facts['architecture'] }}"
description: "Extra Packages for Enterprise Linux {{ ansible_facts['distribution_major_version'] }} - $basearch"
gpgcheck: yes
gpgkey: "file:///etc/pki/rpm-gpg/{{ ceph_centos_epel_key.split('/')[-1] }}"
enabled: yes
state: "{{ (ceph_pkg_source == 'ceph') | ternary('present', 'absent') }}"
includepkgs: 'lttng-ust*, userspace-rcu, libbabeltrace, leveldb, liboath, fmt, thrift'
- name: ceph
description: "Ceph packages for $basearch"
file: ceph
baseurl: "{{ ceph_yum_repo_url }}/el$releasever/$basearch"
gpgcheck: yes
enabled: yes
priority: 50
state: "{{ (ceph_pkg_source == 'ceph') | ternary('present', 'absent') }}"
- name: ceph-noarch
description: "Ceph noarch packages"
file: ceph
baseurl: "{{ ceph_yum_repo_url }}/el$releasever/noarch"
gpgcheck: yes
enabled: yes
priority: 50
state: "{{ (ceph_pkg_source == 'ceph') | ternary('present', 'absent') }}"
# TODO mgariepy: add CentOS SIG ceph repo.