From 53c1c5a23ce6d962e33b76bee7fbdd928a3eeae0 Mon Sep 17 00:00:00 2001 From: Piotr Milewski Date: Wed, 10 Sep 2025 14:36:33 +0200 Subject: [PATCH 1/4] [2025.1 only] Fix Gnocchi memory leak caused by numpy==2.2.3 Gnocchi was affected by a memory leak when running with numpy==2.2.3. This issue is tracked in Gnocchi issue #1463 and impacts only the OpenStack 2025.1 release. The patch pins numpy to a safe version to avoid unbounded memory growth. More information can be found in the Gnocchi bug: https://github.com/gnocchixyz/gnocchi/issues/1463 Closes-Bug: #2122488 Change-Id: Ib271351c986a625102148a28054785fa976e0b56 Signed-off-by: Piotr Milewski --- docker/gnocchi/gnocchi-base/Dockerfile.j2 | 5 +++++ releasenotes/notes/bug-2122488-2bca0f2eb5683bd9.yaml | 8 ++++++++ 2 files changed, 13 insertions(+) create mode 100644 releasenotes/notes/bug-2122488-2bca0f2eb5683bd9.yaml diff --git a/docker/gnocchi/gnocchi-base/Dockerfile.j2 b/docker/gnocchi/gnocchi-base/Dockerfile.j2 index 865a51da2d..56f77022ac 100644 --- a/docker/gnocchi/gnocchi-base/Dockerfile.j2 +++ b/docker/gnocchi/gnocchi-base/Dockerfile.j2 @@ -43,6 +43,11 @@ COPY gnocchi_sudoers /etc/sudoers.d/kolla_gnocchi_sudoers RUN {{ macros.upper_constraints_version_change("Werkzeug", "3.0.1", "2.2.3") }} +# NOTE: It addresses a memory leak issue in Gnocchi, specific to the 2025.1 release, +# caused by a bug in the numpy package. +# More info in https://bugs.launchpad.net/kolla-ansible/+bug/2122488 +RUN {{ macros.upper_constraints_version_change("numpy", "2.2.3", "2.2.6") }} + RUN ln -s gnocchi-base-source/* gnocchi \ && {{ macros.install_pip(gnocchi_base_pip_packages | customizable("pip_packages")) }} \ && mkdir -p /etc/gnocchi \ diff --git a/releasenotes/notes/bug-2122488-2bca0f2eb5683bd9.yaml b/releasenotes/notes/bug-2122488-2bca0f2eb5683bd9.yaml new file mode 100644 index 0000000000..37ff778bc8 --- /dev/null +++ b/releasenotes/notes/bug-2122488-2bca0f2eb5683bd9.yaml @@ -0,0 +1,8 @@ +--- +fixes: + - | + Fixed a memory leak in Gnocchi caused by ``numpy==2.2.3``. + The dependency was pinned to a safe version to prevent excessive + memory consumption (see `Gnocchi issue #1463 + `_). + `LP#2122488 `__ From 5d129e2870c92709a1e911f65433bcb1758de1e4 Mon Sep 17 00:00:00 2001 From: Michal Nasiadka Date: Tue, 20 May 2025 09:21:59 +0000 Subject: [PATCH 2/4] Add support for CentOS Stream 10 Known missing packages: - mod_auth_mellon - missing SAML support in Keystone/Horizon - built in Kolla COPR - glusterfs-fuse in manila-share - built in Kolla COPR - collectd/telegraf - no opstools repository - redis - needs a switch to valkey - python3-ethtool - not required for neutron-mlnx-agent since 6 years [1] Building packages in Kolla COPR is a temporary solution until these show up in EPEL10. It seems that CentOS Stream 9 now also has a version of OpenSSH that does not support DSA. [1]: Id2cae3ac9ff049e9fc8225551f99e1e99a87fc65 Depends-On: https://review.opendev.org/c/openstack/kolla-ansible/+/968638 Depends-On: https://review.opendev.org/c/openstack/ansible-collection-kolla/+/962714 Change-Id: I7074fabcf95184fcfd2561648ae1e05acfb0bc11 Signed-off-by: Michal Nasiadka (cherry picked from commit 9e36b8976657e5aaf285f4ab9f65603ab475fd89) --- .zuul.d/base.yaml | 12 ++++ .zuul.d/centos.yaml | 29 ++++++++++ docker/base/Dockerfile.j2 | 55 ++++++++++++++----- docker/base/influxdb.repo | 3 +- docker/base/kolla_el10.repo | 10 ++++ docker/base/proxysql.repo | 3 +- docker/base/td.repo | 3 +- docker/ironic/ironic-conductor/Dockerfile.j2 | 10 +++- docker/keystone/keystone-base/Dockerfile.j2 | 6 ++ docker/keystone/keystone-ssh/extend_start.sh | 7 ++- docker/kolla-toolbox/Dockerfile.j2 | 21 +++++-- docker/kuryr/kuryr-libnetwork/Dockerfile.j2 | 12 +++- docker/manila/manila-base/Dockerfile.j2 | 6 +- docker/manila/manila-share/Dockerfile.j2 | 6 +- docker/neutron/neutron-base/Dockerfile.j2 | 13 ++++- .../neutron/neutron-mlnx-agent/Dockerfile.j2 | 7 ++- docker/nova/nova-base/Dockerfile.j2 | 16 ++++-- docker/nova/nova-compute-ironic/Dockerfile.j2 | 11 +++- docker/nova/nova-libvirt/Dockerfile.j2 | 15 ++++- docker/nova/nova-ssh/extend_start.sh | 7 ++- docker/octavia/octavia-base/Dockerfile.j2 | 12 +++- .../opensearch-dashboards/Dockerfile.j2 | 4 ++ docker/opensearch/opensearch/Dockerfile.j2 | 6 +- docker/openstack-base/Dockerfile.j2 | 11 +++- .../openvswitch-base/Dockerfile.j2 | 13 ++++- docker/ovn/ovn-base/Dockerfile.j2 | 12 +++- docker/ovn/ovn-controller/Dockerfile.j2 | 12 +++- docker/ovn/ovn-nb-db-server/Dockerfile.j2 | 12 +++- docker/ovn/ovn-northd/Dockerfile.j2 | 12 +++- docker/ovn/ovn-sb-db-server/Dockerfile.j2 | 12 +++- docker/zun/zun-cni-daemon/Dockerfile.j2 | 12 +++- kolla/common/config.py | 2 +- kolla/image/kolla_worker.py | 3 +- kolla/image/unbuildable.py | 6 ++ kolla/template/methods.py | 15 +++-- kolla/template/repos-el10.yaml | 39 +++++++++++++ tests/playbooks/run.yml | 10 ++++ tests/templates/template_overrides.j2 | 9 +-- 38 files changed, 376 insertions(+), 78 deletions(-) create mode 100644 docker/base/kolla_el10.repo create mode 100644 kolla/template/repos-el10.yaml diff --git a/.zuul.d/base.yaml b/.zuul.d/base.yaml index 25f571ade6..1d5896b293 100644 --- a/.zuul.d/base.yaml +++ b/.zuul.d/base.yaml @@ -75,6 +75,12 @@ - name: primary label: centos-9-stream +- nodeset: + name: kolla-centos-10-stream + nodes: + - name: primary + label: centos-10-stream-8GB + - nodeset: name: kolla-rockylinux-9 nodes: @@ -99,6 +105,12 @@ - name: primary label: centos-9-stream-arm64 +- nodeset: + name: kolla-centos-10-stream-aarch64 + nodes: + - name: primary + label: centos-10-stream-arm64-8GB + - nodeset: name: kolla-debian-bookworm-aarch64 nodes: diff --git a/.zuul.d/centos.yaml b/.zuul.d/centos.yaml index 94b8cad318..ad3ef206a9 100644 --- a/.zuul.d/centos.yaml +++ b/.zuul.d/centos.yaml @@ -3,13 +3,17 @@ check: jobs: - kolla-build-centos9s + - kolla-build-centos10s - kolla-ansible-centos9s + - kolla-ansible-centos10s check-arm64: jobs: - kolla-build-centos9s-aarch64 + - kolla-build-centos10s-aarch64 experimental: jobs: - kolla-build-no-infra-wheels-centos9s + - kolla-build-no-infra-wheels-centos10s - job: name: kolla-build-centos9s @@ -19,6 +23,16 @@ base_distro: centos voting: false +- job: + name: kolla-build-centos10s + parent: kolla-base + nodeset: kolla-centos-10-stream + vars: + base_distro: centos + base_distro_version: 10 + base_distro_tag: 'stream10' + voting: false + - job: name: kolla-build-centos9s-aarch64 parent: kolla-build-centos9s @@ -27,9 +41,24 @@ base_arch: aarch64 voting: false +- job: + name: kolla-build-centos10s-aarch64 + parent: kolla-build-centos10s + nodeset: kolla-centos-10-stream-aarch64 + vars: + base_arch: aarch64 + voting: false + - job: name: kolla-build-no-infra-wheels-centos9s parent: kolla-build-no-infra-wheels-base nodeset: kolla-centos-9-stream vars: base_distro: centos + +- job: + name: kolla-build-no-infra-wheels-centos10s + parent: kolla-build-no-infra-wheels-base + nodeset: kolla-centos-10-stream + vars: + base_distro: centos diff --git a/docker/base/Dockerfile.j2 b/docker/base/Dockerfile.j2 index 6ac28ba853..10a78cb8d9 100644 --- a/docker/base/Dockerfile.j2 +++ b/docker/base/Dockerfile.j2 @@ -55,6 +55,7 @@ COPY dnf.conf /etc/dnf/dnf.conf 'docker-ce.repo', 'grafana.repo', 'influxdb.repo', + 'kolla_el10.repo', 'mariadb.repo', 'opensearch.repo', 'proxysql.repo', @@ -129,13 +130,21 @@ RUN rm -f /etc/rpm/macros.image-language-conf \ {% set base_centos_yum_repo_keys = [ ] %} -{% set base_centos_yum_repo_packages = [ - 'centos-release-ceph-reef', - 'centos-release-nfv-openvswitch', - 'centos-release-openstack-epoxy', - 'centos-release-opstools', - 'epel-release', -] %} +{% if base_distro_tag.startswith('stream10') %} + {% set base_centos_yum_repo_packages = [ + 'centos-release-ceph-squid', + 'centos-release-nfv-openvswitch', + 'epel-release', + ] %} +{% else %} + {% set base_centos_yum_repo_packages = [ + 'centos-release-ceph-reef', + 'centos-release-nfv-openvswitch', + 'centos-release-openstack-epoxy', + 'centos-release-opstools', + 'epel-release', + ] %} +{% endif %} # We need 'dnf-plugins-core' for 'dnf config-manager' {% set base_centos_yum_repo_packages = base_centos_yum_repo_packages + [ @@ -147,15 +156,26 @@ RUN rm -f /etc/rpm/macros.image-language-conf \ # FIXME(hrw): entries not starting with 'centos-' (and 'centos-nfv-ovs') are # from delorean or rdo-release-* package # https://review.rdoproject.org/r/c/rdo-infra/ansible-role-dlrn/+/33241 -{% set base_centos_yum_repos_to_disable = [ - 'centos-ceph-reef', - 'centos-nfv-openvswitch', - 'centos-opstools', - 'epel', - 'influxdb', - 'opensearch-2.x', - 'opensearch-dashboards-2.x', +{% if base_distro_tag.startswith('stream10') %} + {% set base_centos_yum_repos_to_disable = [ + 'centos-ceph-squid', + 'centos-nfv-openvswitch', + 'epel', + 'influxdb', + 'opensearch-2.x', + 'opensearch-dashboards-2.x', ] %} +{% else %} + {% set base_centos_yum_repos_to_disable = [ + 'centos-ceph-reef', + 'centos-nfv-openvswitch', + 'centos-opstools', + 'epel', + 'influxdb', + 'opensearch-2.x', + 'opensearch-dashboards-2.x', +] %} +{% endif %} RUN {{ macros.install_packages(base_centos_yum_repo_packages | customizable("centos_yum_repo_packages"), chain=True, clean=False) }} @@ -174,6 +194,11 @@ RUN {{ macros.install_packages(base_centos_yum_repo_packages | customizable("cen {% block base_redhat_binary_versionlock %}{% endblock %} +{# NOTE(mnasiadka): In EL10 we install dumb-init from epel #} +{% if base_distro_tag.startswith('stream10') %} +RUN dnf config-manager --enable epel +{% endif %} + {# NOTE(hrw): CentOS Stream 9 has curl-minimal, Rocky Linux 9 has curl so we do not install any #} {% set base_centos_packages = [ 'ca-certificates', diff --git a/docker/base/influxdb.repo b/docker/base/influxdb.repo index ae63c20bea..a6f7b4e12f 100644 --- a/docker/base/influxdb.repo +++ b/docker/base/influxdb.repo @@ -1,6 +1,7 @@ [influxdb] name = InfluxDB Repository - RHEL $releasever -baseurl = https://repos.influxdata.com/stable/$basearch/main +# NOTE(mnasiadka): Use RHEL9 for both 9 and 10 +baseurl = https://repos.influxdata.com/rhel/9/$basearch/stable enabled = 0 gpgcheck = 1 gpgkey = https://repos.influxdata.com/influxdata-archive.key diff --git a/docker/base/kolla_el10.repo b/docker/base/kolla_el10.repo new file mode 100644 index 0000000000..b1ffee6757 --- /dev/null +++ b/docker/base/kolla_el10.repo @@ -0,0 +1,10 @@ +[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 diff --git a/docker/base/proxysql.repo b/docker/base/proxysql.repo index 938f565219..1d45963e05 100644 --- a/docker/base/proxysql.repo +++ b/docker/base/proxysql.repo @@ -1,6 +1,7 @@ [proxysql] name = ProxySQL -baseurl = https://repo.proxysql.com/ProxySQL/proxysql-2.7.x/almalinux/$releasever +# NOTE(mnasiadka): use 9 for both 9 and 10 +baseurl = https://repo.proxysql.com/ProxySQL/proxysql-2.7.x/almalinux/9 gpgkey = https://repo.proxysql.com/ProxySQL/proxysql-2.7.x/repo_pub_key gpgcheck = 1 enabled = 0 diff --git a/docker/base/td.repo b/docker/base/td.repo index e06b629916..8212817fab 100644 --- a/docker/base/td.repo +++ b/docker/base/td.repo @@ -1,6 +1,7 @@ [fluent-package-lts] name=Fluentd Project -baseurl=https://packages.treasuredata.com/lts/5/redhat/$releasever/$basearch +# 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 diff --git a/docker/ironic/ironic-conductor/Dockerfile.j2 b/docker/ironic/ironic-conductor/Dockerfile.j2 index d89dca66db..3f9a3fbe0b 100644 --- a/docker/ironic/ironic-conductor/Dockerfile.j2 +++ b/docker/ironic/ironic-conductor/Dockerfile.j2 @@ -13,7 +13,6 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build 'e2fsprogs', 'fuse', 'gdisk', - 'genisoimage', 'ipmitool', 'mtools', 'openssh-clients', @@ -25,6 +24,15 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build 'util-linux', 'xfsprogs', ] %} + {% if base_distro_tag.startswith('stream10') %} + {% set ironic_conductor_packages = ironic_conductor_packages + [ + 'xorriso' + ] %} + {% else %} + {% set ironic_conductor_packages = ironic_conductor_packages + [ + 'genisoimage' + ] %} + {% endif %} {% if base_arch in ['x86_64'] %} {% set ironic_conductor_packages = ironic_conductor_packages + [ 'syslinux' diff --git a/docker/keystone/keystone-base/Dockerfile.j2 b/docker/keystone/keystone-base/Dockerfile.j2 index 7764accbda..a7fd0f6aae 100644 --- a/docker/keystone/keystone-base/Dockerfile.j2 +++ b/docker/keystone/keystone-base/Dockerfile.j2 @@ -7,6 +7,12 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build {% import "macros.j2" as macros with context %} +{% if base_distro_tag.startswith('stream10') %} + {# NOTE(mnasiadka): mod_auth_mellon missing in CentOS 10 Stream - temporarily from Kolla COPR #} + {{ macros.enable_extra_repos(['kolla_el10']) }} +{% endif %} +{{ macros.enable_extra_repos(['epel']) }} + {{ macros.configure_user(name='keystone') }} {% if base_package_type == 'rpm' %} diff --git a/docker/keystone/keystone-ssh/extend_start.sh b/docker/keystone/keystone-ssh/extend_start.sh index dc8f04b493..3d0ab58b8c 100644 --- a/docker/keystone/keystone-ssh/extend_start.sh +++ b/docker/keystone/keystone-ssh/extend_start.sh @@ -1,6 +1,11 @@ #!/bin/bash -SSH_HOST_KEY_TYPES=( "rsa" "dsa" "ecdsa" "ed25519" ) +if [[ "${KOLLA_BASE_DISTRO}" =~ centos|rocky ]]; then + # NOTE(mnasiadka): EL10 and CentOS Stream 9 does not support dsa + SSH_HOST_KEY_TYPES=( "rsa" "ecdsa" "ed25519" ) +else + SSH_HOST_KEY_TYPES=( "rsa" "dsa" "ecdsa" "ed25519" ) +fi for key_type in ${SSH_HOST_KEY_TYPES[@]}; do KEY_PATH=/etc/ssh/ssh_host_${key_type}_key diff --git a/docker/kolla-toolbox/Dockerfile.j2 b/docker/kolla-toolbox/Dockerfile.j2 index 4e9fb42d3d..f60d1f2647 100644 --- a/docker/kolla-toolbox/Dockerfile.j2 +++ b/docker/kolla-toolbox/Dockerfile.j2 @@ -23,7 +23,6 @@ COPY apt_preferences_rabbitmq.{{ base_distro }} /etc/apt/preferences.d/rabbitmq {% if base_package_type == 'rpm' %} {% set kolla_toolbox_packages = [ - 'crudini', 'erlang-26.2.*', 'gcc', 'gdisk', @@ -35,17 +34,27 @@ COPY apt_preferences_rabbitmq.{{ base_distro }} /etc/apt/preferences.d/rabbitmq 'make', 'openssh-clients', 'openssl-devel', - 'openvswitch', - 'python3.12', - 'python3.12-devel', 'rabbitmq-server-4.0.*' ] %} + {% if base_distro_tag.startswith('stream10') %} + {% set kolla_toolbox_packages = kolla_toolbox_packages + [ + 'openvswitch3.5', + 'python3', + 'python3-devel', + ] %} + {% else %} + {% set kolla_toolbox_packages = kolla_toolbox_packages + [ + 'crudini', + 'openvswitch', + 'python3.12', + 'python3.12-devel', + ] %} + {% endif %} {% elif base_package_type == 'deb' %} {% set kolla_toolbox_packages = [ 'build-essential', 'ca-certificates', - 'crudini', 'gdisk', 'git', 'jq', @@ -72,7 +81,7 @@ COPY apt_preferences_rabbitmq.{{ base_distro }} /etc/apt/preferences.d/rabbitmq [1] https://review.opendev.org/c/openstack/kolla/+/924245 #} -{% if base_package_type == 'rpm' %} +{% if base_package_type == 'rpm' and not base_distro_tag.startswith('stream10') %} RUN cd /usr/bin && \ rm -f python3 && \ ln -s python3.12 python3 diff --git a/docker/kuryr/kuryr-libnetwork/Dockerfile.j2 b/docker/kuryr/kuryr-libnetwork/Dockerfile.j2 index 6d0bed487b..2f18048348 100644 --- a/docker/kuryr/kuryr-libnetwork/Dockerfile.j2 +++ b/docker/kuryr/kuryr-libnetwork/Dockerfile.j2 @@ -11,9 +11,15 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build {% if base_package_type == 'rpm' %} - {% set kuryr_libnetwork_packages = [ - 'openvswitch' - ] %} + {% if base_distro_tag.startswith('stream10') %} + {% set kuryr_libnetwork_packages = [ + 'openvswitch3.5' + ] %} + {% else %} + {% set kuryr_libnetwork_packages = [ + 'openvswitch' + ] %} + {% endif %} {% elif base_package_type == 'deb' %} diff --git a/docker/manila/manila-base/Dockerfile.j2 b/docker/manila/manila-base/Dockerfile.j2 index 0580cccbc3..4ff52b7610 100644 --- a/docker/manila/manila-base/Dockerfile.j2 +++ b/docker/manila/manila-base/Dockerfile.j2 @@ -12,7 +12,11 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build {% if base_package_type == 'rpm' %} - {% set manila_base_packages = ['openvswitch'] %} + {% if base_distro_tag.startswith('stream10') %} + {% set manila_base_packages = ['openvswitch3.5'] %} + {% else %} + {% set manila_base_packages = ['openvswitch'] %} + {% endif %} {% elif base_package_type == 'deb' %} diff --git a/docker/manila/manila-share/Dockerfile.j2 b/docker/manila/manila-share/Dockerfile.j2 index 22dceb3422..1928f4028f 100644 --- a/docker/manila/manila-share/Dockerfile.j2 +++ b/docker/manila/manila-share/Dockerfile.j2 @@ -12,9 +12,13 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build {% if base_package_type == 'rpm' %} {% set manila_share_packages = [ 'ceph-common', - 'glusterfs-fuse', 'sqlite', ] %} + {% if not base_distro_tag.startswith('stream10') %} + {% set manila_share_packages = manila_share_packages + [ + 'glusterfs-fuse' + ] %} + {% endif %} {% elif base_package_type == 'deb' %} {% set manila_share_packages = [ 'ceph-common', diff --git a/docker/neutron/neutron-base/Dockerfile.j2 b/docker/neutron/neutron-base/Dockerfile.j2 index 267dac3fa7..27fa2a854f 100644 --- a/docker/neutron/neutron-base/Dockerfile.j2 +++ b/docker/neutron/neutron-base/Dockerfile.j2 @@ -24,11 +24,20 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build 'iputils', 'keepalived', 'net-tools', - 'openvswitch', - 'python3-openvswitch', 'radvd', 'uuid' ] %} + {% if base_distro_tag.startswith('stream10') %} + {% set neutron_base_packages = neutron_base_packages + [ + 'openvswitch3.5', + 'python3-openvswitch3.5' + ] %} + {% else %} + {% set neutron_base_packages = neutron_base_packages + [ + 'openvswitch', + 'python3-openvswitch' + ] %} + {% endif %} {% elif base_package_type == 'deb' %} diff --git a/docker/neutron/neutron-mlnx-agent/Dockerfile.j2 b/docker/neutron/neutron-mlnx-agent/Dockerfile.j2 index 6e2252ac37..4d4dfc0e27 100644 --- a/docker/neutron/neutron-mlnx-agent/Dockerfile.j2 +++ b/docker/neutron/neutron-mlnx-agent/Dockerfile.j2 @@ -9,9 +9,14 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build {% set neutron_mlnx_agent_packages = [ 'python3-libvirt', - 'python3-ethtool', ] %} +{% if not base_distro_tag.startswith('stream10') %} + {% set neutron_mlnx_agent_packages = neutron_mlnx_agent_packages + [ + 'python3-ethtool' + ] %} +{% endif %} + {{ macros.install_packages(neutron_mlnx_agent_packages | customizable("packages")) }} {% set neutron_mlnx_agent_pip_packages = [ diff --git a/docker/nova/nova-base/Dockerfile.j2 b/docker/nova/nova-base/Dockerfile.j2 index 7027479767..4dd5fb8e8f 100644 --- a/docker/nova/nova-base/Dockerfile.j2 +++ b/docker/nova/nova-base/Dockerfile.j2 @@ -12,10 +12,18 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build {% if base_package_type == 'rpm' %} - {% set nova_base_packages = [ - 'openvswitch', - 'python3-openvswitch' - ] %} + {% if base_distro_tag.startswith('stream10') %} + {% set nova_base_packages = [ + 'openvswitch3.5', + 'python3-openvswitch3.5' + ] %} + {% else %} + {% set nova_base_packages = [ + 'openvswitch', + 'python3-openvswitch' + ] %} + {% endif %} + {% if base_arch == 'x86_64' %} {% set nova_base_packages = nova_base_packages + [ 'edk2-ovmf' diff --git a/docker/nova/nova-compute-ironic/Dockerfile.j2 b/docker/nova/nova-compute-ironic/Dockerfile.j2 index 56d1f0abdf..b75d98a704 100644 --- a/docker/nova/nova-compute-ironic/Dockerfile.j2 +++ b/docker/nova/nova-compute-ironic/Dockerfile.j2 @@ -7,7 +7,16 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build {% import "macros.j2" as macros with context %} -{% set nova_compute_ironic_packages = ['genisoimage', 'nvme-cli'] %} +{% set nova_compute_ironic_packages = ['nvme-cli'] %} +{% if base_distro_tag.startswith('stream10') %} + {% set nova_compute_ironic_packages = nova_compute_ironic_packages + [ + 'xorriso' + ] %} +{% else %} + {% set nova_compute_ironic_packages = nova_compute_ironic_packages + [ + 'genisoimage' + ] %} +{% endif %} {{ macros.install_packages(nova_compute_ironic_packages | customizable("packages")) }} diff --git a/docker/nova/nova-libvirt/Dockerfile.j2 b/docker/nova/nova-libvirt/Dockerfile.j2 index f738fdc358..d8723c0842 100644 --- a/docker/nova/nova-libvirt/Dockerfile.j2 +++ b/docker/nova/nova-libvirt/Dockerfile.j2 @@ -10,6 +10,9 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build {{ macros.configure_user(name='nova', groups='qemu') }} {{ macros.enable_extra_repos(['ceph', 'epel', 'openvswitch']) }} +{% if base_distro_tag.startswith('stream10') %} + {{ macros.enable_extra_repos(['crb']) }} +{% endif %} {% if base_package_type == 'rpm' %} @@ -23,11 +26,21 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build 'libvirt-daemon-config-nwfilter', 'libvirt-daemon-driver-nwfilter', 'libvirt-daemon-driver-nodedev', - 'openvswitch', 'qemu-img', 'qemu-kvm', 'swtpm', ] %} + + {% if base_distro_tag.startswith('10stream') %} + {% set nova_libvirt_packages = nova_libvirt_packages + [ + 'openvswitch3.5' + ] %} + {% else %} + {% set nova_libvirt_packages = nova_libvirt_packages + [ + 'openvswitch3.5' + ] %} + {% endif %} + {% if base_arch == 'x86_64' %} {% set nova_libvirt_packages = nova_libvirt_packages + [ 'edk2-ovmf' diff --git a/docker/nova/nova-ssh/extend_start.sh b/docker/nova/nova-ssh/extend_start.sh index 6d52952a75..d71dccef14 100644 --- a/docker/nova/nova-ssh/extend_start.sh +++ b/docker/nova/nova-ssh/extend_start.sh @@ -1,6 +1,11 @@ #!/bin/bash -SSH_HOST_KEY_TYPES=( "rsa" "dsa" "ecdsa" "ed25519" ) +if [[ "${KOLLA_BASE_DISTRO}" =~ centos|rocky ]]; then + # NOTE(mnasiadka): EL10 and CentOS Stream 9 does not support dsa + SSH_HOST_KEY_TYPES=( "rsa" "ecdsa" "ed25519" ) +else + SSH_HOST_KEY_TYPES=( "rsa" "dsa" "ecdsa" "ed25519" ) +fi for key_type in ${SSH_HOST_KEY_TYPES[@]}; do KEY_PATH=/etc/ssh/ssh_host_${key_type}_key diff --git a/docker/octavia/octavia-base/Dockerfile.j2 b/docker/octavia/octavia-base/Dockerfile.j2 index e036a4af7d..c7ab4b9223 100644 --- a/docker/octavia/octavia-base/Dockerfile.j2 +++ b/docker/octavia/octavia-base/Dockerfile.j2 @@ -10,9 +10,15 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build {{ macros.enable_extra_repos(['openvswitch']) }} {{ macros.configure_user(name='octavia') }} -{% set octavia_base_packages = [ - 'python3-openvswitch' -] %} +{% if base_distro_tag.startswith('stream10') %} + {% set octavia_base_packages = [ + 'python3-openvswitch3.5' + ] %} +{% else %} + {% set octavia_base_packages = [ + 'python3-openvswitch' + ] %} +{% endif %} {{ macros.install_packages(octavia_base_packages | customizable("packages")) }} diff --git a/docker/opensearch/opensearch-dashboards/Dockerfile.j2 b/docker/opensearch/opensearch-dashboards/Dockerfile.j2 index 4edf1bf631..f576dffbd3 100644 --- a/docker/opensearch/opensearch-dashboards/Dockerfile.j2 +++ b/docker/opensearch/opensearch-dashboards/Dockerfile.j2 @@ -12,6 +12,10 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build {% set opensearch_dashboards_packages = ['opensearch-dashboards'] %} +{% if base_distro_tag.startswith('stream10') %} +RUN update-crypto-policies --set LEGACY +{% endif %} + {{ macros.install_packages(opensearch_dashboards_packages | customizable("packages")) }} \ && chown -R opensearch-dashboards:opensearch-dashboards /usr/share/opensearch-dashboards diff --git a/docker/opensearch/opensearch/Dockerfile.j2 b/docker/opensearch/opensearch/Dockerfile.j2 index 207d42cad6..f1b3158a08 100644 --- a/docker/opensearch/opensearch/Dockerfile.j2 +++ b/docker/opensearch/opensearch/Dockerfile.j2 @@ -14,7 +14,11 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build 'opensearch' ] %} -ENV OPENSEARCH_INITIAL_ADMIN_PASSWORD="Kolla24OpenSearch" +ENV OPENSEARCH_INITIAL_ADMIN_PASSWORD="Kolla24OpenSearch"% + +{% if base_distro_tag.startswith('stream10') %} +RUN update-crypto-policies --set LEGACY +{% endif %} {{ macros.install_packages(opensearch_packages | customizable("packages")) }} \ && chown -R opensearch:opensearch /usr/share/opensearch \ diff --git a/docker/openstack-base/Dockerfile.j2 b/docker/openstack-base/Dockerfile.j2 index 8cb8a97b70..ddb2cd840c 100644 --- a/docker/openstack-base/Dockerfile.j2 +++ b/docker/openstack-base/Dockerfile.j2 @@ -24,7 +24,6 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build 'mod_ssl', 'openssl', 'openssl-devel', - 'pcre-devel', 'postgresql', 'postgresql-devel', 'python3-devel', @@ -33,6 +32,16 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build 'uwsgi-plugin-python3', 'zip' ] %} + {% if base_distro_tag.startswith('stream10') %} + {% set openstack_base_packages = openstack_base_packages + [ + 'pcre2-devel', + 'postgresql-server-devel' + ] %} + {% else %} + {% set openstack_base_packages = openstack_base_packages + [ + 'pcre-devel' + ] %} + {% endif %} {% elif base_package_type == 'deb' %} {% set openstack_base_packages = [ diff --git a/docker/openvswitch/openvswitch-base/Dockerfile.j2 b/docker/openvswitch/openvswitch-base/Dockerfile.j2 index 7f79cb8188..6804b07419 100644 --- a/docker/openvswitch/openvswitch-base/Dockerfile.j2 +++ b/docker/openvswitch/openvswitch-base/Dockerfile.j2 @@ -14,11 +14,20 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build {% if base_package_type == 'rpm' %} {% set openvswitch_base_packages = [ 'libibverbs', - 'openvswitch', 'python3-netifaces', - 'python3-openvswitch', 'tcpdump' ] %} + {% if base_distro_tag.startswith('stream10') %} + {% set openvswitch_base_packages = [ + 'openvswitch3.5', + 'python3-openvswitch3.5', + ] %} + {% else %} + {% set openvswitch_base_packages = [ + 'openvswitch', + 'python3-openvswitch' + ] %} + {% endif %} {% elif base_package_type == 'deb' %} {% set openvswitch_base_packages = [ 'openvswitch-switch', diff --git a/docker/ovn/ovn-base/Dockerfile.j2 b/docker/ovn/ovn-base/Dockerfile.j2 index 83e1c8dc83..db3ec00d91 100644 --- a/docker/ovn/ovn-base/Dockerfile.j2 +++ b/docker/ovn/ovn-base/Dockerfile.j2 @@ -8,9 +8,15 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build {% import "macros.j2" as macros with context %} {% if base_package_type == 'rpm' %} - {% set ovn_base_packages = [ - 'openvswitch-ovn-common', - ] %} + {% if base_distro_tag.startswith('stream10') %} + {% set ovn_base_packages = [ + 'ovn25.03' + ] %} + {% else %} + {% set ovn_base_packages = [ + 'openvswitch-ovn-common', + ] %} + {% endif %} {% elif base_package_type == 'deb' %} {% set ovn_base_packages = [ diff --git a/docker/ovn/ovn-controller/Dockerfile.j2 b/docker/ovn/ovn-controller/Dockerfile.j2 index c8ef96b24b..1bbbaf8a6e 100644 --- a/docker/ovn/ovn-controller/Dockerfile.j2 +++ b/docker/ovn/ovn-controller/Dockerfile.j2 @@ -8,9 +8,15 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build {% import "macros.j2" as macros with context %} {% if base_package_type == 'rpm' %} - {% set ovn_controller_packages = [ - 'openvswitch-ovn-host' - ] %} + {% if base_distro_tag.startswith('stream10') %} + {% set ovn_controller_packages = [ + 'ovn25.03-host' + ] %} + {% else %} + {% set ovn_controller_packages = [ + 'openvswitch-ovn-host' + ] %} + {% endif %} {% elif base_package_type == 'deb' %} {% set ovn_controller_packages = [ diff --git a/docker/ovn/ovn-nb-db-server/Dockerfile.j2 b/docker/ovn/ovn-nb-db-server/Dockerfile.j2 index cbd7ca01dd..a9f3436e1d 100644 --- a/docker/ovn/ovn-nb-db-server/Dockerfile.j2 +++ b/docker/ovn/ovn-nb-db-server/Dockerfile.j2 @@ -8,9 +8,15 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build {% import "macros.j2" as macros with context %} {% if base_package_type == 'rpm' %} - {% set ovn_nb_db_server_packages = [ - 'openvswitch-ovn-central', - ] %} + {% if base_distro_tag.startswith('stream10') %} + {% set ovn_nb_db_server_packages = [ + 'ovn25.03-central' + ] %} + {% else %} + {% set ovn_nb_db_server_packages = [ + 'openvswitch-ovn-central', + ] %} + {% endif %} {% elif base_package_type == 'deb' %} {% set ovn_nb_db_server_packages = [ diff --git a/docker/ovn/ovn-northd/Dockerfile.j2 b/docker/ovn/ovn-northd/Dockerfile.j2 index 3a151e0b86..aca799c34f 100644 --- a/docker/ovn/ovn-northd/Dockerfile.j2 +++ b/docker/ovn/ovn-northd/Dockerfile.j2 @@ -8,9 +8,15 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build {% import "macros.j2" as macros with context %} {% if base_package_type == 'rpm' %} - {% set ovn_northd_packages = [ - 'openvswitch-ovn-central', - ] %} + {% if base_distro_tag.startswith('stream10') %} + {% set ovn_northd_packages = [ + 'ovn25.03-central', + ] %} + {% else %} + {% set ovn_northd_packages = [ + 'openvswitch-ovn-central', + ] %} + {% endif %} {% elif base_package_type == 'deb' %} {% set ovn_northd_packages = [ diff --git a/docker/ovn/ovn-sb-db-server/Dockerfile.j2 b/docker/ovn/ovn-sb-db-server/Dockerfile.j2 index 07f8349934..df11a0930d 100644 --- a/docker/ovn/ovn-sb-db-server/Dockerfile.j2 +++ b/docker/ovn/ovn-sb-db-server/Dockerfile.j2 @@ -8,9 +8,15 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build {% import "macros.j2" as macros with context %} {% if base_package_type == 'rpm' %} - {% set ovn_sb_db_server_packages = [ - 'openvswitch-ovn-central', - ] %} + {% if base_distro_tag.startswith('stream10') %} + {% set ovn_sb_db_server_packages = [ + 'ovn25.03-central', + ] %} + {% else %} + {% set ovn_sb_db_server_packages = [ + 'openvswitch-ovn-central', + ] %} + {% endif %} {% elif base_package_type == 'deb' %} {% set ovn_sb_db_server_packages = [ diff --git a/docker/zun/zun-cni-daemon/Dockerfile.j2 b/docker/zun/zun-cni-daemon/Dockerfile.j2 index 02cc9b2bef..d230099515 100644 --- a/docker/zun/zun-cni-daemon/Dockerfile.j2 +++ b/docker/zun/zun-cni-daemon/Dockerfile.j2 @@ -9,9 +9,15 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build {% if base_package_type == 'rpm' %} - {% set zun_cni_daemon_packages = [ - 'openvswitch' - ] %} + {% if base_distro_tag.startswith('stream10') %} + {% set zun_cni_daemon_packages = [ + 'openvswitch3.5' + ] %} + {% else %} + {% set zun_cni_daemon_packages = [ + 'openvswitch' + ] %} + {% endif %} {% elif base_package_type == 'deb' %} diff --git a/kolla/common/config.py b/kolla/common/config.py index 53d78d8360..e7daff998f 100644 --- a/kolla/common/config.py +++ b/kolla/common/config.py @@ -32,7 +32,7 @@ } # NOTE(hrw): has to match PRETTY_NAME in /etc/os-release DISTRO_PRETTY_NAME = { - 'centos': 'CentOS Stream 9', + 'centos': 'CentOS Stream {9,10}', 'debian': 'Debian GNU/Linux 12 (bookworm)', 'rocky': 'Rocky Linux 9.* (Blue Onyx)', 'ubuntu': 'Ubuntu 24.04.* LTS', diff --git a/kolla/image/kolla_worker.py b/kolla/image/kolla_worker.py index 3a78a7f35b..6ffb220b16 100644 --- a/kolla/image/kolla_worker.py +++ b/kolla/image/kolla_worker.py @@ -441,8 +441,7 @@ def filter_images(self): # mark unbuildable images and their children base = self.base - - tag_element = r'(%s|%s)' % (base, self.base_arch) + tag_element = r'(%s|%s|%s)' % (base, self.base_arch, self.base_tag) tag_re = re.compile(r'^%s(\+%s)*$' % (tag_element, tag_element)) unbuildable_images = set() diff --git a/kolla/image/unbuildable.py b/kolla/image/unbuildable.py index 121d3ee379..8386a2598d 100644 --- a/kolla/image/unbuildable.py +++ b/kolla/image/unbuildable.py @@ -28,6 +28,12 @@ "tgtd", # Not supported on CentOS }, + 'centos+stream10': { + "collectd", # No opstools repo for EL10 + "redis-base", # No redis repo for EL10 + "telegraf", # No opstools repo for EL10 + }, + 'debian': { "openvswitch-netcontrold", # https://bugs.launchpad.net/kolla/+bug/2027668 diff --git a/kolla/template/methods.py b/kolla/template/methods.py index e9edbfeb01..2e0c77d173 100644 --- a/kolla/template/methods.py +++ b/kolla/template/methods.py @@ -91,20 +91,25 @@ def handle_repos(context, reponames, mode): if not isinstance(reponames, list): raise TypeError("First argument should be a list of repositories") + base_package_type = context.get('base_package_type') + base_distro = context.get('base_distro') + base_distro_tag = context.get('base_distro_tag', '') + base_arch = context.get('base_arch') + if context.get('repos_yaml'): repofile = context.get('repos_yaml') else: - repofile = os.path.dirname(os.path.realpath(__file__)) + '/repos.yaml' + repofile = os.path.dirname(os.path.realpath(__file__)) + \ + ('/repos-el10.yaml' + if base_distro == 'centos' and + base_distro_tag.startswith('stream10') + else '/repos.yaml') with open(repofile, 'r') as repos_file: repo_data = {} for name, params in yaml.safe_load(repos_file).items(): repo_data[name] = params - base_package_type = context.get('base_package_type') - base_distro = context.get('base_distro') - base_arch = context.get('base_arch') - commands = '' try: diff --git a/kolla/template/repos-el10.yaml b/kolla/template/repos-el10.yaml new file mode 100644 index 0000000000..79cd25ab5c --- /dev/null +++ b/kolla/template/repos-el10.yaml @@ -0,0 +1,39 @@ +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-2.x" + opensearch-dashboards: "opensearch-dashboards-2.x" + openvswitch: "centos-nfv-openvswitch" + opstools: "centos-opstools" + proxysql: "proxysql" + rabbitmq: "rabbitmq_rabbitmq-server" +centos-aarch64: + ceph: "centos-ceph-squid" + crb: "crb" + docker-ce: "docker-ce" + epel: "epel" + erlang-26: "copr-rabbitmq-erlang-26" + erlang-27: "copr-rabbitmq-erlang-27" + extras: "extras" + fluentd: "fluent-package-lts" + grafana: "grafana" + hacluster: "highavailability" + influxdb: "influxdb" + kolla_el10: "kolla_el10" + mariadb: "mariadb" + opensearch: "opensearch-2.x" + opensearch-dashboards: "opensearch-dashboards-2.x" + openvswitch: "centos-nfv-openvswitch" + opstools: "centos-opstools" + proxysql: "proxysql" + rabbitmq: "rabbitmq_rabbitmq-server" diff --git a/tests/playbooks/run.yml b/tests/playbooks/run.yml index ad3c80075d..b01a45be6c 100644 --- a/tests/playbooks/run.yml +++ b/tests/playbooks/run.yml @@ -34,6 +34,16 @@ kolla_build_config: "{{ kolla_build_config | combine(kolla_mirror_config, recursive=True) }}" when: base_distro in ['debian', 'ubuntu'] + - name: Add base_tag config + vars: + kolla_base_tag_config: + DEFAULT: + base_tag: "{{ base_distro_tag }}" + set_fact: + kolla_build_config: "{{ kolla_build_config | combine(kolla_base_tag_config, recursive=True) }}" + when: + - base_distro_tag is defined + - name: Add publisher config vars: kolla_publisher_config: diff --git a/tests/templates/template_overrides.j2 b/tests/templates/template_overrides.j2 index cd892dc9ae..0126b731ab 100644 --- a/tests/templates/template_overrides.j2 +++ b/tests/templates/template_overrides.j2 @@ -23,13 +23,14 @@ RUN echo registry={{ nodepool_npmjs_proxy }} > /etc/npmrc \ {% raw %} {% block base_centos_repo_overrides_post_copy %} -{% endraw %} +{% if not base_distro_tag.startswith('stream10') %} COPY ci-centos.repo /etc/yum.repos.d/ +{% endraw %} RUN cd /etc/yum.repos.d/ && mkdir not-for-ci/ && mv centos*.repo not-for-ci/ \ && sed -i -e "s/MIRROR/{{ nodepool_mirror_host }}/g" /etc/yum.repos.d/ci-centos.repo - {% raw %} +{% endif %} {% endblock %} {% endraw %} {% elif base_distro == 'rocky' %} @@ -57,9 +58,9 @@ RUN cd /etc/yum.repos.d/ && mkdir not-for-ci/ \ {% endblock %} {% block base_centos_repo_overrides_post_yum -%} -{%- endraw -%} +{%- if not base_distro_tag.startswith('stream10') -%} && cd /etc/yum.repos.d/ && mv CentOS*.repo epel*.repo not-for-ci/ -{%- raw -%} +{%- endif -%} {% endblock %} {% endraw %} {% endif %} From 584d57e7c378eb377e823b7cdf2c886ccf116312 Mon Sep 17 00:00:00 2001 From: Michal Nasiadka Date: Tue, 5 Aug 2025 14:24:11 +0200 Subject: [PATCH 3/4] Add support for Rocky Linux 10 Depends-On: https://review.opendev.org/c/openstack/ansible-collection-kolla/+/962714 Change-Id: Idd809f5efd2d308c1565d7635e67af0a431d18f7 Signed-off-by: Michal Nasiadka (cherry picked from commit d4b777bb060517dbb0b648d5d7d5c07336969866) --- .zuul.d/base.yaml | 12 ++++ .zuul.d/rocky.yaml | 67 +++++++++++++++++++ doc/source/ceph_versions.csv | 3 +- doc/source/contributor/versions.rst | 2 +- doc/source/support_matrix.rst | 4 ++ docker/base/Dockerfile.j2 | 9 +-- docker/ironic/ironic-conductor/Dockerfile.j2 | 2 +- docker/keystone/keystone-base/Dockerfile.j2 | 2 +- docker/kolla-toolbox/Dockerfile.j2 | 4 +- docker/kuryr/kuryr-libnetwork/Dockerfile.j2 | 2 +- docker/manila/manila-base/Dockerfile.j2 | 2 +- docker/manila/manila-share/Dockerfile.j2 | 2 +- docker/neutron/neutron-base/Dockerfile.j2 | 2 +- .../neutron/neutron-mlnx-agent/Dockerfile.j2 | 2 +- docker/nova/nova-base/Dockerfile.j2 | 2 +- docker/nova/nova-compute-ironic/Dockerfile.j2 | 2 +- docker/nova/nova-libvirt/Dockerfile.j2 | 4 +- docker/octavia/octavia-base/Dockerfile.j2 | 2 +- .../opensearch-dashboards/Dockerfile.j2 | 2 +- docker/opensearch/opensearch/Dockerfile.j2 | 2 +- docker/openstack-base/Dockerfile.j2 | 2 +- .../openvswitch-base/Dockerfile.j2 | 2 +- docker/ovn/ovn-base/Dockerfile.j2 | 2 +- docker/ovn/ovn-controller/Dockerfile.j2 | 2 +- docker/ovn/ovn-nb-db-server/Dockerfile.j2 | 2 +- docker/ovn/ovn-northd/Dockerfile.j2 | 2 +- docker/ovn/ovn-sb-db-server/Dockerfile.j2 | 2 +- docker/zun/zun-cni-daemon/Dockerfile.j2 | 2 +- kolla/common/config.py | 2 +- kolla/image/kolla_worker.py | 1 + kolla/image/unbuildable.py | 5 ++ kolla/template/methods.py | 7 +- kolla/template/repos-el10.yaml | 39 +++++++++++ .../rocky-10-epoxy-65b8315a10fa0096.yaml | 7 ++ tests/templates/template_overrides.j2 | 8 ++- 35 files changed, 178 insertions(+), 36 deletions(-) create mode 100644 releasenotes/notes/rocky-10-epoxy-65b8315a10fa0096.yaml diff --git a/.zuul.d/base.yaml b/.zuul.d/base.yaml index 1d5896b293..34f197fe67 100644 --- a/.zuul.d/base.yaml +++ b/.zuul.d/base.yaml @@ -87,6 +87,12 @@ - name: primary label: rockylinux-9 +- nodeset: + name: kolla-rockylinux-10 + nodes: + - name: primary + label: rockylinux-10-8GB + - nodeset: name: kolla-ubuntu-noble nodes: @@ -123,6 +129,12 @@ - name: primary label: rockylinux-9-arm64 +- nodeset: + name: kolla-rockylinux-10-aarch64 + nodes: + - name: primary + label: rockylinux-10-arm64-8GB + - nodeset: name: kolla-ubuntu-noble-aarch64 nodes: diff --git a/.zuul.d/rocky.yaml b/.zuul.d/rocky.yaml index e18c6ac3c5..da12c7c102 100644 --- a/.zuul.d/rocky.yaml +++ b/.zuul.d/rocky.yaml @@ -31,21 +31,30 @@ files: ^docker/proxysql/ - kolla-ansible-rocky9-bifrost: files: ^docker/bifrost/ + - kolla-build-rocky10 + - kolla-build-rocky10-podman + #- kolla-ansible-rocky10 check-arm64: jobs: - kolla-build-rocky9-aarch64 + - kolla-build-rocky10-aarch64 gate: jobs: - kolla-build-rocky9 - kolla-build-rocky9-podman - kolla-ansible-rocky9 - kolla-ansible-rocky9-upgrade + - kolla-build-rocky10 + - kolla-build-rocky10-podman + #- kolla-ansible-rocky10 periodic-stable: jobs: - kolla-publish-rocky9-quay + - kolla-publish-rocky10-quay experimental: jobs: - kolla-build-no-infra-wheels-rocky9 + - kolla-build-no-infra-wheels-rocky10 - job: name: kolla-build-rocky9 @@ -101,3 +110,61 @@ secrets: - kolla_quay_io_creds - kolla_quay_io_api + +- job: + name: kolla-build-rocky10 + parent: kolla-base + nodeset: kolla-rockylinux-10 + vars: + base_distro: rocky + base_distro_version: 10 + base_distro_tag: 10 + +- job: + name: kolla-build-rocky10-podman + parent: kolla-base-podman + nodeset: kolla-rockylinux-10 + vars: + base_distro: rocky + base_distro_version: 10 + base_distro_tag: 10 + +- job: + name: kolla-build-rocky10-aarch64 + parent: kolla-build-rocky10 + nodeset: kolla-rockylinux-10-aarch64 + vars: + base_arch: aarch64 + voting: false + +- job: + name: kolla-build-no-infra-wheels-rocky10 + parent: kolla-build-no-infra-wheels-base + nodeset: kolla-rockylinux-10 + vars: + base_distro: rocky + base_distro_version: 10 + base_distro_tag: 10 + +- job: + name: kolla-publish-rocky10-dockerhub + parent: kolla-build-rocky10 + post-run: tests/playbooks/publish.yml + vars: + publisher: true + kolla_registry: dockerhub + kolla_namespace: kolla + secrets: + - kolla_dockerhub_credentials + +- job: + name: kolla-publish-rocky10-quay + parent: kolla-build-rocky10 + post-run: tests/playbooks/publish.yml + vars: + publisher: true + kolla_registry: quay.io + kolla_namespace: openstack.kolla + secrets: + - kolla_quay_io_creds + - kolla_quay_io_api diff --git a/doc/source/ceph_versions.csv b/doc/source/ceph_versions.csv index 7ca7b4c7e9..eed1141aa8 100644 --- a/doc/source/ceph_versions.csv +++ b/doc/source/ceph_versions.csv @@ -1,5 +1,6 @@ Distro,Ceph, ,Source, Release -Rocky Linux,CentOS Storage SIG,Reef +Rocky Linux 9,CentOS Storage SIG,Reef +Rocky Linux 10,CentOS Storage SIG,Squid Ubuntu,Ubuntu,Squid Debian,Debian,Pacific diff --git a/doc/source/contributor/versions.rst b/doc/source/contributor/versions.rst index 2d9bdbac6f..fee8ce85f2 100644 --- a/doc/source/contributor/versions.rst +++ b/doc/source/contributor/versions.rst @@ -10,7 +10,7 @@ For each component used we list version used at branch release and provide information about package sources. .. note:: - When table mentions 'CentOS' it means both CentOS Stream 9 and Rocky Linux 9. + When table mentions 'CentOS' it means both CentOS Stream 9/10 and Rocky Linux 9/10. ============== ================ ============================================= Name Version Package source information diff --git a/doc/source/support_matrix.rst b/doc/source/support_matrix.rst index 05f2d5693a..314f036ca8 100644 --- a/doc/source/support_matrix.rst +++ b/doc/source/support_matrix.rst @@ -22,6 +22,10 @@ Debian Bookworm debian bookworm Ubuntu Noble ubuntu 24.04 ================== =============================== ================ +.. note:: + + Rocky Linux 10 builds are also supported, you need to define base_tag = 10 + The remainder of this document outlines which images are supported on which of these distribution. diff --git a/docker/base/Dockerfile.j2 b/docker/base/Dockerfile.j2 index 10a78cb8d9..9590338b70 100644 --- a/docker/base/Dockerfile.j2 +++ b/docker/base/Dockerfile.j2 @@ -130,7 +130,7 @@ RUN rm -f /etc/rpm/macros.image-language-conf \ {% set base_centos_yum_repo_keys = [ ] %} -{% if base_distro_tag.startswith('stream10') %} +{% if base_distro_tag.startswith('10') or base_distro_tag.startswith('stream10') %} {% set base_centos_yum_repo_packages = [ 'centos-release-ceph-squid', 'centos-release-nfv-openvswitch', @@ -156,7 +156,7 @@ RUN rm -f /etc/rpm/macros.image-language-conf \ # FIXME(hrw): entries not starting with 'centos-' (and 'centos-nfv-ovs') are # from delorean or rdo-release-* package # https://review.rdoproject.org/r/c/rdo-infra/ansible-role-dlrn/+/33241 -{% if base_distro_tag.startswith('stream10') %} +{% if base_distro_tag.startswith('10') or base_distro_tag.startswith('stream10') %} {% set base_centos_yum_repos_to_disable = [ 'centos-ceph-squid', 'centos-nfv-openvswitch', @@ -164,7 +164,7 @@ RUN rm -f /etc/rpm/macros.image-language-conf \ 'influxdb', 'opensearch-2.x', 'opensearch-dashboards-2.x', -] %} + ] %} {% else %} {% set base_centos_yum_repos_to_disable = [ 'centos-ceph-reef', @@ -195,7 +195,7 @@ RUN {{ macros.install_packages(base_centos_yum_repo_packages | customizable("cen {% block base_redhat_binary_versionlock %}{% endblock %} {# NOTE(mnasiadka): In EL10 we install dumb-init from epel #} -{% if base_distro_tag.startswith('stream10') %} +{% if base_distro_tag.startswith('10') or base_distro_tag.startswith('stream10') %} RUN dnf config-manager --enable epel {% endif %} @@ -211,6 +211,7 @@ RUN dnf config-manager --enable epel 'lsof', 'lvm2', 'ncurses', + 'openssl', 'procps-ng', 'python3', 'python3-pip', diff --git a/docker/ironic/ironic-conductor/Dockerfile.j2 b/docker/ironic/ironic-conductor/Dockerfile.j2 index 3f9a3fbe0b..5c8e49da65 100644 --- a/docker/ironic/ironic-conductor/Dockerfile.j2 +++ b/docker/ironic/ironic-conductor/Dockerfile.j2 @@ -24,7 +24,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build 'util-linux', 'xfsprogs', ] %} - {% if base_distro_tag.startswith('stream10') %} + {% if base_distro_tag.startswith('10') or base_distro_tag.startswith('stream10') %} {% set ironic_conductor_packages = ironic_conductor_packages + [ 'xorriso' ] %} diff --git a/docker/keystone/keystone-base/Dockerfile.j2 b/docker/keystone/keystone-base/Dockerfile.j2 index a7fd0f6aae..b854ea8a85 100644 --- a/docker/keystone/keystone-base/Dockerfile.j2 +++ b/docker/keystone/keystone-base/Dockerfile.j2 @@ -7,7 +7,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build {% import "macros.j2" as macros with context %} -{% if base_distro_tag.startswith('stream10') %} +{% if base_distro_tag.startswith('10') or base_distro_tag.startswith('stream10') %} {# NOTE(mnasiadka): mod_auth_mellon missing in CentOS 10 Stream - temporarily from Kolla COPR #} {{ macros.enable_extra_repos(['kolla_el10']) }} {% endif %} diff --git a/docker/kolla-toolbox/Dockerfile.j2 b/docker/kolla-toolbox/Dockerfile.j2 index f60d1f2647..61bf7da476 100644 --- a/docker/kolla-toolbox/Dockerfile.j2 +++ b/docker/kolla-toolbox/Dockerfile.j2 @@ -36,7 +36,7 @@ COPY apt_preferences_rabbitmq.{{ base_distro }} /etc/apt/preferences.d/rabbitmq 'openssl-devel', 'rabbitmq-server-4.0.*' ] %} - {% if base_distro_tag.startswith('stream10') %} + {% if base_distro_tag.startswith('10') or base_distro_tag.startswith('stream10') %} {% set kolla_toolbox_packages = kolla_toolbox_packages + [ 'openvswitch3.5', 'python3', @@ -81,7 +81,7 @@ COPY apt_preferences_rabbitmq.{{ base_distro }} /etc/apt/preferences.d/rabbitmq [1] https://review.opendev.org/c/openstack/kolla/+/924245 #} -{% if base_package_type == 'rpm' and not base_distro_tag.startswith('stream10') %} +{% if base_package_type == 'rpm' and not (base_distro_tag.startswith('10') or base_distro_tag.startswith('stream10')) %} RUN cd /usr/bin && \ rm -f python3 && \ ln -s python3.12 python3 diff --git a/docker/kuryr/kuryr-libnetwork/Dockerfile.j2 b/docker/kuryr/kuryr-libnetwork/Dockerfile.j2 index 2f18048348..a29ab77116 100644 --- a/docker/kuryr/kuryr-libnetwork/Dockerfile.j2 +++ b/docker/kuryr/kuryr-libnetwork/Dockerfile.j2 @@ -11,7 +11,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build {% if base_package_type == 'rpm' %} - {% if base_distro_tag.startswith('stream10') %} + {% if base_distro_tag.startswith('10') or base_distro_tag.startswith('stream10') %} {% set kuryr_libnetwork_packages = [ 'openvswitch3.5' ] %} diff --git a/docker/manila/manila-base/Dockerfile.j2 b/docker/manila/manila-base/Dockerfile.j2 index 4ff52b7610..c1c9a47c45 100644 --- a/docker/manila/manila-base/Dockerfile.j2 +++ b/docker/manila/manila-base/Dockerfile.j2 @@ -12,7 +12,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build {% if base_package_type == 'rpm' %} - {% if base_distro_tag.startswith('stream10') %} + {% if base_distro_tag.startswith('10') or base_distro_tag.startswith('stream10') %} {% set manila_base_packages = ['openvswitch3.5'] %} {% else %} {% set manila_base_packages = ['openvswitch'] %} diff --git a/docker/manila/manila-share/Dockerfile.j2 b/docker/manila/manila-share/Dockerfile.j2 index 1928f4028f..f92628144b 100644 --- a/docker/manila/manila-share/Dockerfile.j2 +++ b/docker/manila/manila-share/Dockerfile.j2 @@ -14,7 +14,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build 'ceph-common', 'sqlite', ] %} - {% if not base_distro_tag.startswith('stream10') %} + {% if not (base_distro_tag.startswith('10') or base_distro_tag.startswith('stream10')) %} {% set manila_share_packages = manila_share_packages + [ 'glusterfs-fuse' ] %} diff --git a/docker/neutron/neutron-base/Dockerfile.j2 b/docker/neutron/neutron-base/Dockerfile.j2 index 27fa2a854f..1224a2b495 100644 --- a/docker/neutron/neutron-base/Dockerfile.j2 +++ b/docker/neutron/neutron-base/Dockerfile.j2 @@ -27,7 +27,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build 'radvd', 'uuid' ] %} - {% if base_distro_tag.startswith('stream10') %} + {% if base_distro_tag.startswith('10') or base_distro_tag.startswith('stream10') %} {% set neutron_base_packages = neutron_base_packages + [ 'openvswitch3.5', 'python3-openvswitch3.5' diff --git a/docker/neutron/neutron-mlnx-agent/Dockerfile.j2 b/docker/neutron/neutron-mlnx-agent/Dockerfile.j2 index 4d4dfc0e27..770ae49c08 100644 --- a/docker/neutron/neutron-mlnx-agent/Dockerfile.j2 +++ b/docker/neutron/neutron-mlnx-agent/Dockerfile.j2 @@ -11,7 +11,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build 'python3-libvirt', ] %} -{% if not base_distro_tag.startswith('stream10') %} +{% if not (base_distro_tag.startswith('10') or base_distro_tag.startswith('stream10')) %} {% set neutron_mlnx_agent_packages = neutron_mlnx_agent_packages + [ 'python3-ethtool' ] %} diff --git a/docker/nova/nova-base/Dockerfile.j2 b/docker/nova/nova-base/Dockerfile.j2 index 4dd5fb8e8f..31bbe76356 100644 --- a/docker/nova/nova-base/Dockerfile.j2 +++ b/docker/nova/nova-base/Dockerfile.j2 @@ -12,7 +12,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build {% if base_package_type == 'rpm' %} - {% if base_distro_tag.startswith('stream10') %} + {% if base_distro_tag.startswith('10') or base_distro_tag.startswith('stream10') %} {% set nova_base_packages = [ 'openvswitch3.5', 'python3-openvswitch3.5' diff --git a/docker/nova/nova-compute-ironic/Dockerfile.j2 b/docker/nova/nova-compute-ironic/Dockerfile.j2 index b75d98a704..634f646b7c 100644 --- a/docker/nova/nova-compute-ironic/Dockerfile.j2 +++ b/docker/nova/nova-compute-ironic/Dockerfile.j2 @@ -8,7 +8,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build {% import "macros.j2" as macros with context %} {% set nova_compute_ironic_packages = ['nvme-cli'] %} -{% if base_distro_tag.startswith('stream10') %} +{% if base_distro_tag.startswith('10') or base_distro_tag.startswith('stream10') %} {% set nova_compute_ironic_packages = nova_compute_ironic_packages + [ 'xorriso' ] %} diff --git a/docker/nova/nova-libvirt/Dockerfile.j2 b/docker/nova/nova-libvirt/Dockerfile.j2 index d8723c0842..be76af1843 100644 --- a/docker/nova/nova-libvirt/Dockerfile.j2 +++ b/docker/nova/nova-libvirt/Dockerfile.j2 @@ -10,7 +10,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build {{ macros.configure_user(name='nova', groups='qemu') }} {{ macros.enable_extra_repos(['ceph', 'epel', 'openvswitch']) }} -{% if base_distro_tag.startswith('stream10') %} +{% if base_distro_tag.startswith('10') or base_distro_tag.startswith('stream10') %} {{ macros.enable_extra_repos(['crb']) }} {% endif %} @@ -31,7 +31,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build 'swtpm', ] %} - {% if base_distro_tag.startswith('10stream') %} + {% if base_distro_tag.startswith('10') or base_distro_tag.startswith('stream10') %} {% set nova_libvirt_packages = nova_libvirt_packages + [ 'openvswitch3.5' ] %} diff --git a/docker/octavia/octavia-base/Dockerfile.j2 b/docker/octavia/octavia-base/Dockerfile.j2 index c7ab4b9223..533eccd4eb 100644 --- a/docker/octavia/octavia-base/Dockerfile.j2 +++ b/docker/octavia/octavia-base/Dockerfile.j2 @@ -10,7 +10,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build {{ macros.enable_extra_repos(['openvswitch']) }} {{ macros.configure_user(name='octavia') }} -{% if base_distro_tag.startswith('stream10') %} +{% if base_distro_tag.startswith('10') or base_distro_tag.startswith('stream10') %} {% set octavia_base_packages = [ 'python3-openvswitch3.5' ] %} diff --git a/docker/opensearch/opensearch-dashboards/Dockerfile.j2 b/docker/opensearch/opensearch-dashboards/Dockerfile.j2 index f576dffbd3..3ec266945e 100644 --- a/docker/opensearch/opensearch-dashboards/Dockerfile.j2 +++ b/docker/opensearch/opensearch-dashboards/Dockerfile.j2 @@ -12,7 +12,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build {% set opensearch_dashboards_packages = ['opensearch-dashboards'] %} -{% if base_distro_tag.startswith('stream10') %} +{% if base_distro_tag.startswith('10') or base_distro_tag.startswith('stream10') %} RUN update-crypto-policies --set LEGACY {% endif %} diff --git a/docker/opensearch/opensearch/Dockerfile.j2 b/docker/opensearch/opensearch/Dockerfile.j2 index f1b3158a08..ab82478448 100644 --- a/docker/opensearch/opensearch/Dockerfile.j2 +++ b/docker/opensearch/opensearch/Dockerfile.j2 @@ -16,7 +16,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build ENV OPENSEARCH_INITIAL_ADMIN_PASSWORD="Kolla24OpenSearch"% -{% if base_distro_tag.startswith('stream10') %} +{% if base_distro_tag.startswith('10') or base_distro_tag.startswith('stream10') %} RUN update-crypto-policies --set LEGACY {% endif %} diff --git a/docker/openstack-base/Dockerfile.j2 b/docker/openstack-base/Dockerfile.j2 index ddb2cd840c..4db1fe2ab7 100644 --- a/docker/openstack-base/Dockerfile.j2 +++ b/docker/openstack-base/Dockerfile.j2 @@ -32,7 +32,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build 'uwsgi-plugin-python3', 'zip' ] %} - {% if base_distro_tag.startswith('stream10') %} + {% if base_distro_tag.startswith('10') or base_distro_tag.startswith('stream10') %} {% set openstack_base_packages = openstack_base_packages + [ 'pcre2-devel', 'postgresql-server-devel' diff --git a/docker/openvswitch/openvswitch-base/Dockerfile.j2 b/docker/openvswitch/openvswitch-base/Dockerfile.j2 index 6804b07419..a43dc8382d 100644 --- a/docker/openvswitch/openvswitch-base/Dockerfile.j2 +++ b/docker/openvswitch/openvswitch-base/Dockerfile.j2 @@ -17,7 +17,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build 'python3-netifaces', 'tcpdump' ] %} - {% if base_distro_tag.startswith('stream10') %} + {% if base_distro_tag.startswith('10') or base_distro_tag.startswith('stream10') %} {% set openvswitch_base_packages = [ 'openvswitch3.5', 'python3-openvswitch3.5', diff --git a/docker/ovn/ovn-base/Dockerfile.j2 b/docker/ovn/ovn-base/Dockerfile.j2 index db3ec00d91..3074bbd475 100644 --- a/docker/ovn/ovn-base/Dockerfile.j2 +++ b/docker/ovn/ovn-base/Dockerfile.j2 @@ -8,7 +8,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build {% import "macros.j2" as macros with context %} {% if base_package_type == 'rpm' %} - {% if base_distro_tag.startswith('stream10') %} + {% if base_distro_tag.startswith('10') or base_distro_tag.startswith('stream10') %} {% set ovn_base_packages = [ 'ovn25.03' ] %} diff --git a/docker/ovn/ovn-controller/Dockerfile.j2 b/docker/ovn/ovn-controller/Dockerfile.j2 index 1bbbaf8a6e..0d9dd3e666 100644 --- a/docker/ovn/ovn-controller/Dockerfile.j2 +++ b/docker/ovn/ovn-controller/Dockerfile.j2 @@ -8,7 +8,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build {% import "macros.j2" as macros with context %} {% if base_package_type == 'rpm' %} - {% if base_distro_tag.startswith('stream10') %} + {% if base_distro_tag.startswith('10') or base_distro_tag.startswith('stream10') %} {% set ovn_controller_packages = [ 'ovn25.03-host' ] %} diff --git a/docker/ovn/ovn-nb-db-server/Dockerfile.j2 b/docker/ovn/ovn-nb-db-server/Dockerfile.j2 index a9f3436e1d..1ae7f9a362 100644 --- a/docker/ovn/ovn-nb-db-server/Dockerfile.j2 +++ b/docker/ovn/ovn-nb-db-server/Dockerfile.j2 @@ -8,7 +8,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build {% import "macros.j2" as macros with context %} {% if base_package_type == 'rpm' %} - {% if base_distro_tag.startswith('stream10') %} + {% if base_distro_tag.startswith('10') or base_distro_tag.startswith('stream10') %} {% set ovn_nb_db_server_packages = [ 'ovn25.03-central' ] %} diff --git a/docker/ovn/ovn-northd/Dockerfile.j2 b/docker/ovn/ovn-northd/Dockerfile.j2 index aca799c34f..751721bfac 100644 --- a/docker/ovn/ovn-northd/Dockerfile.j2 +++ b/docker/ovn/ovn-northd/Dockerfile.j2 @@ -8,7 +8,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build {% import "macros.j2" as macros with context %} {% if base_package_type == 'rpm' %} - {% if base_distro_tag.startswith('stream10') %} + {% if base_distro_tag.startswith('10') or base_distro_tag.startswith('stream10') %} {% set ovn_northd_packages = [ 'ovn25.03-central', ] %} diff --git a/docker/ovn/ovn-sb-db-server/Dockerfile.j2 b/docker/ovn/ovn-sb-db-server/Dockerfile.j2 index df11a0930d..624e81e1e7 100644 --- a/docker/ovn/ovn-sb-db-server/Dockerfile.j2 +++ b/docker/ovn/ovn-sb-db-server/Dockerfile.j2 @@ -8,7 +8,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build {% import "macros.j2" as macros with context %} {% if base_package_type == 'rpm' %} - {% if base_distro_tag.startswith('stream10') %} + {% if base_distro_tag.startswith('10') or base_distro_tag.startswith('stream10') %} {% set ovn_sb_db_server_packages = [ 'ovn25.03-central', ] %} diff --git a/docker/zun/zun-cni-daemon/Dockerfile.j2 b/docker/zun/zun-cni-daemon/Dockerfile.j2 index d230099515..51f9ca001a 100644 --- a/docker/zun/zun-cni-daemon/Dockerfile.j2 +++ b/docker/zun/zun-cni-daemon/Dockerfile.j2 @@ -9,7 +9,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build {% if base_package_type == 'rpm' %} - {% if base_distro_tag.startswith('stream10') %} + {% if base_distro_tag.startswith('10') or base_distro_tag.startswith('stream10') %} {% set zun_cni_daemon_packages = [ 'openvswitch3.5' ] %} diff --git a/kolla/common/config.py b/kolla/common/config.py index e7daff998f..197f22394c 100644 --- a/kolla/common/config.py +++ b/kolla/common/config.py @@ -34,7 +34,7 @@ DISTRO_PRETTY_NAME = { 'centos': 'CentOS Stream {9,10}', 'debian': 'Debian GNU/Linux 12 (bookworm)', - 'rocky': 'Rocky Linux 9.* (Blue Onyx)', + 'rocky': 'Rocky Linux {9,10}.* ({Blue Onyx,Red Quartz})', 'ubuntu': 'Ubuntu 24.04.* LTS', } OPENSTACK_RELEASE = '2025.1' diff --git a/kolla/image/kolla_worker.py b/kolla/image/kolla_worker.py index 6ffb220b16..2e2b76e13b 100644 --- a/kolla/image/kolla_worker.py +++ b/kolla/image/kolla_worker.py @@ -441,6 +441,7 @@ def filter_images(self): # mark unbuildable images and their children base = self.base + tag_element = r'(%s|%s|%s)' % (base, self.base_arch, self.base_tag) tag_re = re.compile(r'^%s(\+%s)*$' % (tag_element, tag_element)) unbuildable_images = set() diff --git a/kolla/image/unbuildable.py b/kolla/image/unbuildable.py index 8386a2598d..9a75bfe611 100644 --- a/kolla/image/unbuildable.py +++ b/kolla/image/unbuildable.py @@ -47,6 +47,11 @@ "tgtd", # Not supported on CentOS }, + 'rocky+10': { + "redis-base", # No Redis in EL10 + "telegraf" # Missing opstools repo + }, + 'ubuntu': { }, diff --git a/kolla/template/methods.py b/kolla/template/methods.py index 2e0c77d173..06e6d900bf 100644 --- a/kolla/template/methods.py +++ b/kolla/template/methods.py @@ -101,8 +101,11 @@ def handle_repos(context, reponames, mode): else: repofile = os.path.dirname(os.path.realpath(__file__)) + \ ('/repos-el10.yaml' - if base_distro == 'centos' and - base_distro_tag.startswith('stream10') + if ( + (base_distro == 'centos' and + base_distro_tag.startswith('stream10')) + or (base_distro == 'rocky' and + base_distro_tag.startswith('10'))) else '/repos.yaml') with open(repofile, 'r') as repos_file: diff --git a/kolla/template/repos-el10.yaml b/kolla/template/repos-el10.yaml index 79cd25ab5c..ff1993f11f 100644 --- a/kolla/template/repos-el10.yaml +++ b/kolla/template/repos-el10.yaml @@ -37,3 +37,42 @@ centos-aarch64: opstools: "centos-opstools" proxysql: "proxysql" rabbitmq: "rabbitmq_rabbitmq-server" +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-2.x" + opensearch-dashboards: "opensearch-dashboards-2.x" + openvswitch: "centos-nfv-openvswitch" + opstools: "centos-opstools" + proxysql: "proxysql" + rabbitmq: "rabbitmq_rabbitmq-server" +rocky-aarch64: + ceph: "centos-ceph-squid" + crb: "crb" + docker-ce: "docker-ce" + epel: "epel" + erlang-26: "copr-rabbitmq-erlang-26" + erlang-27: "copr-rabbitmq-erlang-27" + extras: "extras" + fluentd: "fluent-package-lts" + grafana: "grafana" + hacluster: "highavailability" + influxdb: "influxdb" + kolla_el10: "kolla_el10" + mariadb: "mariadb" + opensearch: "opensearch-2.x" + opensearch-dashboards: "opensearch-dashboards-2.x" + openvswitch: "centos-nfv-openvswitch" + opstools: "centos-opstools" + proxysql: "proxysql" + rabbitmq: "rabbitmq_rabbitmq-server" diff --git a/releasenotes/notes/rocky-10-epoxy-65b8315a10fa0096.yaml b/releasenotes/notes/rocky-10-epoxy-65b8315a10fa0096.yaml new file mode 100644 index 0000000000..7e54e07513 --- /dev/null +++ b/releasenotes/notes/rocky-10-epoxy-65b8315a10fa0096.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + Adds support for building ``CentOS Stream 10`` and ``Rocky Linux 10`` + container images. In order to build such images please pass + ``--base centos --base-tag stream10`` or ``--base rocky --base-tag 10`` + to ``kolla-build``. diff --git a/tests/templates/template_overrides.j2 b/tests/templates/template_overrides.j2 index 0126b731ab..17d9853b3d 100644 --- a/tests/templates/template_overrides.j2 +++ b/tests/templates/template_overrides.j2 @@ -39,13 +39,15 @@ NOTE(hrw): Rocky is not mirrored but it uses CentOS repos which are #} {% raw %} {% block base_centos_repo_overrides_post_copy %} -{% endraw %} +{% if not base_distro_tag.startswith('10') %} COPY ci-rocky.repo /etc/yum.repos.d/ +{% endraw %} RUN cd /etc/yum.repos.d/ && mkdir not-for-ci/ \ && sed -i -e "s/MIRROR/{{ nodepool_mirror_host }}/g" /etc/yum.repos.d/ci-rocky.repo - {% raw %} +{% endif %} + {% endblock %} {% endraw %} {% endif %} {# if centos/rocky #} @@ -58,7 +60,7 @@ RUN cd /etc/yum.repos.d/ && mkdir not-for-ci/ \ {% endblock %} {% block base_centos_repo_overrides_post_yum -%} -{%- if not base_distro_tag.startswith('stream10') -%} +{%- if not (base_distro_tag.startswith('10') or base_distro_tag.startswith('stream10')) -%} && cd /etc/yum.repos.d/ && mv CentOS*.repo epel*.repo not-for-ci/ {%- endif -%} {% endblock %} From f3a5124f442397d06da73f820c45f4245cf1b8bf Mon Sep 17 00:00:00 2001 From: Michal Nasiadka Date: Fri, 11 Oct 2024 14:13:58 +0200 Subject: [PATCH 4/4] Add Valkey Change-Id: I02f3adf9825636e2b81c50543d6f95ea986019b6 Signed-off-by: Michal Nasiadka --- docker/valkey/valkey-base/Dockerfile.j2 | 17 ++++++++++ docker/valkey/valkey-base/extend_start.sh | 9 ++++++ docker/valkey/valkey-sentinel/Dockerfile.j2 | 26 +++++++++++++++ docker/valkey/valkey-sentinel/extend_start.sh | 32 +++++++++++++++++++ docker/valkey/valkey-server/Dockerfile.j2 | 23 +++++++++++++ kolla/common/users.py | 6 +++- kolla/image/unbuildable.py | 8 +++++ 7 files changed, 120 insertions(+), 1 deletion(-) create mode 100644 docker/valkey/valkey-base/Dockerfile.j2 create mode 100644 docker/valkey/valkey-base/extend_start.sh create mode 100644 docker/valkey/valkey-sentinel/Dockerfile.j2 create mode 100644 docker/valkey/valkey-sentinel/extend_start.sh create mode 100644 docker/valkey/valkey-server/Dockerfile.j2 diff --git a/docker/valkey/valkey-base/Dockerfile.j2 b/docker/valkey/valkey-base/Dockerfile.j2 new file mode 100644 index 0000000000..7d4e6da9a0 --- /dev/null +++ b/docker/valkey/valkey-base/Dockerfile.j2 @@ -0,0 +1,17 @@ +FROM {{ namespace }}/{{ image_prefix }}base:{{ tag }} +{% block labels %} +LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}" +{% endblock %} + +{% block valkey_base_header %}{% endblock %} + +{% import "macros.j2" as macros with context %} + +{{ macros.configure_user(name='valkey', homedir='/run/valkey') }} + +COPY extend_start.sh /usr/local/bin/kolla_extend_start +RUN chmod 644 /usr/local/bin/kolla_extend_start + +{{ macros.kolla_patch_sources() }} + +{% block valkey_base_footer %}{% endblock %} diff --git a/docker/valkey/valkey-base/extend_start.sh b/docker/valkey/valkey-base/extend_start.sh new file mode 100644 index 0000000000..3a3a321d4e --- /dev/null +++ b/docker/valkey/valkey-base/extend_start.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +if [[ ! -d "/var/log/kolla/valkey" ]]; then + mkdir -p /var/log/kolla/valkey +fi + +if [[ $(stat -c %a /var/log/kolla/valkey) != "755" ]]; then + chmod 755 /var/log/kolla/valkey +fi diff --git a/docker/valkey/valkey-sentinel/Dockerfile.j2 b/docker/valkey/valkey-sentinel/Dockerfile.j2 new file mode 100644 index 0000000000..9cdfac282f --- /dev/null +++ b/docker/valkey/valkey-sentinel/Dockerfile.j2 @@ -0,0 +1,26 @@ +FROM {{ namespace }}/{{ image_prefix }}valkey-base:{{ tag }} +{% block labels %} +LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}" +{% endblock %} + +{% block valkey_sentinel_header %}{% endblock %} + +{% import "macros.j2" as macros with context %} + +{% if base_package_type == 'rpm' %} +{{ macros.enable_extra_repos(['epel']) }} + {% set valkey_sentinel_packages = ['valkey'] %} +{% elif base_package_type == 'deb' %} + {% set valkey_sentinel_packages = ['valkey-sentinel'] %} +{% endif %} +{{ macros.install_packages(valkey_sentinel_packages | customizable("packages")) }} + +COPY extend_start.sh /usr/local/bin/kolla_extend_start +RUN chmod 644 /usr/local/bin/kolla_extend_start + +{{ macros.kolla_patch_sources() }} + +{% block valkey_sentinel_footer %}{% endblock %} +{% block footer %}{% endblock %} + +USER valkey diff --git a/docker/valkey/valkey-sentinel/extend_start.sh b/docker/valkey/valkey-sentinel/extend_start.sh new file mode 100644 index 0000000000..e6af42ef6b --- /dev/null +++ b/docker/valkey/valkey-sentinel/extend_start.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +if [[ ! -d "/var/log/kolla/valkey" ]]; then + mkdir -p /var/log/kolla/valkey +fi + +if [[ $(stat -c %a /var/log/kolla/valkey) != "755" ]]; then + chmod 755 /var/log/kolla/valkey +fi + +# The CONFIG REWRITE command rewrites the valkey.conf +# file the server was started with, applying the minimal +# changes needed to make it reflect the configuration +# currently used by the server, which may be different +# compared to the original one because of the use of +# the CONFIG SET command. +# +# https://valkey.io/commands/config-rewrite/ +# +# Because of above behaviour it's needed to +# hack kolla's CMD. +# +# Without this hack +# /usr/local/bin/kolla_set_configs --check +# is always reporting changed. +# +# Therefore valkey-sentinel is always restarted +# even if configuration is not changed from +# kolla-ansible side. +if [ ! -z "${VALKEY_CONF}" ] && [ ! -z ${VALKEY_GEN_CONF} ]; then + cp ${VALKEY_CONF} ${VALKEY_GEN_CONF} +fi diff --git a/docker/valkey/valkey-server/Dockerfile.j2 b/docker/valkey/valkey-server/Dockerfile.j2 new file mode 100644 index 0000000000..046260d7bf --- /dev/null +++ b/docker/valkey/valkey-server/Dockerfile.j2 @@ -0,0 +1,23 @@ +FROM {{ namespace }}/{{ image_prefix }}valkey-base:{{ tag }} +{% block labels %} +LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}" +{% endblock %} + +{% block valkey_server_header %}{% endblock %} + +{% import "macros.j2" as macros with context %} + +{% if base_package_type == 'rpm' %} +{{ macros.enable_extra_repos(['epel']) }} + {% set valkey_server_packages = ['valkey'] %} +{% elif base_package_type == 'deb' %} + {% set valkey_server_packages = ['valkey'] %} +{% endif %} +{{ macros.install_packages(valkey_server_packages | customizable("packages")) }} + +{{ macros.kolla_patch_sources() }} + +{% block valkey_server_footer %}{% endblock %} +{% block footer %}{% endblock %} + +USER valkey diff --git a/kolla/common/users.py b/kolla/common/users.py index 9468396e42..878022e48d 100644 --- a/kolla/common/users.py +++ b/kolla/common/users.py @@ -345,5 +345,9 @@ 'hsmusers-user': { 'uid': 42493, # This is not used, but the group ID is required. 'gid': 42493, - } + }, + 'valkey-user': { + 'uid': 42494, + 'gid': 42494, + }, } diff --git a/kolla/image/unbuildable.py b/kolla/image/unbuildable.py index 9a75bfe611..17a7ea7c6b 100644 --- a/kolla/image/unbuildable.py +++ b/kolla/image/unbuildable.py @@ -28,6 +28,10 @@ "tgtd", # Not supported on CentOS }, + 'centos+stream9': { + "valkey-base" # Not supported on Stream 9 + }, + 'centos+stream10': { "collectd", # No opstools repo for EL10 "redis-base", # No redis repo for EL10 @@ -47,6 +51,10 @@ "tgtd", # Not supported on CentOS }, + 'rocky+9': { + "valkey-base" # Not supported on Rocky 9 + }, + 'rocky+10': { "redis-base", # No Redis in EL10 "telegraf" # Missing opstools repo