Add support for rpm to repos.yaml

Add the ability to configure repositories in the same
way as we do Debuntu ones - via repos.yaml.

Removes .repo files from base - since these are not
needed there anymore.

gpgcheck = 1 is default in docker/base/dnf.conf

Change-Id: I7df7d452c45c57c434d5b4ad15a87963e4d6d0d4
Signed-off-by: Michal Nasiadka <mnasiadka@gmail.com>
This commit is contained in:
Michal Nasiadka
2025-10-01 02:25:23 -04:00
parent 17727e1481
commit 806602e488
18 changed files with 540 additions and 327 deletions

View File

@@ -2,6 +2,7 @@
exclude_paths:
- .cache/ # implicit unless exclude_paths is defined in config
- zuul.d/
- kolla/template/repos.yaml
offline: true
parseable: true
profile: basic

View File

@@ -54,46 +54,12 @@ COPY dnf.conf /etc/dnf/dnf.conf
{% endblock %}
#### BEGIN REPO ENABLEMENT
{% set base_yum_repo_files = [
'docker-ce.repo',
'grafana.repo',
'influxdb.repo',
'kolla_el10.repo',
'mariadb.repo',
'opensearch.repo',
'proxysql.repo',
'rabbitmq_rabbitmq-server.repo',
'td.repo',
] %}
{% set base_yum_url_packages = [
] %}
{% set base_yum_repo_keys = [
] %}
{% if base_arch == 'x86_64' %}
{% set base_yum_repo_files = base_yum_repo_files + [
'rabbitmq_rabbitmq-erlang.repo',
] %}
{% elif base_arch == 'aarch64' %}
{% set base_yum_repo_files = base_yum_repo_files + [
'copr-rabbitmq-erlang.repo',
] %}
{#
SHA1 keys are not supported in RHEL9: https://github.com/rpm-software-management/rpm/issues/1977
'https://packages.erlang-solutions.com/rpm/erlang_solutions.asc',
#}
{% set base_yum_repo_keys = base_yum_repo_keys + [
] %}
{% endif %}
{%- for repo_file in base_yum_repo_files | customizable('yum_repo_files') %}
COPY {{ repo_file }} /etc/yum.repos.d/{{ repo_file }}
{%- endfor %}
{% block base_centos_repo_overrides_post_copy %}{% endblock %}
# Install what is needed for en_US.UTF-8
@@ -142,24 +108,9 @@ RUN rm -f /etc/rpm/macros.image-language-conf \
{% set base_centos_yum_repo_packages = base_centos_yum_repo_packages + [
'dnf-plugins-core'
] %}
{% set base_centos_yum_repos_to_enable = [
] %}
{% set base_centos_yum_repos_to_disable = [
'centos-ceph-squid',
'centos-nfv-openvswitch',
'epel',
'influxdb',
'opensearch-3.x',
'opensearch-dashboards-3.x',
] %}
RUN {{ macros.install_packages(base_centos_yum_repo_packages | customizable("centos_yum_repo_packages"), chain=True, clean=False) }}
{%- for repo in base_centos_yum_repos_to_enable | customizable('centos_yum_repos_to_enable') %} && dnf config-manager --enable {{ repo }} {% endfor -%}
{%- for repo in base_centos_yum_repos_to_disable | customizable('centos_yum_repos_to_disable') %} && dnf config-manager --disable {{ repo }} {% endfor -%}
{%- for key in base_centos_yum_repo_keys | customizable('centos_yum_repo_keys') %} && rpm --import {{ key }} {% endfor %} \
{% block base_centos_repo_overrides_post_yum %}{% endblock -%}
&& {{ macros.rpm_security_update(clean_package_cache) }}
@@ -203,8 +154,7 @@ RUN dnf config-manager --save --setopt=*.metalink="https://mirrors.fedoraproject
# Install base packages
{{ macros.enable_extra_repos(['epel']) }}
{{ macros.install_packages( base_centos_packages | customizable("centos_packages") | customizable("centos_binary_packages") | customizable("centos_source_packages") ) }}
{{ macros.disable_extra_repos(['epel']) }}
{{ macros.install_packages(base_centos_packages | customizable("centos_packages") | customizable("centos_binary_packages") | customizable("centos_source_packages")) }}
{# endif for base_package_type rpm #}
{% elif base_package_type == 'deb' %}

View File

@@ -1,11 +0,0 @@
# NOTE(hrw): this repository contains rebuild of Erlang package from RabbitMQ team
# from https://github.com/rabbitmq/erlang-rpm/
# Thanks to COPR we have aarch64 packages for Rocky Linux
[copr-rabbitmq-erlang]
name=openstack-kolla COPR with Erlang build for RabbitMQ
baseurl=https://download.copr.fedorainfracloud.org/results/@openstack-kolla/rabbitmq-erlang-27/rhel-$releasever-aarch64/
gpgcheck=1
enabled=0
gpgkey=https://download.copr.fedorainfracloud.org/results/@openstack-kolla/rabbitmq-erlang-27/pubkey.gpg
repo_gpgcheck=0

View File

@@ -1,6 +0,0 @@
[docker-ce]
name=Docker CE Stable - $basearch
baseurl=https://download.docker.com/linux/centos/$releasever/$basearch/stable
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg

View File

@@ -1,8 +0,0 @@
[grafana]
name=grafana
baseurl=https://rpm.grafana.com
enabled=0
gpgcheck=1
gpgkey=https://rpm.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt

View File

@@ -1,6 +0,0 @@
[influxdb]
name = InfluxDB Repository - RHEL $releasever
baseurl = https://repos.influxdata.com/stable/$basearch/main
enabled = 0
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdata-archive.key

View File

@@ -1,10 +0,0 @@
[kolla_el10]
name=Copr repo for el10-missing owned by @openstack-kolla
baseurl=https://download.copr.fedorainfracloud.org/results/@openstack-kolla/el10-missing/epel-10-$basearch/
type=rpm-md
skip_if_unavailable=True
gpgcheck=1
gpgkey=https://download.copr.fedorainfracloud.org/results/@openstack-kolla/el10-missing/pubkey.gpg
repo_gpgcheck=0
enabled=0
enabled_metadata=1

View File

@@ -1,7 +0,0 @@
[mariadb]
name = MariaDB Server
baseurl = https://dlm.mariadb.com/repo/mariadb-server/10.11/yum/rhel/$releasever/$basearch
gpgcheck = 1
enabled = 0
module_hotfixes = 1
gpgkey = https://downloads.mariadb.com/MariaDB/RPM-GPG-KEY-MariaDB

View File

@@ -1,19 +0,0 @@
[opensearch-3.x]
name=OpenSearch 3.x
baseurl=https://artifacts.opensearch.org/releases/bundle/opensearch/3.x/yum
enabled=0
repo_gpgcheck=1
gpgcheck=1
gpgkey=https://artifacts.opensearch.org/publickeys/opensearch-release.pgp
autorefresh=1
type=rpm-md
[opensearch-dashboards-3.x]
name=OpenSearch Dashboards 3.x
baseurl=https://artifacts.opensearch.org/releases/bundle/opensearch-dashboards/3.x/yum
enabled=0
repo_gpgcheck=1
gpgcheck=1
gpgkey=https://artifacts.opensearch.org/publickeys/opensearch-release.pgp
autorefresh=1
type=rpm-md

View File

@@ -1,7 +0,0 @@
[proxysql]
name = ProxySQL
# NOTE(mnasiadka): No EL10 packages yet
baseurl = https://repo.proxysql.com/ProxySQL/proxysql-3.0.x/almalinux/9
gpgkey = https://repo.proxysql.com/ProxySQL/proxysql-3.0.x/repo_pub_key
gpgcheck = 1
enabled = 0

View File

@@ -1,9 +0,0 @@
[rabbitmq_rabbitmq-erlang]
name=rabbitmq_rabbitmq-erlang
# Use a set of mirrors maintained by the RabbitMQ core team.
# The mirrors have significantly higher bandwidth quotas.
baseurl=https://yum1.rabbitmq.com/erlang/el/9/$basearch
https://yum2.rabbitmq.com/erlang/el/9/$basearch
gpgcheck=1
enabled=0
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key

View File

@@ -1,9 +0,0 @@
[rabbitmq_rabbitmq-server]
name=rabbitmq_rabbitmq-server
baseurl=https://yum2.rabbitmq.com/rabbitmq/el/9/noarch
https://yum1.rabbitmq.com/rabbitmq/el/9/noarch
gpgcheck=1
enabled=0
# Cloudsmith's repository key and RabbitMQ package signing key
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key
https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc

View File

@@ -1,7 +0,0 @@
[fluent-package-lts]
name=Fluentd Project
# NOTE(mnasiadka): Use EL9 packages for now - 10 are not available yet
baseurl=https://packages.treasuredata.com/lts/5/redhat/9/$basearch
gpgcheck=1
gpgkey=https://packages.treasuredata.com/GPG-KEY-td-agent
enabled=0

View File

@@ -10,6 +10,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
from kolla.image.utils import LOG
import os
import typing as t
@@ -17,6 +18,29 @@ import yaml
from jinja2 import pass_context
APT_ARCH = " && echo 'Architectures: {arch}' \
>>/etc/apt/sources.list.d/{repo}.sources"
APT_REPO = "echo 'Uris: {url}' >/etc/apt/sources.list.d/{repo}.sources && \
echo 'Components: {component}' >>/etc/apt/sources.list.d/{repo}.sources && \
echo 'Types: deb' >>/etc/apt/sources.list.d/{repo}.sources && \
echo 'Suites: {suite}' >>/etc/apt/sources.list.d/{repo}.sources && \
echo 'Signed-By: /etc/kolla/apt-keys/{gpg_key}' \
>>/etc/apt/sources.list.d/{repo}.sources"
DNF_BASEURL = " && echo 'baseurl={baseurl}' >>/etc/yum.repos.d/{repo}.repo"
DNF_DISABLE = "dnf config-manager --disable {name} || true"
DNF_ENABLE = "dnf config-manager --enable {name} || true"
DNF_GPGCHECK = " && echo 'gpgcheck={gpgcheck}' >>/etc/yum.repos.d/{repo}.repo"
DNF_GPGKEY = " && echo 'gpgkey={gpgkey}' >>/etc/yum.repos.d/{repo}.repo"
DNF_GPGKEY_ADD = " && echo ' {gpgkey}' >>/etc/yum.repos.d/{repo}.repo"
DNF_METALINK = " && echo 'metalink={metalink}' >>/etc/yum.repos.d/{repo}.repo"
DNF_MIRRORLIST = " && \
echo 'mirrorlist={mirrorlist}' >>/etc/yum.repos.d/{repo}.repo"
DNF_REPO = "echo '[{name}]' >/etc/yum.repos.d/{repo}.repo && \
echo 'name={name}' >>/etc/yum.repos.d/{repo}.repo && \
echo 'enabled=1' >>/etc/yum.repos.d/{repo}.repo"
DNF_REPO_GPGCHECK = " && echo 'repo_gpgcheck={repo_gpgcheck}' \
>>/etc/yum.repos.d/{repo}.repo"
def debian_package_install(packages, clean_package_cache=True):
"""Jinja utility method for building debian-based package install command.
@@ -81,13 +105,6 @@ def handle_repos(context, reponames, mode):
Distro/arch are not required to have all entries - we ignore missing ones.
"""
if mode == 'enable':
rpm_switch = '--enable'
elif mode == 'disable':
rpm_switch = '--disable'
else:
raise KeyError
if not isinstance(reponames, list):
raise TypeError("First argument should be a list of repositories")
@@ -104,6 +121,7 @@ def handle_repos(context, reponames, mode):
base_package_type = context.get('base_package_type')
base_distro = context.get('base_distro')
base_arch = context.get('base_arch')
image_name = context.get('image_name')
commands = ''
@@ -113,40 +131,82 @@ def handle_repos(context, reponames, mode):
# NOTE(hrw): Fallback to distro list
repo_list = repo_data[base_distro]
for repo in reponames:
for index, repo in enumerate(reponames):
try:
_repo = repo_list[repo]
if base_package_type == 'rpm':
commands += ' %s %s' % (rpm_switch, repo_list[repo])
elif base_package_type == 'deb':
if mode == 'enable':
commands += f"""echo 'Uris: {repo_list[repo]['url']}' \
>/etc/apt/sources.list.d/{repo}.sources \
&& echo 'Components: {repo_list[repo]['component']}' \
>>/etc/apt/sources.list.d/{repo}.sources \
&& echo 'Types: deb' >>/etc/apt/sources.list.d/{repo}.sources \
&& echo 'Suites: {repo_list[repo]['suite']}' \
>>/etc/apt/sources.list.d/{repo}.sources \
&& echo 'Signed-By: /etc/kolla/apt-keys/{repo_list[repo]['gpg_key']}' \
>>/etc/apt/sources.list.d/{repo}.sources \
&& """
if repo_list[repo]['arch']:
commands += f"""echo 'Architectures: \
{repo_list[repo]['arch']}' \
>>/etc/apt/sources.list.d/{repo}.sources \
&& """
except KeyError:
# NOTE(hrw): we ignore missing repositories for a given
# distro/arch
pass
if not _repo.get('distro'):
commands += DNF_REPO.format(
name=_repo['name'],
repo=repo,
)
if _repo.get('gpgcheck'):
commands += DNF_GPGCHECK.format(
gpgcheck=_repo['gpgcheck'],
repo=repo)
if base_package_type == 'rpm' and commands:
# NOTE(hrw): if commands is empty then no repos are enabled
# otherwise we need to add command to handle repositories
# NOTE(hrw) dnf errors out if we enable unknown repo
commands = 'dnf config-manager %s || true' % commands
elif base_package_type == 'deb':
# NOTE(hrw): Debian commands end with '&&'
commands = commands[0:-4]
if _repo.get('repo_gpgcheck'):
commands += DNF_REPO_GPGCHECK.format(
repo_gpgcheck=_repo['repo_gpgcheck'],
repo=repo)
# NOTE(mnasiadka): Support multiple gpgkeys
gpgkeys = _repo['gpgkey'].splitlines()
for _, gpgkey in enumerate(gpgkeys):
if _ == 0:
commands += DNF_GPGKEY.format(gpgkey=gpgkey,
repo=repo)
else:
commands += DNF_GPGKEY_ADD.format(
gpgkey=gpgkey,
repo=repo)
else:
commands += DNF_ENABLE.format(name=_repo['name'])
if 'baseurl' in _repo:
# NOTE(mnasiadka): Support multiple baseurls
baseurl = _repo['baseurl'].splitlines()
for url in baseurl:
commands += DNF_BASEURL.format(baseurl=url,
repo=repo)
elif 'metalink' in _repo:
commands += DNF_METALINK.format(
metalink=_repo['metalink'], repo=repo
)
elif 'mirrorlist' in _repo:
commands += DNF_MIRRORLIST.format(
mirrorlist=_repo['mirrorlist'], repo=repo
)
if index != len(reponames) - 1:
commands += " && "
elif mode == 'disable' and _repo.get('distro'):
commands += DNF_DISABLE.format(name=_repo['name'])
elif base_package_type == "deb":
if mode == "enable":
commands += APT_REPO.format(
component=_repo['component'],
gpg_key=_repo['gpg_key'],
suite=_repo['suite'],
url=_repo['url'],
repo=repo,
)
if 'arch' in _repo:
commands += APT_ARCH.format(
arch=_repo['arch'], repo=repo
)
if index != len(reponames) - 1:
commands += ' && '
except KeyError as e:
LOG.exception("Error enabling repository %s in image %s", e,
image_name)
raise
if commands:
commands = "RUN %s" % commands

View File

@@ -1,43 +1,157 @@
---
centos:
ceph: "centos-ceph-squid"
crb: "crb"
docker-ce: "docker-ce"
epel: "epel"
erlang: "rabbitmq_rabbitmq-erlang"
extras: "extras"
fluentd: "fluent-package-lts"
grafana: "grafana"
hacluster: "highavailability"
influxdb: "influxdb"
kolla_el10: "kolla_el10"
mariadb: "mariadb"
opensearch: "opensearch-3.x"
opensearch-dashboards: "opensearch-dashboards-3.x"
openvswitch: "centos-nfv-openvswitch"
opstools: "centos-opstools"
proxysql: "proxysql"
rabbitmq: "rabbitmq_rabbitmq-server"
ceph:
gpgkey: "https://www.centos.org/keys/RPM-GPG-KEY-CentOS-SIG-Storage"
metalink: "https://mirrors.centos.org/metalink?repo=centos-storage-sig-ceph-squid-9-stream&arch=$basearch"
name: "centos-ceph-squid"
crb:
distro: True
name: "crb"
docker-ce:
gpgkey: "https://download.docker.com/linux/centos/gpg"
baseurl: "https://download.docker.com/linux/centos/$releasever/$basearch/stable"
name: "docker-ce"
epel:
gpgkey: "https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-$releasever"
metalink: "https://mirrors.fedoraproject.org/metalink?repo=epel-$releasever&arch=$basearch&infra=$infra&content=$contentdir"
name: "epel"
erlang:
baseurl: |
https://yum1.rabbitmq.com/erlang/el/9/$basearch
https://yum2.rabbitmq.com/erlang/el/9/$basearch
gpgkey: "https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key"
name: "rabbitmq_rabbitmq-erlang"
extras:
distro: True
name: "extras"
fluentd:
baseurl: "https://packages.treasuredata.com/lts/5/redhat/9/$basearch"
gpgkey: "https://packages.treasuredata.com/GPG-KEY-td-agent"
name: "fluent-package-lts"
grafana:
baseurl: "https://rpm.grafana.com"
gpgkey: "https://rpm.grafana.com/gpg.key"
name: "grafana"
hacluster:
name: "highavailability"
distro: true
influxdb:
baseurl: "https://repos.influxdata.com/rhel/9/$basearch/stable"
gpgkey: "https://repos.influxdata.com/influxdata-archive_compat.key"
name: "influxdb"
kolla_el10:
baseurl: "https://download.copr.fedorainfracloud.org/results/@openstack-kolla/el10-missing/epel-10-$basearch/"
gpgkey: "https://download.copr.fedorainfracloud.org/results/@openstack-kolla/el10-missing/pubkey.gpg"
name: "kolla_el10"
mariadb:
baseurl: "https://dlm.mariadb.com/repo/mariadb-server/10.11/yum/rhel/$releasever/$basearch"
gpgkey: "https://downloads.mariadb.com/MariaDB/RPM-GPG-KEY-MariaDB"
name: "mariadb"
opensearch:
baseurl: "https://artifacts.opensearch.org/releases/bundle/opensearch/3.x/yum"
gpgkey: "https://artifacts.opensearch.org/publickeys/opensearch-release.pgp"
repo_gpgcheck: 1
name: "opensearch32.x"
opensearch-dashboards:
baseurl: "https://artifacts.opensearch.org/releases/bundle/opensearch-dashboards/3.x/yum"
gpgkey: "https://artifacts.opensearch.org/publickeys/opensearch-release.pgp"
repo_gpgcheck: 1
name: "opensearch-dashboards-3.x"
openvswitch:
gpgkey: "https://www.centos.org/keys/RPM-GPG-KEY-CentOS-SIG-NFV"
metalink: "https://mirrors.centos.org/metalink?repo=centos-nfv-sig-openvswitch-2-$stream&arch=$basearch&protocol=https,http"
name: "centos-nfv-openvswitch"
opstools:
distro: True
name: "opstools"
proxysql:
baseurl: "https://repo.proxysql.com/ProxySQL/proxysql-3.0.x/almalinux/9"
gpgkey: "https://repo.proxysql.com/ProxySQL/proxysql-3.0.x/repo_pub_key"
name: "proxysql"
rabbitmq:
baseurl: |
https://yum1.rabbitmq.com/rabbitmq/el/9/noarch
https://yum2.rabbitmq.com/rabbitmq/el/9/noarch
gpgkey: |
https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key
https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc
name: "rabbitmq_rabbitmq-server"
centos-aarch64:
ceph: "centos-ceph-squid"
crb: "crb"
docker-ce: "docker-ce"
epel: "epel"
erlang: "copr-rabbitmq-erlang"
extras: "extras"
fluentd: "fluent-package-lts"
grafana: "grafana"
hacluster: "highavailability"
influxdb: "influxdb"
kolla_el10: "kolla_el10"
mariadb: "mariadb"
opensearch: "opensearch-3.x"
opensearch-dashboards: "opensearch-dashboards-3.x"
openvswitch: "centos-nfv-openvswitch"
opstools: "centos-opstools"
proxysql: "proxysql"
rabbitmq: "rabbitmq_rabbitmq-server"
ceph:
gpgkey: "https://www.centos.org/keys/RPM-GPG-KEY-CentOS-SIG-Storage"
metalink: "https://mirrors.centos.org/metalink?repo=centos-storage-sig-ceph-squid-9-stream&arch=$basearch"
name: "centos-ceph-squid"
crb:
distro: True
name: "crb"
docker-ce:
gpgkey: "https://download.docker.com/linux/centos/gpg"
baseurl: "https://download.docker.com/linux/centos/$releasever/$basearch/stable"
name: "docker-ce"
epel:
gpgkey: "https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-$releasever"
metalink: "https://mirrors.fedoraproject.org/metalink?repo=epel-$releasever&arch=$basearch&infra=$infra&content=$contentdir"
name: "epel"
erlang:
baseurl: "https://download.copr.fedorainfracloud.org/results/@openstack-kolla/rabbitmq-erlang-27/rhel-$releasever-aarch64/"
gpgkey: "https://download.copr.fedorainfracloud.org/results/@openstack-kolla/rabbitmq-erlang-27/pubkey.gpg"
name: "copr-rabbitmq-erlang"
extras:
distro: True
name: "extras"
fluentd:
baseurl: "https://packages.treasuredata.com/lts/5/redhat/9/$basearch"
gpgkey: "https://packages.treasuredata.com/GPG-KEY-td-agent"
name: "fluent-package-lts"
grafana:
baseurl: "https://rpm.grafana.com"
gpgkey: "https://rpm.grafana.com/gpg.key"
name: "grafana"
hacluster:
name: "highavailability"
distro: true
influxdb:
baseurl: "https://repos.influxdata.com/rhel/9/$basearch/stable"
gpgkey: "https://repos.influxdata.com/influxdata-archive_compat.key"
name: "influxdb"
kolla_el10:
baseurl: "https://download.copr.fedorainfracloud.org/results/@openstack-kolla/el10-missing/epel-10-$basearch/"
gpgkey: "https://download.copr.fedorainfracloud.org/results/@openstack-kolla/el10-missing/pubkey.gpg"
name: "kolla_el10"
mariadb:
baseurl: "https://dlm.mariadb.com/repo/mariadb-server/10.11/yum/rhel/$releasever/$basearch"
gpgkey: "https://downloads.mariadb.com/MariaDB/RPM-GPG-KEY-MariaDB"
name: "mariadb"
opensearch:
baseurl: "https://artifacts.opensearch.org/releases/bundle/opensearch/3.x/yum"
gpgkey: "https://artifacts.opensearch.org/publickeys/opensearch-release.pgp"
repo_gpgcheck: 1
name: "opensearch32.x"
opensearch-dashboards:
baseurl: "https://artifacts.opensearch.org/releases/bundle/opensearch-dashboards/3.x/yum"
gpgkey: "https://artifacts.opensearch.org/publickeys/opensearch-release.pgp"
repo_gpgcheck: 1
name: "opensearch-dashboards-3.x"
openvswitch:
gpgkey: "https://www.centos.org/keys/RPM-GPG-KEY-CentOS-SIG-NFV"
metalink: "https://mirrors.centos.org/metalink?repo=centos-nfv-sig-openvswitch-2-$stream&arch=$basearch&protocol=https,http"
name: "centos-nfv-openvswitch"
opstools:
distro: True
name: "opstools"
proxysql:
baseurl: "https://repo.proxysql.com/ProxySQL/proxysql-3.0.x/almalinux/9"
gpgkey: "https://repo.proxysql.com/ProxySQL/proxysql-3.0.x/repo_pub_key"
name: "proxysql"
rabbitmq:
baseurl: |
https://yum1.rabbitmq.com/rabbitmq/el/9/noarch
https://yum2.rabbitmq.com/rabbitmq/el/9/noarch
gpgkey: |
https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key
https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc
name: "rabbitmq_rabbitmq-server"
# NOTE(mnasiadka): For RabbitMQ Debuntu suite names is following:
# https://www.rabbitmq.com/install-debian.html#apt-cloudsmith
@@ -150,44 +264,158 @@ debian-aarch64:
gpg_key: "rabbitmq.gpg"
rocky:
ceph: "centos-ceph-squid"
crb: "crb"
docker-ce: "docker-ce"
epel: "epel"
erlang: "rabbitmq_rabbitmq-erlang"
extras: "extras"
fluentd: "fluent-package-lts"
grafana: "grafana"
hacluster: "highavailability"
influxdb: "influxdb"
kolla_el10: "kolla_el10"
mariadb: "mariadb"
opensearch: "opensearch-3.x"
opensearch-dashboards: "opensearch-dashboards-3.x"
openvswitch: "centos-nfv-openvswitch"
opstools: "centos-opstools"
proxysql: "proxysql"
rabbitmq: "rabbitmq_rabbitmq-server"
ceph:
gpgkey: "https://www.centos.org/keys/RPM-GPG-KEY-CentOS-SIG-Storage"
metalink: "https://mirrors.centos.org/metalink?repo=centos-storage-sig-ceph-squid-9-stream&arch=$basearch"
name: "centos-ceph-squid"
crb:
distro: True
name: "crb"
docker-ce:
gpgkey: "https://download.docker.com/linux/centos/gpg"
baseurl: "https://download.docker.com/linux/centos/$releasever/$basearch/stable"
name: "docker-ce"
epel:
gpgkey: "https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-$releasever"
metalink: "https://mirrors.fedoraproject.org/metalink?repo=epel-$releasever&arch=$basearch&infra=$infra&content=$contentdir"
name: "epel"
erlang:
baseurl: |
https://yum1.rabbitmq.com/erlang/el/9/$basearch
https://yum2.rabbitmq.com/erlang/el/9/$basearch
gpgkey: "https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key"
name: "rabbitmq_rabbitmq-erlang"
extras:
distro: True
name: "extras"
fluentd:
baseurl: "https://packages.treasuredata.com/lts/5/redhat/9/$basearch"
gpgkey: "https://packages.treasuredata.com/GPG-KEY-td-agent"
name: "fluent-package-lts"
grafana:
baseurl: "https://rpm.grafana.com"
gpgkey: "https://rpm.grafana.com/gpg.key"
name: "grafana"
hacluster:
name: "highavailability"
distro: true
influxdb:
baseurl: "https://repos.influxdata.com/rhel/9/$basearch/stable"
gpgkey: "https://repos.influxdata.com/influxdata-archive_compat.key"
name: "influxdb"
kolla_el10:
baseurl: "https://download.copr.fedorainfracloud.org/results/@openstack-kolla/el10-missing/epel-10-$basearch/"
gpgkey: "https://download.copr.fedorainfracloud.org/results/@openstack-kolla/el10-missing/pubkey.gpg"
name: "kolla_el10"
mariadb:
baseurl: "https://dlm.mariadb.com/repo/mariadb-server/10.11/yum/rhel/$releasever/$basearch"
gpgkey: "https://downloads.mariadb.com/MariaDB/RPM-GPG-KEY-MariaDB"
name: "mariadb"
opensearch:
baseurl: "https://artifacts.opensearch.org/releases/bundle/opensearch/3.x/yum"
gpgkey: "https://artifacts.opensearch.org/publickeys/opensearch-release.pgp"
repo_gpgcheck: 1
name: "opensearch32.x"
opensearch-dashboards:
baseurl: "https://artifacts.opensearch.org/releases/bundle/opensearch-dashboards/3.x/yum"
gpgkey: "https://artifacts.opensearch.org/publickeys/opensearch-release.pgp"
repo_gpgcheck: 1
name: "opensearch-dashboards-3.x"
openvswitch:
gpgkey: "https://www.centos.org/keys/RPM-GPG-KEY-CentOS-SIG-NFV"
metalink: "https://mirrors.centos.org/metalink?repo=centos-nfv-sig-openvswitch-2-$stream&arch=$basearch&protocol=https,http"
name: "centos-nfv-openvswitch"
opstools:
distro: True
name: "opstools"
proxysql:
baseurl: "https://repo.proxysql.com/ProxySQL/proxysql-3.0.x/almalinux/9"
gpgkey: "https://repo.proxysql.com/ProxySQL/proxysql-3.0.x/repo_pub_key"
name: "proxysql"
rabbitmq:
baseurl: |
https://yum1.rabbitmq.com/rabbitmq/el/9/noarch
https://yum2.rabbitmq.com/rabbitmq/el/9/noarch
gpgkey: |
https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key
https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc
name: "rabbitmq_rabbitmq-server"
rocky-aarch64:
ceph: "centos-ceph-squid"
crb: "crb"
docker-ce: "docker-ce"
epel: "epel"
erlang: "copr-rabbitmq-erlang"
extras: "extras"
fluentd: "fluent-package-lts"
grafana: "grafana"
influxdb: "influxdb"
kolla_el10: "kolla_el10"
hacluster: "highavailability"
mariadb: "mariadb"
opensearch: "opensearch-3.x"
opensearch-dashboards: "opensearch-dashboards-3.x"
openvswitch: "centos-nfv-openvswitch"
opstools: "centos-opstools"
proxysql: "proxysql"
rabbitmq: "rabbitmq_rabbitmq-server"
ceph:
gpgkey: "https://www.centos.org/keys/RPM-GPG-KEY-CentOS-SIG-Storage"
metalink: "https://mirrors.centos.org/metalink?repo=centos-storage-sig-ceph-squid-9-stream&arch=$basearch"
name: "centos-ceph-squid"
crb:
distro: True
name: "crb"
docker-ce:
gpgkey: "https://download.docker.com/linux/centos/gpg"
baseurl: "https://download.docker.com/linux/centos/$releasever/$basearch/stable"
name: "docker-ce"
epel:
gpgkey: "https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-$releasever"
metalink: "https://mirrors.fedoraproject.org/metalink?repo=epel-$releasever&arch=$basearch&infra=$infra&content=$contentdir"
name: "epel"
erlang:
baseurl: "https://download.copr.fedorainfracloud.org/results/@openstack-kolla/rabbitmq-erlang-27/rhel-$releasever-aarch64/"
gpgkey: "https://download.copr.fedorainfracloud.org/results/@openstack-kolla/rabbitmq-erlang-27/pubkey.gpg"
name: "copr-rabbitmq-erlang"
extras:
distro: True
name: "extras"
fluentd:
baseurl: "https://packages.treasuredata.com/lts/5/redhat/9/$basearch"
gpgkey: "https://packages.treasuredata.com/GPG-KEY-td-agent"
name: "fluent-package-lts"
grafana:
baseurl: "https://rpm.grafana.com"
gpgkey: "https://rpm.grafana.com/gpg.key"
name: "grafana"
hacluster:
name: "highavailability"
distro: true
influxdb:
baseurl: "https://repos.influxdata.com/rhel/9/$basearch/stable"
gpgkey: "https://repos.influxdata.com/influxdata-archive_compat.key"
name: "influxdb"
kolla_el10:
baseurl: "https://download.copr.fedorainfracloud.org/results/@openstack-kolla/el10-missing/epel-10-$basearch/"
gpgkey: "https://download.copr.fedorainfracloud.org/results/@openstack-kolla/el10-missing/pubkey.gpg"
name: "kolla_el10"
mariadb:
baseurl: "https://dlm.mariadb.com/repo/mariadb-server/10.11/yum/rhel/$releasever/$basearch"
gpgkey: "https://downloads.mariadb.com/MariaDB/RPM-GPG-KEY-MariaDB"
name: "mariadb"
opensearch:
baseurl: "https://artifacts.opensearch.org/releases/bundle/opensearch/3.x/yum"
gpgkey: "https://artifacts.opensearch.org/publickeys/opensearch-release.pgp"
repo_gpgcheck: 1
name: "opensearch32.x"
opensearch-dashboards:
baseurl: "https://artifacts.opensearch.org/releases/bundle/opensearch-dashboards/3.x/yum"
gpgkey: "https://artifacts.opensearch.org/publickeys/opensearch-release.pgp"
repo_gpgcheck: 1
name: "opensearch-dashboards-3.x"
openvswitch:
gpgkey: "https://www.centos.org/keys/RPM-GPG-KEY-CentOS-SIG-NFV"
metalink: "https://mirrors.centos.org/metalink?repo=centos-nfv-sig-openvswitch-2-$stream&arch=$basearch&protocol=https,http"
name: "centos-nfv-openvswitch"
opstools:
distro: True
name: "opstools"
proxysql:
baseurl: "https://repo.proxysql.com/ProxySQL/proxysql-3.0.x/almalinux/9"
gpgkey: "https://repo.proxysql.com/ProxySQL/proxysql-3.0.x/repo_pub_key"
name: "proxysql"
rabbitmq:
baseurl: |
https://yum1.rabbitmq.com/rabbitmq/el/9/noarch
https://yum2.rabbitmq.com/rabbitmq/el/9/noarch
gpgkey: |
https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key
https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc
name: "rabbitmq_rabbitmq-server"
ubuntu:
docker-ce:

View File

@@ -22,50 +22,155 @@ class MethodsTest(base.TestCase):
expectCmd = 'apt-get -y install --no-install-recommends package2.deb'
self.assertEqual(expectCmd, result.split("&&")[1].strip())
def test_enable_repos_centos(self):
def test_enable_repos_centos_baseurl(self):
template_vars = {
'base_arch': 'x86_64',
'base_distro': 'centos',
'base_package_type': 'rpm',
}
result = methods.handle_repos(template_vars, ['grafana'], 'enable')
expectCmd = 'RUN dnf config-manager --enable grafana || true'
result = methods.handle_repos(template_vars, ["grafana"], "enable")
expectCmd = "RUN echo '[grafana]' "
expectCmd += ">/etc/yum.repos.d/grafana.repo && "
expectCmd += "echo 'name=grafana' "
expectCmd += ">>/etc/yum.repos.d/grafana.repo && "
expectCmd += "echo 'enabled=1' "
expectCmd += ">>/etc/yum.repos.d/grafana.repo && "
expectCmd += "echo 'gpgkey=https://rpm.grafana.com/gpg.key' "
expectCmd += ">>/etc/yum.repos.d/grafana.repo && "
expectCmd += "echo 'baseurl=https://rpm.grafana.com' "
expectCmd += ">>/etc/yum.repos.d/grafana.repo"
self.assertEqual(expectCmd, result)
def test_enable_repos_centos_missing_repo(self):
def test_enable_repos_centos_metalink(self):
template_vars = {
'base_arch': 'x86_64',
'base_distro': 'centos',
'base_package_type': 'rpm',
}
result = methods.handle_repos(template_vars, ['missing_repo'],
'enable')
expectCmd = ''
result = methods.handle_repos(template_vars, ["ceph"], "enable")
expectCmd = "RUN echo '[centos-ceph-squid]' "
expectCmd += ">/etc/yum.repos.d/ceph.repo && "
expectCmd += "echo 'name=centos-ceph-squid' "
expectCmd += ">>/etc/yum.repos.d/ceph.repo && "
expectCmd += "echo 'enabled=1' "
expectCmd += ">>/etc/yum.repos.d/ceph.repo && "
expectCmd += "echo 'gpgkey=https://www.centos.org/keys/RPM-GPG-KEY-CentOS-SIG-Storage' " # noqa: E501
expectCmd += ">>/etc/yum.repos.d/ceph.repo && "
expectCmd += "echo 'metalink=https://mirrors.centos.org/metalink?repo=centos-storage-sig-ceph-squid-9-stream&arch=$basearch' " # noqa: E501
expectCmd += ">>/etc/yum.repos.d/ceph.repo"
self.assertEqual(expectCmd, result)
def test_enable_repos_centos_arch(self):
template_vars = {
"base_arch": "aarch64",
"base_distro": "centos",
"base_package_type": "rpm",
}
result = methods.handle_repos(template_vars, ["grafana"], "enable")
expectCmd = "RUN echo '[grafana]' "
expectCmd += ">/etc/yum.repos.d/grafana.repo && "
expectCmd += "echo 'name=grafana' "
expectCmd += ">>/etc/yum.repos.d/grafana.repo && "
expectCmd += "echo 'enabled=1' "
expectCmd += ">>/etc/yum.repos.d/grafana.repo && "
expectCmd += "echo 'gpgkey=https://rpm.grafana.com/gpg.key' "
expectCmd += ">>/etc/yum.repos.d/grafana.repo && "
expectCmd += "echo 'baseurl=https://rpm.grafana.com' "
expectCmd += ">>/etc/yum.repos.d/grafana.repo"
self.assertEqual(expectCmd, result)
def test_enable_repos_centos_multiple(self):
template_vars = {
'base_arch': 'x86_64',
'base_distro': 'centos',
'base_package_type': 'rpm',
"base_arch": "x86_64",
"base_distro": "centos",
"base_package_type": "rpm",
}
result = methods.handle_repos(template_vars, ['grafana', 'ceph'],
'enable')
expectCmd = 'RUN dnf config-manager --enable grafana '
expectCmd += '--enable centos-ceph-squid || true'
result = methods.handle_repos(template_vars,
["grafana", "rabbitmq"], "enable")
expectCmd = "RUN echo '[grafana]' "
expectCmd += ">/etc/yum.repos.d/grafana.repo && "
expectCmd += "echo 'name=grafana' "
expectCmd += ">>/etc/yum.repos.d/grafana.repo && "
expectCmd += "echo 'enabled=1' "
expectCmd += ">>/etc/yum.repos.d/grafana.repo && "
expectCmd += "echo 'gpgkey=https://rpm.grafana.com/gpg.key' "
expectCmd += ">>/etc/yum.repos.d/grafana.repo && "
expectCmd += "echo 'baseurl=https://rpm.grafana.com' "
expectCmd += ">>/etc/yum.repos.d/grafana.repo && "
expectCmd += "echo '[rabbitmq_rabbitmq-server]' "
expectCmd += ">/etc/yum.repos.d/rabbitmq.repo && "
expectCmd += "echo 'name=rabbitmq_rabbitmq-server' "
expectCmd += ">>/etc/yum.repos.d/rabbitmq.repo && "
expectCmd += "echo 'enabled=1' "
expectCmd += ">>/etc/yum.repos.d/rabbitmq.repo && "
expectCmd += "echo 'gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key' " # noqa
expectCmd += ">>/etc/yum.repos.d/rabbitmq.repo && "
expectCmd += "echo ' https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc' " # noqa
expectCmd += ">>/etc/yum.repos.d/rabbitmq.repo && "
expectCmd += "echo 'baseurl=https://yum1.rabbitmq.com/rabbitmq/el/9/noarch' " # noqa
expectCmd += ">>/etc/yum.repos.d/rabbitmq.repo && "
expectCmd += "echo 'baseurl=https://yum2.rabbitmq.com/rabbitmq/el/9/noarch' " # noqa
expectCmd += ">>/etc/yum.repos.d/rabbitmq.repo"
self.assertEqual(expectCmd, result)
def test_enable_repos_centos_distro_enable(self):
template_vars = {
"base_arch": "x86_64",
"base_distro": "centos",
"base_package_type": "rpm",
}
result = methods.handle_repos(template_vars,
['crb'], 'enable')
expectCmd = "RUN dnf config-manager --enable crb || true"
self.assertEqual(expectCmd, result)
def test_enable_repos_centos_distro_disable(self):
template_vars = {
"base_arch": "x86_64",
"base_distro": "centos",
"base_package_type": "rpm",
}
result = methods.handle_repos(template_vars, ['crb'], 'disable')
expectCmd = "RUN dnf config-manager --disable crb || true"
self.assertEqual(expectCmd, result)
def test_enable_repos_centos_distro_enable_multiple(self):
template_vars = {
"base_arch": "x86_64",
"base_distro": "centos",
"base_package_type": "rpm",
}
result = methods.handle_repos(template_vars,
['crb', 'grafana'], 'enable')
expectCmd = "RUN dnf config-manager --enable crb || true && "
expectCmd += "echo '[grafana]' "
expectCmd += ">/etc/yum.repos.d/grafana.repo && "
expectCmd += "echo 'name=grafana' "
expectCmd += ">>/etc/yum.repos.d/grafana.repo && "
expectCmd += "echo 'enabled=1' "
expectCmd += ">>/etc/yum.repos.d/grafana.repo && "
expectCmd += "echo 'gpgkey=https://rpm.grafana.com/gpg.key' "
expectCmd += ">>/etc/yum.repos.d/grafana.repo && "
expectCmd += "echo 'baseurl=https://rpm.grafana.com' "
expectCmd += ">>/etc/yum.repos.d/grafana.repo"
self.assertEqual(expectCmd, result)
def test_enable_repos_debian(self):
template_vars = {
'base_arch': 'x86_64',
'base_distro': 'debian',
'base_package_type': 'deb'
"base_arch": "x86_64",
"base_distro": "debian",
"base_package_type": "deb",
}
result = methods.handle_repos(template_vars, ['grafana'], 'enable')
result = methods.handle_repos(template_vars, ["grafana"], "enable")
expectCmd = "RUN echo 'Uris: https://apt.grafana.com' "
expectCmd += ">/etc/apt/sources.list.d/grafana.sources && "
expectCmd += "echo 'Components: main' "
@@ -82,10 +187,10 @@ class MethodsTest(base.TestCase):
template_vars = {
'base_arch': 'aarch64',
'base_distro': 'debian',
'base_package_type': 'deb'
'base_package_type': 'deb',
}
result = methods.handle_repos(template_vars, ['rabbitmq'], 'enable')
result = methods.handle_repos(template_vars, ["rabbitmq"], "enable")
expectCmd = "RUN echo 'Uris: https://ppa1.rabbitmq.com/rabbitmq/rabbitmq-server/deb/debian' " # noqa: E501
expectCmd += ">/etc/apt/sources.list.d/rabbitmq.sources && "
expectCmd += "echo 'Components: main' "
@@ -104,23 +209,21 @@ class MethodsTest(base.TestCase):
template_vars = {
'base_arch': 'x86_64',
'base_distro': 'debian',
'base_package_type': 'deb'
'base_package_type': 'deb',
}
result = methods.handle_repos(template_vars, ['missing_repo'],
'enable')
expectCmd = ''
self.assertEqual(expectCmd, result)
self.assertRaises(KeyError, methods.handle_repos, template_vars,
['missing_repo'], 'enable')
def test_enable_repos_debian_multiple(self):
template_vars = {
'base_arch': 'x86_64',
'base_distro': 'debian',
'base_package_type': 'deb'
'base_package_type': 'deb',
}
result = methods.handle_repos(template_vars, ['grafana', 'rabbitmq'],
'enable')
result = methods.handle_repos(template_vars,
['grafana', 'rabbitmq'], 'enable')
expectCmd = "RUN echo 'Uris: https://apt.grafana.com' "
expectCmd += ">/etc/apt/sources.list.d/grafana.sources && "
expectCmd += "echo 'Components: main' "
@@ -146,47 +249,23 @@ class MethodsTest(base.TestCase):
self.assertEqual(expectCmd, result)
def test_disable_repos_centos(self):
template_vars = {
'base_arch': 'x86_64',
'base_distro': 'centos',
'base_package_type': 'rpm',
}
result = methods.handle_repos(template_vars, ['grafana'], 'disable')
expectCmd = 'RUN dnf config-manager --disable grafana || true'
self.assertEqual(expectCmd, result)
def test_disable_repos_centos_multiple(self):
template_vars = {
'base_arch': 'x86_64',
'base_distro': 'centos',
'base_package_type': 'rpm',
}
result = methods.handle_repos(template_vars, ['grafana', 'ceph'],
'disable')
expectCmd = 'RUN dnf config-manager --disable grafana '
expectCmd += '--disable centos-ceph-squid || true'
self.assertEqual(expectCmd, result)
# NOTE(hrw): there is no disabling of repos for Debian/Ubuntu
def test_disable_repos_debian(self):
template_vars = {
'base_arch': 'x86_64',
'base_distro': 'debian',
'base_package_type': 'deb'
'base_package_type': 'deb',
}
result = methods.handle_repos(template_vars, ['grafana'], 'disable')
expectCmd = ''
result = methods.handle_repos(template_vars, ["grafana"], "disable")
expectCmd = ""
self.assertEqual(expectCmd, result)
def test_handle_repos_string(self):
template_vars = {
'base_arch': 'x86_64',
'base_distro': 'debian',
'base_package_type': 'deb'
'base_package_type': 'deb',
}
self.assertRaisesRegex(TypeError,

View File

@@ -0,0 +1,5 @@
---
features:
- |
Adds support for configuring RPM distributions repositories
using ``repos.yaml`` functionality.

View File

@@ -65,18 +65,7 @@ RUN if [ -f /usr/etc/npmrc ]; then \
fi \
&& rm -f /etc/npmrc
{% if base_distro in ['centos', 'rocky'] %}
{# NOTE(hrw): Some images have two footer blocks.
For example neutron-infobox-ipam-agent being
child of neutron-server.
#}
RUN if [ -d /etc/yum.repos.d/not-for-ci/ ]; then \
cd /etc/yum.repos.d/ && \
rm ci-{{ base_distro }}.repo && \
mv not-for-ci/*.repo . && \
rm -rf not-for-ci; \
fi;
{% elif base_distro == "debian" %}
{% if base_distro == "debian" %}
RUN sed -i -e "s|\[trusted=yes\] http://{{ nodepool_mirror_host }}|http://deb.debian.org|" \
-e "s|\[trusted=yes\] http://{{ nodepool_mirror_host }}|http://security.debian.org|" \
/etc/apt/sources.list