aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.ansible-lint3
-rw-r--r--.zuul.d/base.yaml164
-rw-r--r--.zuul.d/debian.yaml109
-rw-r--r--.zuul.d/project.yaml16
-rw-r--r--.zuul.d/tox.yaml12
-rw-r--r--.zuul.d/ubuntu.yaml105
-rw-r--r--README.rst90
-rw-r--r--doc/source/admin/image-building.rst15
-rw-r--r--doc/source/ceph_versions.csv6
-rw-r--r--doc/source/contributor/adding-a-new-image.rst4
-rw-r--r--doc/source/contributor/contributing.rst54
-rw-r--r--doc/source/contributor/release-management.rst19
-rw-r--r--doc/source/contributor/versions.rst24
-rw-r--r--doc/source/matrix_aarch64.csv4
-rw-r--r--doc/source/matrix_x86.csv4
-rw-r--r--doc/source/openvswitch_versions.csv5
-rw-r--r--doc/source/ovn_versions.csv5
-rw-r--r--doc/source/support_matrix.rst20
-rw-r--r--docker/aodh/aodh-base/Dockerfile.j22
-rw-r--r--docker/base/Dockerfile.j290
-rw-r--r--docker/base/apt_preferences.debian2
-rw-r--r--docker/base/ci-centos.repo10
-rw-r--r--docker/base/ci-rocky.repo35
-rw-r--r--docker/base/copr-rabbitmq-erlang.repo11
-rw-r--r--docker/base/debian.sources13
-rw-r--r--docker/base/docker-ce.repo6
-rw-r--r--docker/base/grafana.repo8
-rw-r--r--docker/base/influxdb.repo6
-rw-r--r--docker/base/mariadb.repo7
-rw-r--r--docker/base/opensearch.repo19
-rw-r--r--docker/base/proxysql.repo6
-rw-r--r--docker/base/rabbitmq_rabbitmq-erlang.repo9
-rw-r--r--docker/base/rabbitmq_rabbitmq-server.repo9
-rw-r--r--docker/base/set_configs.py54
-rw-r--r--docker/base/sources.list.debian11
-rw-r--r--docker/base/sources.list.ubuntu15
-rw-r--r--docker/base/sources.list.ubuntu.aarch6415
-rw-r--r--docker/base/td.repo6
-rw-r--r--docker/base/ubuntu.sources24
-rw-r--r--docker/base/ubuntu.sources.arm6424
-rw-r--r--docker/bifrost/bifrost-base/Dockerfile.j227
-rw-r--r--docker/cinder/cinder-api/Dockerfile.j25
-rw-r--r--docker/cinder/cinder-base/Dockerfile.j23
-rw-r--r--docker/collectd/Dockerfile.j25
-rw-r--r--docker/dnsmasq/extend_start.sh19
-rw-r--r--docker/glance/glance-api/Dockerfile.j24
-rw-r--r--docker/glance/glance-base/Dockerfile.j25
-rw-r--r--docker/gnocchi/gnocchi-base/Dockerfile.j24
-rw-r--r--docker/hacluster/hacluster-base/Dockerfile.j24
-rw-r--r--docker/haproxy/haproxy-ssh/extend_start.sh2
-rw-r--r--docker/heat/heat-base/Dockerfile.j27
-rw-r--r--docker/heat/heat-base/extend_start.sh3
-rw-r--r--docker/horizon/Dockerfile.j211
-rw-r--r--docker/horizon/extend_start.sh13
-rw-r--r--docker/httpd/Dockerfile.j244
-rw-r--r--docker/httpd/extend_start.sh1
-rw-r--r--docker/influxdb/Dockerfile.j229
-rw-r--r--docker/influxdb/extend_start.sh11
-rw-r--r--docker/influxdb/influxdb_sudoers1
-rw-r--r--docker/ironic-inspector/Dockerfile.j246
-rw-r--r--docker/ironic-inspector/extend_start.sh17
-rw-r--r--docker/ironic-inspector/ironic_inspector_sudoers1
-rw-r--r--docker/ironic/ironic-base/Dockerfile.j22
-rw-r--r--docker/ironic/ironic-base/ironic_sudoers1
-rw-r--r--docker/ironic/ironic-conductor/Dockerfile.j22
-rw-r--r--docker/ironic/ironic-pxe-filter/Dockerfile.j224
-rw-r--r--docker/ironic/ironic-pxe-filter/extend_start.sh6
-rw-r--r--docker/ironic/ironic-pxe/Dockerfile.j27
-rw-r--r--docker/ironic/ironic-pxe/extend_start.sh7
-rw-r--r--docker/keystone/keystone-base/Dockerfile.j213
-rw-r--r--docker/keystone/keystone-base/wsgi2
-rw-r--r--docker/keystone/keystone-ssh/extend_start.sh3
-rw-r--r--docker/keystone/keystone/extend_start.sh1
-rw-r--r--docker/kolla-toolbox/Dockerfile.j247
-rw-r--r--docker/kolla-toolbox/ansible.cfg3
-rw-r--r--docker/kolla-toolbox/requirements.yml6
-rw-r--r--docker/kuryr/kuryr-libnetwork/Dockerfile.j26
-rw-r--r--docker/manila/manila-api/Dockerfile.j25
-rw-r--r--docker/manila/manila-base/Dockerfile.j25
-rw-r--r--docker/manila/manila-share/Dockerfile.j23
-rw-r--r--docker/mariadb-server/Dockerfile.j2 (renamed from docker/mariadb/mariadb-server/Dockerfile.j2)19
-rw-r--r--docker/mariadb-server/backup.sh (renamed from docker/mariadb/mariadb-server/backup.sh)0
-rw-r--r--docker/mariadb-server/backup_replica.sh (renamed from docker/mariadb/mariadb-server/backup_replica.sh)3
-rw-r--r--docker/mariadb-server/extend_start.sh (renamed from docker/mariadb/mariadb-server/extend_start.sh)14
-rwxr-xr-xdocker/mariadb-server/healthcheck_mariadb (renamed from docker/mariadb/mariadb-server/healthcheck_mariadb)0
-rw-r--r--docker/mariadb-server/mariadb_sudoers (renamed from docker/mariadb/mariadb-server/mariadb_sudoers)0
-rw-r--r--docker/mariadb-server/security_reset.expect (renamed from docker/mariadb/mariadb-server/security_reset.expect)0
-rw-r--r--docker/mariadb/mariadb-base/Dockerfile.j238
-rw-r--r--docker/mariadb/mariadb-clustercheck/Dockerfile.j219
-rw-r--r--docker/mariadb/mariadb-clustercheck/extend_start.sh11
-rw-r--r--docker/mariadb/mariadb-clustercheck/socat_wrapper.sh19
-rwxr-xr-xdocker/masakari/masakari-base/extend_start.sh3
-rw-r--r--docker/masakari/masakari-monitors/Dockerfile.j24
-rw-r--r--docker/neutron/neutron-base/Dockerfile.j29
-rw-r--r--docker/neutron/neutron-base/keepalived2
-rw-r--r--docker/neutron/neutron-linuxbridge-agent/Dockerfile.j221
-rw-r--r--docker/neutron/neutron-metadata-agent/Dockerfile.j22
-rw-r--r--docker/neutron/neutron-metadata-agent/extend_start.sh18
-rw-r--r--docker/neutron/neutron-mlnx-agent/Dockerfile.j21
-rw-r--r--docker/neutron/neutron-ovn-vpn-agent/Dockerfile.j231
-rw-r--r--docker/nova/nova-base/Dockerfile.j27
-rw-r--r--docker/nova/nova-compute-ironic/Dockerfile.j26
-rw-r--r--docker/nova/nova-compute/Dockerfile.j24
-rw-r--r--docker/nova/nova-libvirt/Dockerfile.j27
-rw-r--r--docker/nova/nova-ssh/Dockerfile.j23
-rw-r--r--docker/nova/nova-ssh/extend_start.sh2
-rw-r--r--docker/octavia/octavia-base/Dockerfile.j219
-rw-r--r--docker/openstack-base/Dockerfile.j213
-rw-r--r--docker/openvswitch/openvswitch-base/Dockerfile.j211
-rw-r--r--docker/ovn/ovn-base/Dockerfile.j22
-rw-r--r--docker/ovn/ovn-base/extend_start.sh2
-rw-r--r--docker/ovn/ovn-controller/Dockerfile.j25
-rw-r--r--docker/ovn/ovn-controller/extend_start.sh6
-rw-r--r--docker/ovn/ovn-nb-db-server/Dockerfile.j24
-rw-r--r--docker/ovn/ovn-nb-db-server/extend_start.sh6
-rw-r--r--docker/ovn/ovn-northd/Dockerfile.j25
-rw-r--r--docker/ovn/ovn-northd/extend_start.sh5
-rw-r--r--docker/ovn/ovn-sb-db-relay/Dockerfile.j23
-rw-r--r--docker/ovn/ovn-sb-db-relay/extend_start.sh6
-rw-r--r--docker/ovn/ovn-sb-db-server/Dockerfile.j24
-rw-r--r--docker/ovn/ovn-sb-db-server/extend_start.sh6
-rw-r--r--docker/prometheus/prometheus-ovn-exporter/Dockerfile.j222
-rw-r--r--docker/prometheus/prometheus-valkey-exporter/Dockerfile.j225
-rw-r--r--docker/rabbitmq/Dockerfile.j26
-rw-r--r--docker/rabbitmq/apt_preferences_rabbitmq.debian6
-rw-r--r--docker/rabbitmq/apt_preferences_rabbitmq.ubuntu6
-rw-r--r--docker/rabbitmq/healthcheck_rabbitmq10
-rw-r--r--docker/redis/redis-base/extend_start.sh9
-rw-r--r--docker/redis/redis/Dockerfile.j222
-rw-r--r--docker/skyline/skyline-apiserver/Dockerfile.j22
-rw-r--r--docker/tacker/tacker-base/Dockerfile.j27
-rw-r--r--docker/telegraf/Dockerfile.j244
-rw-r--r--docker/telegraf/extend_start.sh10
-rw-r--r--docker/telegraf/telegraf_sudoers1
-rw-r--r--docker/valkey/valkey-base/Dockerfile.j2 (renamed from docker/redis/redis-base/Dockerfile.j2)6
-rw-r--r--docker/valkey/valkey-base/extend_start.sh9
-rw-r--r--docker/valkey/valkey-sentinel/Dockerfile.j2 (renamed from docker/redis/redis-sentinel/Dockerfile.j2)15
-rw-r--r--docker/valkey/valkey-sentinel/extend_start.sh (renamed from docker/redis/redis-sentinel/extend_start.sh)18
-rw-r--r--docker/valkey/valkey-server/Dockerfile.j223
-rw-r--r--docker/venus/venus-api/Dockerfile.j218
-rw-r--r--docker/venus/venus-api/extend_start.sh8
-rw-r--r--docker/venus/venus-base/Dockerfile.j229
-rw-r--r--docker/venus/venus-base/extend_start.sh10
-rw-r--r--docker/venus/venus-manager/Dockerfile.j215
-rw-r--r--docker/zun/zun-base/Dockerfile.j25
-rw-r--r--docker/zun/zun-base/app.wsgi2
-rw-r--r--docker/zun/zun-cni-daemon/Dockerfile.j22
-rw-r--r--docker/zun/zun-compute/Dockerfile.j24
-rw-r--r--kolla/common/config.py36
-rw-r--r--kolla/common/sources.py119
-rw-r--r--kolla/common/users.py16
-rw-r--r--kolla/image/kolla_worker.py77
-rw-r--r--kolla/image/tasks.py13
-rw-r--r--kolla/image/unbuildable.py6
-rw-r--r--kolla/template/methods.py140
-rw-r--r--kolla/template/repos.yaml333
-rw-r--r--kolla/tests/test_build.py20
-rw-r--r--kolla/tests/test_methods.py199
-rw-r--r--releasenotes/notes/add-mariadb-healthcheck-script-916e5ad7a216e05e.yaml8
-rw-r--r--releasenotes/notes/add-oci-standard-labels-f68cc6eb3a4db7c7.yaml10
-rw-r--r--releasenotes/notes/add-valkey-exporter-e21762a106307538.yaml5
-rw-r--r--releasenotes/notes/ansible-core-2-20-bd912e1767d5f197.yaml5
-rw-r--r--releasenotes/notes/bug-2035975-94c5670049a7e1a6.yaml5
-rw-r--r--releasenotes/notes/bug-2093414-12e2d0f21e34bc59.yaml7
-rw-r--r--releasenotes/notes/bug-2114173-70d0b815a42ae239.yaml6
-rw-r--r--releasenotes/notes/bug-2120639-74c180bd812ddcf7.yaml10
-rw-r--r--releasenotes/notes/bug-2132960-genisoimage_package_nova-compute-ironic-28f4c262ec201f99.yaml6
-rw-r--r--releasenotes/notes/deb822-3f0435dfce6da841.yaml6
-rw-r--r--releasenotes/notes/debian-trixie-23987480043dc662.yaml5
-rw-r--r--releasenotes/notes/debian-trixie-spice-814929ed1efbcad1.yaml8
-rw-r--r--releasenotes/notes/deprecate-telegraf-db2b0b9f30591552.yaml4
-rw-r--r--releasenotes/notes/drop-delorean-c0bd3229162faef0.yaml5
-rw-r--r--releasenotes/notes/drop-influxdb-cb3161a1e04fa38e.yaml4
-rw-r--r--releasenotes/notes/drop-ironic-inspector-093cc36e06787168.yaml5
-rw-r--r--releasenotes/notes/drop-neutron-linuxbridge-agent-5c4596f148c143ed.yaml5
-rw-r--r--releasenotes/notes/drop-redis-d286ca1237747c48.yaml4
-rw-r--r--releasenotes/notes/drop-telegraf-28dd961f18ed7825.yaml4
-rw-r--r--releasenotes/notes/drop-venus-435234b3bff7f209.yaml5
-rw-r--r--releasenotes/notes/erlang-aarch64-repo-change-7fbc8696990b5677.yaml5
-rw-r--r--releasenotes/notes/fix-glance-api-add-missing-lsscsi-package-e6ae949eb8bdbe7b.yaml6
-rw-r--r--releasenotes/notes/flamingo-prelude-b72f2599ed9d25d5.yaml24
-rw-r--r--releasenotes/notes/fluentd-update-8db10e760b2dc4d5.yaml4
-rw-r--r--releasenotes/notes/gnocchi-4_7_0-fdb7f76d367ee435.yaml4
-rw-r--r--releasenotes/notes/handle-deprecated-rabbitmq-package-archive-47548e7a41baa68b.yaml7
-rw-r--r--releasenotes/notes/image-purpose-1884e00f993e09d0.yaml7
-rw-r--r--releasenotes/notes/influxdb-repo-gpg-key-04eb924f249e54a5.yaml6
-rw-r--r--releasenotes/notes/ironic-pxe-filter-b3b29090b0661ca2.yaml4
-rw-r--r--releasenotes/notes/ironic-pxe-syslinux-tftpboot-3dc6415ed140dc50.yaml6
-rw-r--r--releasenotes/notes/mariadb-11.4-b66b5baf9f5e6cd0.yaml5
-rw-r--r--releasenotes/notes/neutron-metadata-agent-wrapper-scripts-d6163080d169ea14.yaml7
-rw-r--r--releasenotes/notes/opensearch-upgrade-9e263a65f015a376.yaml2
-rw-r--r--releasenotes/notes/rabbitmq-41-d881d0b6bbf46446.yaml2
-rw-r--r--releasenotes/notes/rabbitmq-42-84cf0d09c9f33ef4.yaml4
-rw-r--r--releasenotes/notes/releasenotes/notes/neutron-ovn-vpn-agent-kolla-image-979df04014ed9440.yaml4
-rw-r--r--releasenotes/notes/remove-mariadb-clustercheck-427a6cfb3f39c508.yaml5
-rw-r--r--releasenotes/notes/remove-prometheus-ovn-exporter-c5f5005b4d1a4b12.yaml5
-rw-r--r--releasenotes/notes/repos-yaml-rpm-support-01ff7f5fc3b9ecf2.yaml5
-rw-r--r--releasenotes/notes/rocky-10-4111fa0160be14ab.yaml12
-rw-r--r--releasenotes/notes/rocky-ovn-25.09-345468aec8cc8073.yaml4
-rw-r--r--releasenotes/notes/switch-proxysql3-base-to-almalinux10-d64c97ba1a894a34.yaml5
-rw-r--r--releasenotes/notes/update-packages-071d1863639fe3e3.yaml20
-rw-r--r--releasenotes/notes/update-prometheus-server-3.5.1-e23a9826b25573a8.yaml4
-rw-r--r--releasenotes/notes/update-prometheus-services-98085e2ccf13d1fb.yaml16
-rw-r--r--releasenotes/source/2024.1.rst2
-rw-r--r--releasenotes/source/2025.2.rst6
-rw-r--r--releasenotes/source/index.rst1
-rw-r--r--roles/kolla-build-config/defaults/main.yml3
-rw-r--r--roles/kolla-build-deps/tasks/main.yml6
-rw-r--r--setup.cfg5
-rw-r--r--test-requirements.txt5
-rw-r--r--tests/playbooks/copr-erlang-update.yml18
-rw-r--r--tests/playbooks/post.yml6
-rw-r--r--tests/playbooks/publish.yml18
-rw-r--r--tests/playbooks/run.yml2
-rw-r--r--tests/templates/template_overrides.j291
-rw-r--r--tests/test_set_config.py44
-rwxr-xr-xtools/dump_info.sh26
-rw-r--r--tox.ini2
-rw-r--r--zuul.d/base.yaml50
-rw-r--r--zuul.d/centos.yaml31
-rw-r--r--zuul.d/debian.yaml72
-rw-r--r--zuul.d/nodesets.yaml59
-rw-r--r--zuul.d/periodics/copr.yaml18
-rw-r--r--zuul.d/project.yaml28
-rw-r--r--zuul.d/rocky.yaml57
-rw-r--r--zuul.d/scenarios/aio.yaml41
-rw-r--r--zuul.d/scenarios/bifrost.yaml13
-rw-r--r--zuul.d/scenarios/cells.yaml13
-rw-r--r--zuul.d/scenarios/cephadm.yaml19
-rw-r--r--zuul.d/scenarios/ironic.yaml13
-rw-r--r--zuul.d/scenarios/mariadb.yaml13
-rw-r--r--zuul.d/scenarios/masakari.yaml13
-rw-r--r--zuul.d/scenarios/octavia.yaml11
-rw-r--r--zuul.d/scenarios/ovn.yaml13
-rw-r--r--zuul.d/secrets.yaml68
-rw-r--r--zuul.d/tox.yaml23
-rw-r--r--zuul.d/ubuntu.yaml72
237 files changed, 2292 insertions, 1939 deletions
diff --git a/.ansible-lint b/.ansible-lint
index a335f1800..0e5122054 100644
--- a/.ansible-lint
+++ b/.ansible-lint
@@ -1,7 +1,8 @@
---
exclude_paths:
- .cache/ # implicit unless exclude_paths is defined in config
- - .zuul.d/
+ - zuul.d/
+ - kolla/template/repos.yaml
offline: true
parseable: true
profile: basic
diff --git a/.zuul.d/base.yaml b/.zuul.d/base.yaml
deleted file mode 100644
index 25f571ade..000000000
--- a/.zuul.d/base.yaml
+++ /dev/null
@@ -1,164 +0,0 @@
----
-- project:
- queue: kolla
-
-- secret:
- name: kolla_dockerhub_credentials
- data:
- username: !encrypted/pkcs1-oaep
- - LgqBUH6EMZT5mKJMoXsaMAv9CSbiAgoqxU98QjeoDX84K/y6NmFF/ZhficQD0+JT7NfpB
- 2pPAEKeILn63Toeu6ZFkGeUHo5Gf6cIzbXJjqdWIvnwpxV+zUWqM8C2uf8JZjc3mIVOXp
- yShDzmCCVkeX/x1n69pwuURabR1p5N15CbroT4l1eK7HGiMAcQwhRaCgDpgxsX5yKP07A
- jIn9M3xwJdjSPxQ7dp1ean3CGPtEHkRuOHjezXfQfdIB7ZMNkGkDaQKTwof56UKDT+MMN
- L0QT0PntUd0QwTYfUeCPGRd2TI8EFq+iuEy+6945OxLN9WcZmBza3HTVRyPQ8Hx1hXfaP
- yth8F56SIchc5HQP+zHRZg9KQlb5wPNdKwoIkhDVBZW5Zb1mZmRJF/LR45o+NT0DT7+SE
- 6JshLSOHChD7JfQE19Gi/Rrf9VZS4wd5TfHQSOQH1u8pZzC71sBOkeSnsQsqWePoyERN2
- gr0uvfB6yX7y2WHfuZRs2a+5HfYjAR+CQPA87nJYOQf8AfQ++9RGVFCSCpaAmTU2tGcjs
- /J/khnpd0iNNimT3+oXqtBnvi5WCWZ+t/yDfsa3HQ5qRtbXepGoFDibOfhACZ8K7jaFGV
- lBF6StAFCCOz+MXUyn/a+Vo19k43CRe3kdIpOcca0bcrjOx8fqBnc4zmnuhgQQ=
- password: !encrypted/pkcs1-oaep
- - najtUY1DOo18hXxnz8L+FdJo2gW5jyZbJhnMOK1qu9/N94N+K+S72hgvusFMewq4rq9Es
- fsSe98ZCBmMUT1ZUVs9LymSgzaQSxSXkyETlaEjauF/DLahEHCCWW249l5pQ7lZXiaBAM
- edlZCdTth+wSFLMcF4jhoFlftAcFv8ue10HrH3vTG7lYfhL8u1ueGKsauVcxzAiT/F1Wd
- xACZrT5vGoHlv9fALK39JC9OuNNNLPAkqecsP+/abjttyX5OR/ZQ2amM3hWoC1cFIxsYR
- Gfakq0yLEewnErV8ryaTSzgvpT8bB1wJk8Ti/iU6xuaNO13x7VpHtMErHcN0BrOadPJdb
- B/xFqkIdX0km6ioffZUELsxrEonSD8tAS8vdn5+KUBFkg9f/KJdCAaR3LmZvF975U9QdI
- 0BnA0XcjOBm+HZqWvcnkIUmoTqzK0vdjRJ2lRPqTvTBTc/i82mTMiChf0G85CV7kTGdjG
- D9O5sYvy2fQobg28DCXXTxA7YV03nVFPJ56VhB6TmbKCZXqlKNXIbWy5RSNZ8d4cfC7qF
- kOrdp8oW6+KidWKFYrJaqFhGfpfg+j1nv8BIzGqmspN7PsUo9Q/svCVy+d5FaDs7rxz+j
- b7jPyuV0g5760TUHjsqIlamYegGSz1ZhGkp2Gl1VzQRjo2/6Tr6Gk546DMlZDI=
-
-- secret:
- name: kolla_quay_io_creds
- data:
- username: !encrypted/pkcs1-oaep
- - VsvMvV5wOUfl5B2HJboWfN8mta/Tuk7PXcJf5RfKk4uXP6qYGM4dcMB9EdoJNhMCi7FeA
- NrTZaxf/AjLAkgKlRhz7sPKhmR95+jrFRgEzedpcCamdPkCa+wNQEMNMd0rTwioYUEWm4
- Y+Oa2mIswy5LcUViz38MPQhf0725U5sYtH2qkuhMbU8u8vzYhSk749xtAN6I1T8ziTKKB
- 3FBowFc2rSRJUQPsLLZjTxBHbrk+00p/DPoHLOz9/9Jf5U//jkqx4ziE2w1a4+x/kWlYT
- BPXuRL9wWN9ci2uKuoDRRd6QHJzPIJerKG07YU4PAcS3M245rbjjUQC3n3SQJs3u4kKI8
- rZrxfbmtbfjkzRQXnhnhPk47PebpjnpEUNw6+scnQ+ELdQ0QYGsVRM4x4/ywe5CeFYVDR
- whQQ1iG21FOs3iv592I7P7l4cEKqKFyx9qiV4t2fyLrHgtU+L/05iENH9igGJ0tDCQ5zT
- 2F2laUWGtzUh76txuFDjpBxR3qS62g825dZXaTegkA+v6c1az23lrYTqbTRf63cuAQyYX
- APPRC5QU0URXBoIbWb0ry3O5lr/uudI1ZCLN8SSJhpmZAIlviOfaxrKu9fg2YY9e0xpz9
- CMEWQ/n1EsUyL34Wv189Rvpq4M4GTvozEKsRsjY3u0ygwEUXcH2lEXGOrs+hms=
- password: !encrypted/pkcs1-oaep
- - dR2beX9Bn7O8iCqNHtWo1FWX71vy+CwffDk5rafUh5yew2OVNcVtVjVOPvHwb5zZv1LCd
- MVcgIJe513dM5tQkn2H/HvN/seVu/CfHA6lg6Tj+ueW9VdUH6KiBPr+NCgQWX+Xt3sXbt
- sPzfNGpvTw1ZCUp0nnudZEKPZ2jn83baNMumW8E8xPb4s2kePzINsb8sGvqy6BOk5rUIo
- 7DaEwWrNnq9TTnMcWGIF+fLP5Pin7+fmvnLkT6qRN4v5FszpHYm8YCpv02nzqI1/F9HeM
- P3GtkUdIPxa1+3VwZ/DSA9BWi4VG15jDtaxeZFVGQuMqQAiCx8Jqvd+xX2qugAq1m+U7W
- JobDbaeTYrUmJ1zUaspPZ16RTSf9UGCTaejoSVKM9lJHv6ixtsX7UWkgFvceVrlkt7TtH
- 2mqhBnXvwB6VD5d311WRUfNXz7gb60otisB5G2k/UnRnv1Mu33TPVT7XOFDpVnAvRS3lt
- haJ34N7AWnDIsllvzcmVWTw3wf/6LLfOQrW2Z+vNambyR4Oc+LVUTbEvZVIU65LpOTIn3
- LfDhCLDD3VtnVOrj4UxZsjzmPbday1fziua/7f+CXsShC5erz0ZM65rMCwkjWeI6Kc63A
- 0M27tl+OWHO3KkfFR4tWc3dws3r1kYjQeds0adBHyYD0eL8SJfwZkbtojAQ1JM=
-
-- secret:
- name: kolla_quay_io_api
- data:
- token: !encrypted/pkcs1-oaep
- - uGqaFVfPP2HdAELtq12FTGstT7Y7/TCz4IwAgrGtB+2ZUXgCTYrkzhImRLFG3OQMqzx4d
- oO6ChFxPGI9hX06mg4MbPBVYXCyh+opxxeaVrgtu03IOB1V8bMlGfVgPSJO8mEp/00poY
- hMtut/12FWMhjNO+Um2XaKtRmDZKYYoPmuO4BDauJTaTAl1+Elhm5qjrkFOuklb4jP07c
- 9OIex5KiSIqMCmSzduGzVK60BoByzl4u2KPDheEAcohIpjrkm9c6VBe13hZw5llXiDRf2
- LqHPu/IXIFlT9bnPp49rP8+Gm3z1/sdNsN+TKk1VSWGlUudvaBO9Cdejwo+NMWKMAqwGi
- drzt/YcCDCQ1SFzkhWk5EdEN5qyrH3jF3I5YzcQ1dKXgr9NOoQSwNLxL5oNL88sH7tqPT
- xN+EKz+AGG+ib3S9efhYFkFkqs9z4ia8mIM+2/lH5V5gy7iVVMHmxPr+JJ+5sq5lsHrS5
- No+QrCyeZWWH2qnToQo8S73i9yISzDAML6u5NlKfIJ/nAqsxBOqpCq8xqgI3PLD86lmfL
- 7xlK/HOqvgMubcqzR33mRoSnkcnFpD50O9k41ZsF9SPKHMGmk9LyI05vkL6bcc3ypLBQY
- BTdg70hF/5m6rHFbVCsNDPlVykcEzsW6D4qqxh/5b3LHbPYbe7ciXcc+PTnYb8=
-
-- nodeset:
- name: kolla-centos-9-stream
- nodes:
- - name: primary
- label: centos-9-stream
-
-- nodeset:
- name: kolla-rockylinux-9
- nodes:
- - name: primary
- label: rockylinux-9
-
-- nodeset:
- name: kolla-ubuntu-noble
- nodes:
- - name: primary
- label: ubuntu-noble
-
-- nodeset:
- name: kolla-debian-bookworm
- nodes:
- - name: primary
- label: debian-bookworm
-
-- nodeset:
- name: kolla-centos-9-stream-aarch64
- nodes:
- - name: primary
- label: centos-9-stream-arm64
-
-- nodeset:
- name: kolla-debian-bookworm-aarch64
- nodes:
- - name: primary
- label: debian-bookworm-arm64
-
-- nodeset:
- name: kolla-rockylinux-9-aarch64
- nodes:
- - name: primary
- label: rockylinux-9-arm64
-
-- nodeset:
- name: kolla-ubuntu-noble-aarch64
- nodes:
- - name: primary
- label: ubuntu-noble-arm64
-
-- job:
- name: kolla-base
- parent: base
- timeout: 10800
- post-timeout: 10800
- pre-run: tests/playbooks/pre.yml
- run: tests/playbooks/run.yml
- post-run: tests/playbooks/post.yml
- attempts: 5
- roles:
- - zuul: openstack/ansible-collection-kolla
- irrelevant-files:
- - ^.*\.rst$
- - ^doc/.*
- - ^etc/.*
- - ^releasenotes/.*$
- - ^specs/.*$
- - ^test-requirements.txt$
- - ^\.zuul\.d/
- - ^\..+
- - ^contrib/
- - ^LICENSE$
- - ^tox\.ini$
- vars:
- base_arch: "x86_64"
- publisher: false
- container_engine: "docker"
- extra-vars:
- kolla_logs_dir: "{{ zuul_output_dir }}/logs/kolla"
- kolla_build_logs_dir: "{{ kolla_logs_dir }}/build"
- virtualenv_path: "/tmp/kolla-virtualenv"
- kolla_build_template_overrides_path: "{{ zuul.executor.work_root }}/{{ zuul.projects['opendev.org/openstack/kolla'].src_dir }}/tests/templates/template_overrides.j2"
-
-- job:
- name: kolla-base-podman
- parent: kolla-base
- vars:
- container_engine: "podman"
- configure_ephemeral_mountpoint: "/var/lib/containers"
-
-- job:
- name: kolla-build-no-infra-wheels-base
- parent: kolla-base
- vars:
- use_infra_wheels_mirror: false
diff --git a/.zuul.d/debian.yaml b/.zuul.d/debian.yaml
deleted file mode 100644
index 2a2e526a3..000000000
--- a/.zuul.d/debian.yaml
+++ /dev/null
@@ -1,109 +0,0 @@
----
-- project:
- check:
- jobs:
- - kolla-build-debian
- - kolla-build-debian-podman
- - kolla-ansible-debian
- - kolla-ansible-debian-upgrade:
- voting: false
- check-arm64:
- jobs:
- - kolla-build-debian-aarch64
- - kolla-ansible-debian-aarch64
- gate:
- jobs:
- - kolla-build-debian
- - kolla-build-debian-podman
- - kolla-ansible-debian
- # - kolla-ansible-debian-upgrade
- periodic:
- jobs:
- - kolla-publish-debian-quay
- - kolla-publish-debian-aarch64-quay
- periodic-weekly:
- jobs:
- - kolla-publish-debian-dockerhub
- - kolla-publish-debian-aarch64-dockerhub
- experimental:
- jobs:
- - kolla-build-no-infra-wheels-debian
- - kolla-ansible-debian-ironic:
- files: ^docker\/(base|dnsmasq|ironic|ironic-inspector|iscsid|openstack-base)\/.*
-
-- job:
- name: kolla-build-debian
- parent: kolla-base
- nodeset: kolla-debian-bookworm
- vars:
- base_distro: debian
- base_distro_version: bookworm
-
-- job:
- name: kolla-build-debian-podman
- parent: kolla-base-podman
- nodeset: kolla-debian-bookworm
- vars:
- base_distro: debian
- base_distro_version: bookworm
-
-- job:
- name: kolla-build-debian-aarch64
- parent: kolla-build-debian
- nodeset: kolla-debian-bookworm-aarch64
- voting: false
- vars:
- base_arch: aarch64
-
-- job:
- name: kolla-publish-debian-dockerhub
- parent: kolla-build-debian
- post-run: tests/playbooks/publish.yml
- vars:
- publisher: true
- kolla_registry: dockerhub
- kolla_namespace: kolla
- secrets:
- - kolla_dockerhub_credentials
-
-- job:
- name: kolla-publish-debian-quay
- parent: kolla-build-debian
- 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
-
-- job:
- name: kolla-publish-debian-aarch64-dockerhub
- parent: kolla-build-debian-aarch64
- post-run: tests/playbooks/publish.yml
- vars:
- publisher: true
- kolla_registry: dockerhub
- kolla_namespace: kolla
- secrets:
- - kolla_dockerhub_credentials
-
-- job:
- name: kolla-publish-debian-aarch64-quay
- parent: kolla-build-debian-aarch64
- 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
-
-- job:
- name: kolla-build-no-infra-wheels-debian
- parent: kolla-build-no-infra-wheels-base
- nodeset: kolla-debian-bookworm
- vars:
- base_distro: debian
diff --git a/.zuul.d/project.yaml b/.zuul.d/project.yaml
deleted file mode 100644
index a93a1ef01..000000000
--- a/.zuul.d/project.yaml
+++ /dev/null
@@ -1,16 +0,0 @@
----
-- project:
- templates:
- - check-requirements
- - openstack-python3-jobs
- - openstack-python3-jobs-arm64
- - openstack-cover-jobs
- - periodic-stable-jobs
- - publish-openstack-docs-pti
- - release-notes-jobs-python3
- check:
- jobs:
- - kolla-tox-genconfig
- gate:
- jobs:
- - kolla-tox-genconfig
diff --git a/.zuul.d/tox.yaml b/.zuul.d/tox.yaml
deleted file mode 100644
index fb52e06d4..000000000
--- a/.zuul.d/tox.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
----
-- job:
- name: kolla-tox-genconfig
- parent: openstack-tox
- timeout: 2400
- description: |
-
- Run genconfig
-
- Uses tox with the ``genconfig`` environment.
- vars:
- tox_envlist: genconfig
diff --git a/.zuul.d/ubuntu.yaml b/.zuul.d/ubuntu.yaml
deleted file mode 100644
index ebbc96bc6..000000000
--- a/.zuul.d/ubuntu.yaml
+++ /dev/null
@@ -1,105 +0,0 @@
----
-- project:
- check:
- jobs:
- - kolla-build-ubuntu
- - kolla-build-ubuntu-podman
- - kolla-ansible-ubuntu
- - kolla-ansible-ubuntu-upgrade
- # Test rabbitmq and mariadb in multinode ceph jobs.
- - kolla-ansible-ubuntu-cephadm:
- files: ^docker\/(base|cinder|glance|mariadb|openstack-base|rabbitmq)\/.*
- - kolla-ansible-ubuntu-upgrade-cephadm:
- files: ^docker\/(base|cinder|glance|mariadb|openstack-base|rabbitmq)\/.*
- - kolla-ansible-ubuntu-ironic:
- files: ^docker\/(base|dnsmasq|ironic|ironic-inspector|iscsid|openstack-base)\/.*
- - kolla-ansible-ubuntu-swift:
- files: ^docker/(base|openstack-base|glance|swift)/
- - kolla-ansible-ubuntu-mariadb:
- files: ^docker/(base|mariadb)/
- - kolla-ansible-ubuntu-masakari:
- files: ^docker/(base|masakari|openstack-base)/
- - kolla-ansible-ubuntu-octavia:
- files: ^docker/(base|neutron|octavia|openstack-base|openvswitch|ovn)/
- - kolla-ansible-ubuntu-ovn:
- files: ^docker/(base|neutron|openstack-base|openvswitch|ovn)/
- - kolla-ansible-ubuntu-prometheus-opensearch:
- files: ^docker/(base|opensearch|fluentd|grafana|prometheus)/
- - kolla-ansible-ubuntu-kvm:
- files: ^docker/nova/
- - kolla-ansible-ubuntu-cells:
- files: ^docker/proxysql/
- - kolla-ansible-ubuntu-bifrost:
- files: ^docker/bifrost/
- check-arm64:
- jobs:
- - kolla-build-ubuntu-aarch64
- gate:
- jobs:
- - kolla-build-ubuntu
- - kolla-build-ubuntu-podman
- - kolla-ansible-ubuntu
- - kolla-ansible-ubuntu-upgrade
- periodic:
- jobs:
- - kolla-publish-ubuntu-quay
- periodic-weekly:
- jobs:
- - kolla-publish-ubuntu-dockerhub
- experimental:
- jobs:
- - kolla-build-no-infra-wheels-ubuntu
-
-- job:
- name: kolla-build-ubuntu
- parent: kolla-base
- nodeset: kolla-ubuntu-noble
- vars:
- base_distro: ubuntu
- base_distro_version: noble
-
-- job:
- name: kolla-build-ubuntu-podman
- parent: kolla-base-podman
- nodeset: kolla-ubuntu-noble
- vars:
- base_distro: ubuntu
- base_distro_version: noble
-
-- job:
- name: kolla-build-ubuntu-aarch64
- parent: kolla-build-ubuntu
- nodeset: kolla-ubuntu-noble-aarch64
- vars:
- base_arch: aarch64
- voting: false
-
-- job:
- name: kolla-publish-ubuntu-dockerhub
- parent: kolla-build-ubuntu
- post-run: tests/playbooks/publish.yml
- vars:
- publisher: true
- kolla_registry: dockerhub
- kolla_namespace: kolla
- secrets:
- - kolla_dockerhub_credentials
-
-- job:
- name: kolla-publish-ubuntu-quay
- parent: kolla-build-ubuntu
- 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
-
-- job:
- name: kolla-build-no-infra-wheels-ubuntu
- parent: kolla-build-no-infra-wheels-base
- nodeset: kolla-ubuntu-noble
- vars:
- base_distro: ubuntu
diff --git a/README.rst b/README.rst
index 71a4073b2..766d6b928 100644
--- a/README.rst
+++ b/README.rst
@@ -8,17 +8,18 @@ Kolla Overview
.. Change things from this point on
-The Kolla project is a member of the OpenStack `Big Tent
-Governance <https://governance.openstack.org/tc/reference/projects/index.html>`__.
+The Kolla project is a member of the OpenStack `Governance
+<https://governance.openstack.org/tc/reference/projects/index.html>`__.
Kolla's mission statement is:
::
- To provide production-ready containers and deployment tools for operating
- OpenStack clouds.
+ To provide tools to create production-ready containers and
+ to provide deployment tools for operating OpenStack clouds.
-Kolla provides `Docker <https://docker.com/>`__ containers,
+Kolla provides tools to create containers that can be run under either
+`Docker <https://docker.com/>`__ or `Podman <https://podman.io/>`, as well as
`Ansible <https://ansible.com/>`__ playbooks to deploy OpenStack on baremetal
or virtual machine to meet Kolla's mission.
@@ -39,29 +40,28 @@ Quickstart <https://docs.openstack.org/kolla-ansible/latest/user/quickstart.html
The Kolla Repository
====================
-The Kolla repository is one of three deliverables of the OpenStack Kolla
-project. The three deliverables that make up the Kolla project are:
-
-================ =========================================================
-Deliverable Repository
-================ =========================================================
-kolla https://opendev.org/openstack/kolla
-kolla-ansible https://opendev.org/openstack/kolla-ansible
-kayobe https://opendev.org/openstack/kayobe
-================ =========================================================
-
-The `Docker images <https://docs.docker.com/storage/storagedriver/>`__
-are built by the Kolla project maintainers. A detailed process for
-contributing to the images can be found in the `image building
-guide <https://docs.openstack.org/kolla/latest/admin/image-building.html>`__.
-
-The Kolla developers build images in the `kolla` namespace for every tagged
-release.
-
-You can view the available images on `Docker Hub
-<https://hub.docker.com/u/kolla/>`__ or with the Docker CLI::
-
- $ sudo docker search kolla
+The Kolla repository is one of four deliverables of the OpenStack Kolla
+project. The four deliverables that make up the Kolla project are:
+
+======================== ======================================================
+Deliverable Repository
+======================== ======================================================
+kolla https://opendev.org/openstack/kolla
+kolla-ansible https://opendev.org/openstack/kolla-ansible
+ansible-collection-kolla https://opendev.org/openstack/ansible-collection-kolla
+kayobe https://opendev.org/openstack/kayobe
+======================== ======================================================
+
+The Kolla developers publish images in the Quay.io `openstack.kolla` namespace
+for every tagged release. You can view the available images on `Quay.io
+<https://quay.io/organization/openstack.kolla>`__.
+
+.. warning::
+ Kolla(-ansible) defaults to using these images in order to ease testing and
+ demonstration setups, but they are not intended to be used beyond this.
+ In particular, they do not undergo any security scrutiny. If you intend to
+ deploy Kolla for production purposes, you are advised to create and curate your
+ own set of images using the ``kolla`` tool.
OpenStack services
------------------
@@ -87,14 +87,13 @@ Kolla provides images to deploy the following OpenStack projects:
- `Manila <https://docs.openstack.org/manila/latest/>`__
- `Masakari <https://docs.openstack.org/masakari/latest/>`__
- `Mistral <https://docs.openstack.org/mistral/latest/>`__
-- `Monasca <https://docs.openstack.org/monasca-api/latest/>`__
- `Neutron <https://docs.openstack.org/neutron/latest/>`__
- `Nova <https://docs.openstack.org/nova/latest/>`__
- `Octavia <https://docs.openstack.org/octavia/latest/>`__
+- `Placement <https://docs.openstack.org/placement/latest/>`__
- Skyline (`APIServer <https://docs.openstack.org/skyline-apiserver/latest/>`__ and `Console <https://docs.openstack.org/skyline-console/latest/>`__)
- `Tacker <https://docs.openstack.org/tacker/latest/>`__
- `Trove <https://docs.openstack.org/trove/latest/>`__
-- `Venus <https://docs.openstack.org/venus/latest/>`__
- `Watcher <https://docs.openstack.org/watcher/latest/>`__
- `Zun <https://docs.openstack.org/zun/latest/>`__
@@ -104,44 +103,33 @@ Infrastructure components
Kolla provides images to deploy the following infrastructure components:
- `Collectd <https://collectd.org>`__,
- `InfluxDB <https://influxdata.com/time-series-platform/influxdb/>`__, and
`Grafana <https://grafana.com>`__ for performance monitoring.
-- `Corosync <https://clusterlabs.org/corosync.html>`__ and
- `Pacemaker <https://clusterlabs.org/pacemaker>`__ for HAcluster.
-- `Elasticsearch <https://www.elastic.co/de/products/elasticsearch>`__ and
- `Kibana <https://www.elastic.co/products/kibana>`__ to search, analyze,
- and visualize log messages.
- `Cron <https://cron-job.org>`__ for log rotation.
- `Etcd <https://etcd.io/>`__ a distributed key value store that provides
a reliable way to store data across a cluster of machines.
- `Fluentd <https://www.fluentd.org/>`__ as an open source data collector
for unified logging layer.
- `Gnocchi <https://gnocchi.xyz/>`__ a time-series storage database.
+- `Corosync <https://clusterlabs.org/corosync.html>`__ and
+ `Pacemaker <https://clusterlabs.org/pacemaker>`__ for HAcluster.
- `HAProxy <https://www.haproxy.org/>`__ and
`Keepalived <https://www.keepalived.org/>`__ for high availability of services
and their endpoints.
-- `Kafka <https://kafka.apache.org/documentation/>`__ a distributed streaming
- platform.
- `MariaDB and Galera Cluster <https://mariadb.com/kb/en/library/galera-cluster/>`__
for highly available MySQL databases.
- `Memcached <https://www.memcached.org/>`__ a distributed memory object caching system.
-- `Open vSwitch <https://www.openvswitch.org/>`__ for use with Neutron.
- MariaDB Backup A tool which provides a method of performing a hot backup of your MySQL data while the
system is running.
+- `Open vSwitch <https://www.openvswitch.org/>`__ for use with Neutron.
+- `Opensearch <https://opensearch.org/>`__ to search, analyze,
+ and visualize log messages.
- `Prometheus <https://prometheus.io/>`__ an open-source systems monitoring
and alerting toolkit originally built at SoundCloud.
-- `Qdrouterd <https://qpid.apache.org/components/dispatch-router/index.html>`__ as a
- direct messaging back end for communication between services.
- `RabbitMQ <https://www.rabbitmq.com/>`__ as a broker messaging back end for
communication between services.
-- `Redis Sentinel <https://redis.io/topics/sentinel>`__ provides high availability for redis
+- `Valkey Sentinel <https://valkey.io/topics/sentinel>`__ provides high availability for valkey
along with collateral tasks such as monitoring, notification and acts as configuration
provider for clients.
-- `Telegraf <https://www.docs.influxdata.com/telegraf/>`__ as a plugin-driven server
- agent for collecting & reporting metrics.
-- `ZooKeeper <https://zookeeper.apache.org/>`__ as a centralized service for maintaining
- configuration information, naming, providing distributed synchronization, and providing
- group services.
Directories
===========
@@ -176,14 +164,6 @@ workflow <https://docs.openstack.org/infra/manual/developers.html>`__.
<https://docs.openstack.org/kolla/latest/contributor/meeting.html>`__.
- Contribute `code <https://opendev.org/openstack/kolla>`__.
-Contributors
-============
-
-Check out who is `contributing
-code <https://stackalytics.io/?module=kolla-group&metric=commits>`__ and
-`contributing
-reviews <https://stackalytics.io/?module=kolla-group&metric=marks>`__.
-
Notices
=======
diff --git a/doc/source/admin/image-building.rst b/doc/source/admin/image-building.rst
index d249008b9..793367a92 100644
--- a/doc/source/admin/image-building.rst
+++ b/doc/source/admin/image-building.rst
@@ -683,23 +683,16 @@ Red Hat
Kolla allows the operator to build containers using custom repos.
The repos are accepted as a list of comma separated values and can be in the
-form of ``.repo``, ``.rpm``, or a url. See examples below.
-
-To use current RDO packages (aka Delorean or DLRN), update ``rpm_setup_config``
-in ``kolla-build.conf``:
-
-.. path /etc/kolla/kolla-build.conf
-.. code-block:: ini
-
- rpm_setup_config = https://trunk.rdoproject.org/centos8/current/delorean.repo,https://trunk.rdoproject.org/centos8/delorean-deps.repo
+form of ``.repo``, ``.rpm``, or a url.
If specifying a ``.repo`` file, each ``.repo`` file will need to exist in the
-same directory as the base Dockerfile (``kolla/docker/base``):
+same directory as the base Dockerfile (``kolla/docker/base``) or you need to
+specify a url:
.. path kolla/docker/base
.. code-block:: ini
- rpm_setup_config = epel.repo,delorean.repo,delorean-deps.repo
+ rpm_setup_config = epel.repo,https://remote-server.com/your-repo.repo
Debian / Ubuntu
^^^^^^^^^^^^^^^
diff --git a/doc/source/ceph_versions.csv b/doc/source/ceph_versions.csv
index acfe9a999..85af90aa2 100644
--- a/doc/source/ceph_versions.csv
+++ b/doc/source/ceph_versions.csv
@@ -1,5 +1,5 @@
Distro,Ceph,
-,Source, Release
-Rocky Linux,CentOS Storage SIG,Reef
-Ubuntu,Ubuntu,Reef
+,Source,Release
+Rocky Linux,CentOS Storage SIG,Squid
+Ubuntu,Ubuntu,Squid
Debian,Debian,Pacific
diff --git a/doc/source/contributor/adding-a-new-image.rst b/doc/source/contributor/adding-a-new-image.rst
index db279d18d..147d77ad9 100644
--- a/doc/source/contributor/adding-a-new-image.rst
+++ b/doc/source/contributor/adding-a-new-image.rst
@@ -56,8 +56,8 @@ provided, copy its Dockerfile structure and amend it to new needs.
Distribution support
====================
-By default, every new image should support all supported distributions (CentOS,
-Debian, Ubuntu) and both x86-64 and aarch64 architectures. Sometimes it is not
+By default, every new image should support all supported distributions (Debian,
+Ubuntu, Rocky) and both x86-64 and aarch64 architectures. Sometimes it is not
doable so we have list of `unbuildable images` for that.
Unbuildable images
diff --git a/doc/source/contributor/contributing.rst b/doc/source/contributor/contributing.rst
index e17c2e2d5..9d32291e0 100644
--- a/doc/source/contributor/contributing.rst
+++ b/doc/source/contributor/contributing.rst
@@ -27,7 +27,7 @@ IRC Channel
``#openstack-kolla`` (`channel logs`_) on `OFTC <http://oftc.net>`_
Weekly Meetings
- On Wednesdays at 14:00 UTC in the IRC channel (`meetings logs`_)
+ In the IRC channel (`meeting information`_)
Mailing list (prefix subjects with ``[kolla]``)
https://lists.openstack.org/pipermail/openstack-discuss/
@@ -41,43 +41,51 @@ Whiteboard (etherpad)
https://etherpad.openstack.org/p/KollaWhiteBoard
.. _channel logs: https://meetings.opendev.org/irclogs/%23openstack-kolla/
-.. _meetings logs: https://meetings.opendev.org/meetings/kolla/
+.. _meeting information: https://meetings.opendev.org/#Kolla_Team_Meeting
Contacting the Core Team
~~~~~~~~~~~~~~~~~~~~~~~~
In general it is suggested to use the above mentioned public communication
-channels, but if you find the you need to contact someone from the Core team
+channels, but if you find that you need to contact someone from the Core team
directly, you can find the lists in Gerrit:
-- kolla-core https://review.opendev.org/admin/groups/28d5dccfccc125b3963f76ab67e256501565d52b,members
-- kolla-ansible-core https://review.opendev.org/admin/groups/cfd61289b70f00206797b035aa0bd7adfccf4be2,members
-- kayobe-core https://review.opendev.org/admin/groups/361e28280e3a06be2997a5aa47a8a11d3a8fb9b9,members
+- `Kolla core team <https://review.opendev.org/admin/groups/kolla-core,members>`__
+- `Kayobe core team <https://review.opendev.org/admin/groups/kayobe-core,members>`__
New Feature Planning
~~~~~~~~~~~~~~~~~~~~
-New features are discussed via IRC or mailing list (with [kolla] prefix).
-Kolla project keeps blueprints in `Launchpad <https://blueprints.launchpad.net/kolla>`__.
-Specs are welcome but not strictly required.
+New features are discussed on PTG, via IRC or mailing list (with [kolla]
+prefix).
Task Tracking
~~~~~~~~~~~~~
-Kolla project tracks tasks in `Launchpad <https://bugs.launchpad.net/kolla>`__.
-Note this is the same place as for bugs.
+Kolla family projects track tasks and bugs in Launchpad:
+
+- `Kolla <https://bugs.launchpad.net/kolla>`__
+- `Kolla Ansible <https://bugs.launchpad.net/kolla-ansible>`__
+- `Ansible Collection Kolla <https://bugs.launchpad.net/ansible-collection-kolla>`__
+- `Kayobe <https://bugs.launchpad.net/kayobe>`__
If you're looking for some smaller, easier work item to pick up and get started
-on, search for the 'low-hanging-fruit' tag.
+on, search for the 'low-hanging-fruit' tag in the relevant project.
A more lightweight task tracking is done via etherpad - `Whiteboard <https://etherpad.openstack.org/p/KollaWhiteBoard>`__.
Reporting a Bug
~~~~~~~~~~~~~~~
-You found an issue and want to make sure we are aware of it? You can do so
-on `Launchpad <https://bugs.launchpad.net/kolla>`__.
-Note this is the same place as for tasks.
+You found an issue and want to make sure we are aware of it?
+Please report it in the appropriate Launchpad project:
+
+- `Kolla <https://bugs.launchpad.net/kolla>`__
+- `Kolla Ansible <https://bugs.launchpad.net/kolla-ansible>`__
+- `Ansible Collection Kolla <https://bugs.launchpad.net/ansible-collection-kolla>`__
+- `Kayobe <https://bugs.launchpad.net/kayobe>`__
+
+Note these are also used for task tracking.
Getting Your Patch Merged
~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -89,6 +97,22 @@ is described in :ref:`its own section <release-notes>`.
Significant changes should have documentation and testing provided with them.
+To see an overview of in-progress patches, sorted into useful sections, you can
+view the:
+
+- `Kolla Review Dashboard <https://review.opendev.org/dashboard/?title=Kolla+Review+Dashboard&foreach=project%3Aopenstack%2Fkolla+status%3Aopen+NOT+label%3AWorkflow%3C%3D%2D1+NOT+label%3ACode%2DReview%3C%3D%2D2&High+priority+changes=label%3AReview%2DPriority%3D2&Priority+changes=label%3AReview%2DPriority%3D1&Feature+freeze=label%3AReview%2DPriority%3D%2D1&Stable+branch+backports=branch%3A%5Estable%2F.%2A+status%3Aopen+NOT+label%3AReview%2DPriority%3D%2D1&Small+things+%28%3C25+LOC%2C+limit+25%29+on+master+branch=delta%3A%3C%3D25+limit%3A25+NOT+label%3ACode%2DReview%2D1+label%3AVerified%3E%3D1%2Czuul+NOT+label%3AReview%2DPriority%3D%2D1+branch%3Amaster&Needs+Final+Approval+%28to+land+on+master+branch%29=NOT+label%3AWorkflow%3E%3D1+NOT+label%3AWorkflow%3C%3D%2D1+NOT+owner%3Aself+label%3ACode%2DReview%3E%3D2+label%3AVerified%3E%3D1%2Czuul+NOT+label%3AReview%2DPriority%3D%2D1+branch%3Amaster&Needs+revisit+%28You+were+a+reviewer+but+haven%27t+voted+in+the+current+revision%29=reviewer%3Aself+limit%3A50&Newer+%28%3C1wk%29+Open+Patches+%28limit+25%29+on+master+branch=%2Dage%3A1week+limit%3A25+NOT+label%3AWorkflow%3E%3D1+label%3AVerified%3E%3D1%2Czuul+NOT+label%3ACode%2DReview%3E%3D2+NOT+label%3AReview%2DPriority%3D%2D1+branch%3Amaster&Older+%28%3E1wk%29+Open+Patches+Passing+Zuul+Tests+%28limit+50%29+on+master+branch=age%3A1week+limit%3A50+NOT+label%3AWorkflow%3E%3D1+NOT+label%3ACode%2DReview%3C%3D%2D1+NOT+label%3ACode%2DReview%3E%3D1+label%3AVerified%3E%3D1%2Czuul+NOT+label%3AReview%2DPriority%3D%2D1+branch%3Amaster>`__
+
+- `Kolla Ansible Review Dashboard <https://review.opendev.org/dashboard/?title=Kolla%2DAnsible+Review+Dashboard&foreach=project%3Aopenstack%2Fkolla%2Dansible+status%3Aopen+NOT+label%3AWorkflow%3C%3D%2D1+NOT+label%3ACode%2DReview%3C%3D%2D2&High+priority+changes=label%3AReview%2DPriority%3D2&Priority+changes=label%3AReview%2DPriority%3D1&Feature+freeze=label%3AReview%2DPriority%3D%2D1&Stable+branch+backports=branch%3A%5Estable%2F.%2A+status%3Aopen+NOT+label%3AReview%2DPriority%3D%2D1&Small+things+%28%3C25+LOC%2C+limit+25%29+on+master+branch=delta%3A%3C%3D25+limit%3A25+NOT+label%3ACode%2DReview%2D1+label%3AVerified%3E%3D1%2Czuul+NOT+label%3AReview%2DPriority%3D%2D1+branch%3Amaster&Needs+Final+Approval+%28to+land+on+master+branch%29=NOT+label%3AWorkflow%3E%3D1+NOT+label%3AWorkflow%3C%3D%2D1+NOT+owner%3Aself+label%3ACode%2DReview%3E%3D2+label%3AVerified%3E%3D1%2Czuul+NOT+label%3AReview%2DPriority%3D%2D1+branch%3Amaster&Needs+revisit+%28You+were+a+reviewer+but+haven%27t+voted+in+the+current+revision%29=reviewer%3Aself+limit%3A50&Newer+%28%3C1wk%29+Open+Patches+%28limit+25%29+on+master+branch=%2Dage%3A1week+limit%3A25+NOT+label%3AWorkflow%3E%3D1+label%3AVerified%3E%3D1%2Czuul+NOT+label%3ACode%2DReview%3E%3D2+NOT+label%3AReview%2DPriority%3D%2D1+branch%3Amaster&Older+%28%3E1wk%29+Open+Patches+Passing+Zuul+Tests+%28limit+50%29+on+master+branch=age%3A1week+limit%3A50+NOT+label%3AWorkflow%3E%3D1+NOT+label%3ACode%2DReview%3C%3D%2D1+NOT+label%3ACode%2DReview%3E%3D1+label%3AVerified%3E%3D1%2Czuul+NOT+label%3AReview%2DPriority%3D%2D1+branch%3Amaster>`__
+
+- `Ansible Collection Kolla Review Dashboard <https://review.opendev.org/dashboard/?title=ansible%2Dcollection%2Dkolla+Review+Dashboard&foreach=project%3Aopenstack%2Fansible%2Dcollection%2Dkolla+status%3Aopen+NOT+label%3AWorkflow%3C%3D%2D1+NOT+label%3ACode%2DReview%3C%3D%2D2&High+priority+changes=label%3AReview%2DPriority%3D2&Priority+changes=label%3AReview%2DPriority%3D1&Feature+freeze=label%3AReview%2DPriority%3D%2D1&Stable+branch+backports=branch%3A%5Estable%2F.%2A+status%3Aopen+NOT+label%3AReview%2DPriority%3D%2D1&Small+things+%28%3C25+LOC%2C+limit+25%29+on+master+branch=delta%3A%3C%3D25+limit%3A25+NOT+label%3ACode%2DReview%2D1+label%3AVerified%3E%3D1%2Czuul+NOT+label%3AReview%2DPriority%3D%2D1+branch%3Amaster&Needs+Final+Approval+%28to+land+on+master+branch%29=NOT+label%3AWorkflow%3E%3D1+NOT+label%3AWorkflow%3C%3D%2D1+NOT+owner%3Aself+label%3ACode%2DReview%3E%3D2+label%3AVerified%3E%3D1%2Czuul+NOT+label%3AReview%2DPriority%3D%2D1+branch%3Amaster&Needs+revisit+%28You+were+a+reviewer+but+haven%27t+voted+in+the+current+revision%29=reviewer%3Aself+limit%3A50&Newer+%28%3C1wk%29+Open+Patches+%28limit+25%29+on+master+branch=%2Dage%3A1week+limit%3A25+NOT+label%3AWorkflow%3E%3D1+label%3AVerified%3E%3D1%2Czuul+NOT+label%3ACode%2DReview%3E%3D2+NOT+label%3AReview%2DPriority%3D%2D1+branch%3Amaster&Older+%28%3E1wk%29+Open+Patches+Passing+Zuul+Tests+%28limit+50%29+on+master+branch=age%3A1week+limit%3A50+NOT+label%3AWorkflow%3E%3D1+NOT+label%3ACode%2DReview%3C%3D%2D1+NOT+label%3ACode%2DReview%3E%3D1+label%3AVerified%3E%3D1%2Czuul+NOT+label%3AReview%2DPriority%3D%2D1+branch%3Amaster>`__
+
+- `Kayobe Review Dashboard <https://review.opendev.org/dashboard/?title=Kayobe+Review+Dashboard&foreach=%28project%3Aopenstack%2Fkayobe+OR+project%3Aopenstack%2Fkayobe%2Dconfig+OR+project%3Aopenstack%2Fkayobe%2Dconfig%2Ddev%29+status%3Aopen+NOT+label%3ACode%2DReview%3C%3D%2D2+NOT+label%3AWorkflow%3C%3D%2D1&High+priority+changes=label%3AReview%2DPriority%3D2&Priority+changes=label%3AReview%2DPriority%3D1&Feature+freeze=label%3AReview%2DPriority%3D%2D1&Stable+branch+backports=branch%3A%5Estable%2F.%2A+status%3Aopen+NOT+label%3AReview%2DPriority%3D%2D1&Small+things+%28%3C25+LOC%2C+limit+25%29+on+master+branch=delta%3A%3C%3D25+limit%3A25+NOT+label%3ACode%2DReview%2D1+label%3AVerified%3E%3D1%2Czuul+NOT+label%3AReview%2DPriority%3D%2D1+branch%3Amaster&Needs+Final+Approval+%28to+land+on+master+branch%29=NOT+label%3AWorkflow%3E%3D1+NOT+label%3AWorkflow%3C%3D%2D1+NOT+owner%3Aself+label%3ACode%2DReview%3E%3D2+label%3AVerified%3E%3D1%2Czuul+NOT+label%3AReview%2DPriority%3D%2D1+branch%3Amaster&Needs+revisit+%28You+were+a+reviewer+but+haven%27t+voted+in+the+current+revision%29=reviewer%3Aself+limit%3A50&Newer+%28%3C1wk%29+Open+Patches+%28limit+25%29+on+master+branch=%2Dage%3A1week+limit%3A25+NOT+label%3AWorkflow%3E%3D1+label%3AVerified%3E%3D1%2Czuul+NOT+label%3ACode%2DReview%3E%3D2+NOT+label%3AReview%2DPriority%3D%2D1+branch%3Amaster&Older+%28%3E1wk%29+Open+Patches+Passing+Zuul+Tests+%28limit+50%29+on+master+branch=age%3A1week+limit%3A50+NOT+label%3AWorkflow%3E%3D1+NOT+label%3ACode%2DReview%3C%3D%2D1+NOT+label%3ACode%2DReview%3E%3D1+label%3AVerified%3E%3D1%2Czuul+NOT+label%3AReview%2DPriority%3D%2D1+branch%3Amaster>`__
+
+.. note::
+
+ If you feel that your change is getting overlooked, reach out via
+ :ref:`preferred communication methods <communication>` to let us know.
+
Project Team Lead Duties
~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/doc/source/contributor/release-management.rst b/doc/source/contributor/release-management.rst
index 460fac010..91f483e38 100644
--- a/doc/source/contributor/release-management.rst
+++ b/doc/source/contributor/release-management.rst
@@ -152,11 +152,6 @@ R-8: Switch images to current release
.. note:: Debian does not provide repositories for the in-development release
until much later in the cycle.
-* [kolla] Switch CentOS images to use the current in-development release
- master RDO Delorean repository
-
- * example: https://review.opendev.org/c/openstack/kolla/+/804269
-
* [kolla] Switch Ubuntu images to use the current in-development release
Ubuntu Cloud Archive (UCA) repository
@@ -237,11 +232,6 @@ Prior to creating an RC1 release candidate:
* example: TODO
-* [kolla] Switch CentOS images to use the current in-development release
- stable RDO Delorean repository
-
- * example: https://review.opendev.org/c/openstack/kolla/+/787339
-
R-0: Kolla & Kolla Ansible RC1 & stable branch creation
-------------------------------------------------------
@@ -407,13 +397,6 @@ Several tasks are required to finalise the stable branch for release.
* example: https://review.opendev.org/c/openstack/kolla-ansible/+/788292
-* [kolla] Switch CentOS images to use the CentOS Cloud SIG repository for the
- new release
-
- .. note:: This needs to be done on the stable branch.
-
- * example: https://review.opendev.org/c/openstack/kolla/+/788490
-
* [kolla] Switch Debian images to use the Debian OpenStack repository
for the new release
@@ -490,7 +473,7 @@ After a branch enters EM, we typically do the following:
* stop backporting fixes to the branch by default. Important fixes or those
requested by community members may be merged if deemed appropriate
-* stop publishing images to Dockerhub
+* stop publishing images to Quay.io
* stop actively maintaining CI
End of Life (EOL)
diff --git a/doc/source/contributor/versions.rst b/doc/source/contributor/versions.rst
index 9d4e2624f..b549f19a2 100644
--- a/doc/source/contributor/versions.rst
+++ b/doc/source/contributor/versions.rst
@@ -10,44 +10,38 @@ 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 10 and Rocky Linux 10.
============== ================ =============================================
Name Version Package source information
============== ================ =============================================
- Grafana 9.x `Grafana install guide`_
- InfluxDB 1.8.x `InfluxDB upstream repo`_
- Kibana 7.x `Kibana install guide`_
- Logstash 7.x `Logstash install guide`_
- MariaDB 10.11 (LTS) `MariaDB Community downloads`_
+ Grafana 12.x `Grafana install guide`_
+ MariaDB 11.4 (LTS) `MariaDB Community downloads`_
Galera 26.4 (LTS) `MariaDB Community downloads`_
OpenSearch 3.x `OpenSearch install guide`_
- ProxySQL 2.7.x `ProxySQL repository`_
- Rabbitmq 4.0.x - CentOS/Rocky:
+ ProxySQL 3.0.x `ProxySQL repository`_
+ RabbitMQ 4.2.x - CentOS/Rocky:
`Team RabbitMQ 'Cloudsmith' repo (RPM)`_
- Debian/Ubuntu:
`Team RabbitMQ 'Cloudsmith' repo (Deb)`_
- Erlang 26.2.X - CentOS/Rocky aarch64:
+ Erlang 27.x - CentOS/Rocky aarch64:
`openstack-kolla COPR`_
- CentOS/Rocky x86-64:
`Team RabbitMQ 'Cloudsmith' repo (RPM)`_
- Debian/Ubuntu:
`Team RabbitMQ 'Modern Erlang' PPA`_
- TD Agent 4.4.x `TreasureData install guide`_
- Telegraf 1.24.x `InfluxDB upstream repo`_
+ Fluentd 6.x (LTS) `Fluentd install guide`_
============== ================ =============================================
.. _`InfluxDB upstream repo`: https://repos.influxdata.com/
.. _`OpenSearch install guide`: https://opensearch.org/downloads.html
-.. _`Kibana install guide`: https://www.elastic.co/guide/en/kibana/7.10/install.html
-.. _`Logstash install guide`: https://www.elastic.co/guide/en/logstash/7.9/installing-logstash.html
-.. _`TreasureData install guide`: https://www.fluentd.org/download
+.. _`Fluentd install guide`: https://www.fluentd.org/download
.. _`ProxySQL repository`: https://repo.proxysql.com/ProxySQL/proxysql-3.0.x/
.. _`Team RabbitMQ 'Cloudsmith' repo (Deb)`: https://www.rabbitmq.com/install-debian.html#apt-cloudsmith
.. _`Team RabbitMQ 'Modern Erlang' PPA`: https://launchpad.net/~rabbitmq/+archive/ubuntu/rabbitmq-erlang
.. _`Team RabbitMQ 'Cloudsmith' repo (RPM)`: https://www.rabbitmq.com/docs/install-rpm#cloudsmith
-.. _`openstack-kolla COPR`: https://copr.fedorainfracloud.org/coprs/g/openstack-kolla/rabbitmq-erlang/
+.. _`openstack-kolla COPR`: https://copr.fedorainfracloud.org/coprs/g/openstack-kolla/rabbitmq-erlang-27/
.. _`Grafana install guide`: https://grafana.com/grafana/download?platform=linux&edition=oss
.. _`MariaDB Community downloads`: https://mariadb.com/downloads/community/
diff --git a/doc/source/matrix_aarch64.csv b/doc/source/matrix_aarch64.csv
index 028bba2c2..7dbd5849f 100644
--- a/doc/source/matrix_aarch64.csv
+++ b/doc/source/matrix_aarch64.csv
@@ -20,7 +20,6 @@ hacluster,N,U,U
haproxy,U,U,U
heat,U,U,U
horizon,U,U,U
-influxdb,N,U,U
ironic,U,U,U
iscsid,U,U,U
keepalived,U,U,U
@@ -46,11 +45,10 @@ ovsdpdk,N,U,U
placement,U,U,U
prometheus,U,U,U
rabbitmq,U,U,U
-redis,U,U,U
skyline,U,U,U
tacker,U,U,U
-telegraf,N,N,N
tgtd,U,U,U
trove,U,U,U
+valkey,U,U,U
watcher,U,U,U
zun,U,U,U
diff --git a/doc/source/matrix_x86.csv b/doc/source/matrix_x86.csv
index 14c37597d..512577aac 100644
--- a/doc/source/matrix_x86.csv
+++ b/doc/source/matrix_x86.csv
@@ -21,7 +21,6 @@ hacluster-pcs,N,U,U
haproxy,T,T,U
heat,T,T,T
horizon,T,T,T
-influxdb,U,U,U
ironic,T,T,U
iscsid,T,T,U
keepalived,T,T,U
@@ -47,12 +46,11 @@ ovsdpdk,N,U,U
placement,T,T,T
prometheus,U,U,U
rabbitmq,T,T,T
-redis,T,U,U
skyline,U,U,U
swift,T,T,U
tacker,T,U,U
-telegraf,U,U,U
tgtd,N,T,U
trove,U,U,U
+valkey,T,U,U
watcher,U,U,U
zun,T,T,U
diff --git a/doc/source/openvswitch_versions.csv b/doc/source/openvswitch_versions.csv
new file mode 100644
index 000000000..55813a60b
--- /dev/null
+++ b/doc/source/openvswitch_versions.csv
@@ -0,0 +1,5 @@
+Distro,Open vSwitch,
+,Source,Release
+Rocky Linux,CentOS NFV SIG,3.5
+Ubuntu,UCA,3.6
+Debian,DEB,3.5
diff --git a/doc/source/ovn_versions.csv b/doc/source/ovn_versions.csv
new file mode 100644
index 000000000..f0a8c5210
--- /dev/null
+++ b/doc/source/ovn_versions.csv
@@ -0,0 +1,5 @@
+Distro,OVN,
+,Source,Release
+Rocky Linux,CentOS NFV SIG,25.09
+Ubuntu,UCA,25.09
+Debian,DEB,25.03
diff --git a/doc/source/support_matrix.rst b/doc/source/support_matrix.rst
index 3598e839e..31c67e70a 100644
--- a/doc/source/support_matrix.rst
+++ b/doc/source/support_matrix.rst
@@ -17,8 +17,8 @@ The following base container images are supported:
================== =============================== ================
Distribution Default base Default base tag
================== =============================== ================
-Rocky Linux quay.io/rockylinux/rockylinux 9
-Debian Bullseye debian bullseye
+Rocky Linux quay.io/rockylinux/rockylinux 10
+Debian Trixie debian trixie
Ubuntu Noble ubuntu 24.04
================== =============================== ================
@@ -33,6 +33,22 @@ Ceph versions in Kolla images
:stub-columns: 1
:file: ./ceph_versions.csv
+Open vSwitch versions in Kolla images
+=====================================
+
+.. csv-table:: Open vSwitch versions
+ :header-rows: 2
+ :stub-columns: 1
+ :file: ./openvswitch_versions.csv
+
+OVN versions in Kolla images
+============================
+
+.. csv-table:: OVN versions
+ :header-rows: 2
+ :stub-columns: 1
+ :file: ./ovn_versions.csv
+
Support clause definitions
==========================
diff --git a/docker/aodh/aodh-base/Dockerfile.j2 b/docker/aodh/aodh-base/Dockerfile.j2
index db9d507f4..39e785dc8 100644
--- a/docker/aodh/aodh-base/Dockerfile.j2
+++ b/docker/aodh/aodh-base/Dockerfile.j2
@@ -28,6 +28,8 @@ RUN ln -s aodh-base-source/* aodh \
&& {{ macros.install_pip(aodh_base_pip_packages | customizable("pip_packages")) }} \
&& mkdir -p /etc/aodh /var/www/cgi-bin/aodh \
&& cp /aodh/aodh/api/app.wsgi /var/www/cgi-bin/aodh \
+ && cp /aodh/aodh/api/api-paste.ini /etc/aodh/ \
+ && chmod 644 /etc/aodh/api-paste.ini \
&& chmod 750 /etc/sudoers.d \
&& chmod 640 /etc/sudoers.d/kolla_aodh_sudoers \
&& chmod 755 /var/www/cgi-bin/aodh \
diff --git a/docker/base/Dockerfile.j2 b/docker/base/Dockerfile.j2
index b3181558c..0503098df 100644
--- a/docker/base/Dockerfile.j2
+++ b/docker/base/Dockerfile.j2
@@ -39,6 +39,9 @@ ENV PS1="$(tput bold)($(printenv KOLLA_SERVICE_NAME))$(tput sgr0)[$(id -un)@$(ho
# enables to provide repo overrides at a later date in a simple fashion if we
# desire such functionality. I think we will :)
+ENV KOLLA_RPM_OVS_VERSION=3.5 \
+ KOLLA_RPM_OVN_VERSION=25.09
+
RUN cat /tmp/kolla_bashrc >> /etc/bashrc \
&& sed -i 's|^\(override_install_langs=.*\)|# \1|' /etc/dnf/dnf.conf
@@ -51,45 +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',
- '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
@@ -129,9 +99,8 @@ RUN rm -f /etc/rpm/macros.image-language-conf \
] %}
{% set base_centos_yum_repo_packages = [
- 'centos-release-ceph-reef',
+ 'centos-release-ceph-squid',
'centos-release-nfv-openvswitch',
- 'centos-release-opstools',
'epel-release',
] %}
@@ -139,40 +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 = [
-] %}
-
-# 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',
- 'centos9-nfv-ovs',
- 'centos9-opstools',
- 'centos9-rabbitmq',
- 'centos9-storage',
- 'epel',
- 'influxdb',
- 'opensearch-3.x',
- 'opensearch-dashboards-3.x',
-] %}
-
-{% if base_arch == 'aarch64' %}
-
-{# NOTE(hrw): delorean-deps.repo may force x86-64 repos #}
-
-RUN sed -i -e "s/x86_64/aarch64/g" /etc/yum.repos.d/delorean-deps.repo
-
-{% endif %}
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) }}
@@ -196,6 +134,7 @@ RUN {{ macros.install_packages(base_centos_yum_repo_packages | customizable("cen
'lsof',
'lvm2',
'ncurses',
+ 'openssl',
'procps-ng',
'python3',
'python3-pip',
@@ -209,7 +148,8 @@ RUN {{ macros.install_packages(base_centos_yum_repo_packages | customizable("cen
] %}
# Install base packages
-{{ macros.install_packages( base_centos_packages | customizable("centos_packages") | customizable("centos_binary_packages") | customizable("centos_source_packages") ) }}
+{{ macros.enable_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' %}
@@ -247,12 +187,12 @@ RUN cat /tmp/kolla_bashrc >> /etc/bash.bashrc \
&& sed -i -e s/#*LAST_SYSTEM_UID=999/LAST_SYSTEM_UID=59999/g \
-e s/#*LAST_SYSTEM_GID=999/LAST_SYSTEM_GID=59999/g /etc/adduser.conf
+{# NOTE(mnasiadka): Ubuntu arm64 uses ports.ubuntu.com #}
{% block base_ubuntu_package_sources_list %}
-{% if base_distro == 'debian' or ( base_distro == 'ubuntu' and base_arch == 'x86_64' ) %}
-RUN rm -f /etc/apt/sources.list.d/{{ base_distro }}.sources
-COPY sources.list.{{ base_distro }} /etc/apt/sources.list
+{% if base_distro == "ubuntu" and base_arch == 'aarch64' %}
+COPY {{ base_distro }}.sources.arm64 /etc/apt/sources.list.d/{{ base_distro }}.sources
{% else %}
-COPY sources.list.{{ base_distro }}.{{ base_arch }} /etc/apt/sources.list
+COPY {{ base_distro }}.sources /etc/apt/sources.list.d/
{% endif %}
COPY sources.list /etc/apt/sources.list.d/kolla-custom.list
{% endblock %}
@@ -264,7 +204,7 @@ COPY sources.list /etc/apt/sources.list.d/kolla-custom.list
RUN apt update \
&& apt install -y --no-install-recommends extrepo \
- && extrepo enable openstack_epoxy \
+ && extrepo enable openstack_{{ openstack_release_codename | lower }} \
&& apt purge -y extrepo \
&& apt --purge autoremove -y \
&& apt clean
@@ -298,19 +238,19 @@ COPY apt_preferences /etc/apt/preferences.d/kolla-custom
{% set base_apt_keys = [
{'name': 'erlang-ppa', 'keyid': 'F77F1EDA57EBB1CC'},
- {'name': 'rabbitmq', 'keyid': '9F4587F226208342'},
+ {'name': 'rabbitmq', 'keyid': '6B73A36E6026DFCA'},
{'name': 'haproxy', 'keyid': 'CFFB779AADC995E4F350A060505D97A41C61B9CD'},
] %}
{# NOTE(hrw): type field defaults to 'asc' which is used for single keys #}
{% set base_remote_apt_keys = [
{'name': 'docker-ce', 'url': 'https://download.docker.com/linux/debian/gpg'},
+ {'name': 'fluentd', 'url': 'https://fluentd.cdn.cncf.io/GPG-KEY-fluent-package'},
{'name': 'grafana', 'url': 'https://rpm.grafana.com/gpg.key'},
- {'name': 'influxdb', 'url': 'https://repos.influxdata.com/influxdata-archive_compat.key'},
+ {'name': 'influxdb', 'url': 'https://repos.influxdata.com/influxdata-archive.key'},
{'name': 'mariadb', 'url': 'https://downloads.mariadb.com/MariaDB/mariadb-keyring-2019.gpg', 'type': 'gpg'},
{'name': 'opensearch', 'url': 'https://artifacts.opensearch.org/publickeys/opensearch-release.pgp'},
{'name': 'proxysql', 'url': 'https://repo.proxysql.com/ProxySQL/proxysql-3.0.x/repo_pub_key'},
- {'name': 'treasuredata', 'url': 'https://packages.treasuredata.com/GPG-KEY-td-agent'},
] %}
{% block base_ubuntu_package_installation %}
diff --git a/docker/base/apt_preferences.debian b/docker/base/apt_preferences.debian
index 5edb8814a..08e21ff22 100644
--- a/docker/base/apt_preferences.debian
+++ b/docker/base/apt_preferences.debian
@@ -1,4 +1,4 @@
# NOTE(hrw): we do not want backports unless requested
Package: *
-Pin: release n=bookworm-backports
+Pin: release n=trixie-backports
Pin-Priority: -1000
diff --git a/docker/base/ci-centos.repo b/docker/base/ci-centos.repo
index a8decf252..4c08f1fea 100644
--- a/docker/base/ci-centos.repo
+++ b/docker/base/ci-centos.repo
@@ -1,6 +1,6 @@
[baseos]
name=(OpenDev mirror) CentOS Stream $releasever - BaseOS
-baseurl=http://MIRROR/centos-stream/9-stream/BaseOS/$basearch/os/
+baseurl=http://MIRROR/centos-stream/$stream/BaseOS/$basearch/os/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
gpgcheck=1
repo_gpgcheck=0
@@ -8,7 +8,7 @@ enabled=1
[appstream]
name=(OpenDev mirror) CentOS Stream $releasever - AppStream
-baseurl=http://MIRROR/centos-stream/9-stream/AppStream/$basearch/os/
+baseurl=http://MIRROR/centos-stream/$stream/AppStream/$basearch/os/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
gpgcheck=1
repo_gpgcheck=0
@@ -16,7 +16,7 @@ enabled=1
[extras-common]
name=(OpenDev mirror) CentOS Stream $releasever - Extras packages
-baseurl=http://MIRROR/centos-stream/SIGs/9-stream/extras/$basearch/extras-common/
+baseurl=http://MIRROR/centos-stream/SIGs/$stream/extras/$basearch/extras-common/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Extras-SHA512
gpgcheck=1
repo_gpgcheck=0
@@ -24,7 +24,7 @@ enabled=1
[crb]
name=(OpenDev mirror) CentOS Stream $releasever - CRB
-baseurl=http://MIRROR/centos-stream/9-stream/CRB/$basearch/os/
+baseurl=http://MIRROR/centos-stream/$stream/CRB/$basearch/os/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
gpgcheck=1
repo_gpgcheck=0
@@ -32,7 +32,7 @@ enabled=0
[highavailability]
name=(OpenDev mirror) CentOS Stream $releasever - HighAvailability
-baseurl=http://MIRROR/centos-stream/9-stream/HighAvailability/$basearch/os/
+baseurl=http://MIRROR/centos-stream/$stream/HighAvailability/$basearch/os/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
gpgcheck=1
repo_gpgcheck=0
diff --git a/docker/base/ci-rocky.repo b/docker/base/ci-rocky.repo
deleted file mode 100644
index 3daf5c5ba..000000000
--- a/docker/base/ci-rocky.repo
+++ /dev/null
@@ -1,35 +0,0 @@
-[centos-ceph-reef]
-name=(OpenDev mirror) CentOS-$stream - Ceph Reef
-baseurl=http://MIRROR/centos-stream/SIGs/$stream/storage/$basearch/ceph-reef/
-gpgcheck=1
-enabled=0
-gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Storage
-
-[centos-nfv-openvswitch]
-name=(OpenDev mirror) CentOS Stream $releasever - NFV OpenvSwitch
-baseurl=http://MIRROR/centos-stream/SIGs/$stream/nfv/$basearch/openvswitch-2/
-gpgcheck=1
-enabled=0
-gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-NFV
-module_hotfixes=1
-
-[centos-opstools]
-name=(OpenDev mirror) CentOS Stream $releasever - OpsTools - collectd
-baseurl=http://MIRROR/centos-stream/SIGs/$stream/opstools/$basearch/collectd-5/
-gpgcheck=1
-enabled=0
-gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-OpsTools
-
-[centos-rabbitmq-38]
-name=(OpenDev mirror) CentOS-9 - RabbitMQ 38
-baseurl=http://MIRROR/centos-stream/SIGs/$stream/messaging/$basearch/rabbitmq-38
-gpgcheck=1
-enabled=0
-gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Messaging
-
-[epel]
-name=(OpenDev mirror) Extra Packages for Enterprise Linux $releasever - $basearch
-baseurl=http://MIRROR/epel/$releasever/Everything/$basearch/
-enabled=0
-gpgcheck=1
-gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever
diff --git a/docker/base/copr-rabbitmq-erlang.repo b/docker/base/copr-rabbitmq-erlang.repo
deleted file mode 100644
index 17608e533..000000000
--- a/docker/base/copr-rabbitmq-erlang.repo
+++ /dev/null
@@ -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 CentOS Stream 9
-
-[copr-rabbitmq-erlang]
-name=openstack-kolla COPR with Erlang build for RabbitMQ
-baseurl=https://download.copr.fedorainfracloud.org/results/@openstack-kolla/rabbitmq-erlang/centos-stream-$releasever-aarch64/
-gpgcheck=1
-enabled=0
-gpgkey=https://download.copr.fedorainfracloud.org/results/@openstack-kolla/rabbitmq-erlang/pubkey.gpg
-repo_gpgcheck=0
diff --git a/docker/base/debian.sources b/docker/base/debian.sources
new file mode 100644
index 000000000..28c61c81d
--- /dev/null
+++ b/docker/base/debian.sources
@@ -0,0 +1,13 @@
+Types: deb
+# http://snapshot.debian.org/archive/debian/20251020T000000Z
+URIs: http://deb.debian.org/debian
+Suites: trixie trixie-updates trixie-backports
+Components: main
+Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
+
+Types: deb
+# http://snapshot.debian.org/archive/debian-security/20251020T000000Z
+URIs: http://deb.debian.org/debian-security
+Suites: trixie-security
+Components: main
+Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
diff --git a/docker/base/docker-ce.repo b/docker/base/docker-ce.repo
deleted file mode 100644
index d976c5852..000000000
--- a/docker/base/docker-ce.repo
+++ /dev/null
@@ -1,6 +0,0 @@
-[docker-ce]
-name=Docker CE Stable - $basearch
-baseurl=https://download.docker.com/linux/centos/$releasever/$basearch/stable
-enabled=1
-gpgcheck=1
-gpgkey=https://download.docker.com/linux/centos/gpg
diff --git a/docker/base/grafana.repo b/docker/base/grafana.repo
deleted file mode 100644
index 002ac8929..000000000
--- a/docker/base/grafana.repo
+++ /dev/null
@@ -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
diff --git a/docker/base/influxdb.repo b/docker/base/influxdb.repo
deleted file mode 100644
index b060ab85c..000000000
--- a/docker/base/influxdb.repo
+++ /dev/null
@@ -1,6 +0,0 @@
-[influxdb]
-name = InfluxDB Repository - RHEL $releasever
-baseurl = https://repos.influxdata.com/rhel/$releasever/$basearch/stable
-enabled = 0
-gpgcheck = 1
-gpgkey = https://repos.influxdata.com/influxdata-archive_compat.key
diff --git a/docker/base/mariadb.repo b/docker/base/mariadb.repo
deleted file mode 100644
index 07d97ef20..000000000
--- a/docker/base/mariadb.repo
+++ /dev/null
@@ -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
diff --git a/docker/base/opensearch.repo b/docker/base/opensearch.repo
deleted file mode 100644
index 63caa75f8..000000000
--- a/docker/base/opensearch.repo
+++ /dev/null
@@ -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
diff --git a/docker/base/proxysql.repo b/docker/base/proxysql.repo
deleted file mode 100644
index 3c09fa7ff..000000000
--- a/docker/base/proxysql.repo
+++ /dev/null
@@ -1,6 +0,0 @@
-[proxysql]
-name = ProxySQL
-baseurl = https://repo.proxysql.com/ProxySQL/proxysql-3.0.x/almalinux/$releasever
-gpgkey = https://repo.proxysql.com/ProxySQL/proxysql-3.0.x/repo_pub_key
-gpgcheck = 1
-enabled = 0
diff --git a/docker/base/rabbitmq_rabbitmq-erlang.repo b/docker/base/rabbitmq_rabbitmq-erlang.repo
deleted file mode 100644
index 82b0441e0..000000000
--- a/docker/base/rabbitmq_rabbitmq-erlang.repo
+++ /dev/null
@@ -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
diff --git a/docker/base/rabbitmq_rabbitmq-server.repo b/docker/base/rabbitmq_rabbitmq-server.repo
deleted file mode 100644
index 0680c11e1..000000000
--- a/docker/base/rabbitmq_rabbitmq-server.repo
+++ /dev/null
@@ -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
diff --git a/docker/base/set_configs.py b/docker/base/set_configs.py
index ab5b8c68b..80c32e507 100644
--- a/docker/base/set_configs.py
+++ b/docker/base/set_configs.py
@@ -68,6 +68,10 @@ class ConfigFileCommandDiffers(ExitingException):
pass
+class StateMismatch(ExitingException):
+ pass
+
+
class ConfigFile(object):
def __init__(self, source, dest, owner=None, perm=None, optional=False,
@@ -583,6 +587,56 @@ def execute_command_check(config):
def execute_config_check(config):
+ """Check configuration state consistency and validate config file entries.
+
+ This function compares the current config file destinations from the
+ provided config dictionary with those stored in the defaults state file.
+ If any destinations are found in the state file but not in the config,
+ a StateMismatch exception is raised. These missing files would otherwise
+ be restored or removed depending on their backup state.
+
+ After validating consistency, the function performs standard checks on
+ each declared configuration file, including content, permissions, and
+ ownership validation.
+
+ Args:
+ config (dict): The configuration dictionary containing 'config_files'
+ entries as expected by Kolla.
+
+ Raises:
+ StateMismatch: If there are entries in the defaults state not present
+ in the provided config.
+ """
+ state = get_defaults_state()
+
+ # Build a set of all current destination paths from config.json
+ # If the destination is a directory, we append the
+ # basename of the source
+ current_dests = {
+ entry['dest'] if not entry['dest'].endswith('/') else
+ os.path.join(entry['dest'], os.path.basename(entry['source']))
+ for entry in config.get('config_files', [])
+ if entry.get('dest')
+ }
+
+ # Detect any paths that are present in the state file but
+ # missing from config.json.
+ # These would be either restored (if state[dest] has a backup)
+ # or removed (if dest is null)
+ removed_dests = [
+ path for path in state.keys()
+ if path not in current_dests
+ ]
+
+ if removed_dests:
+ raise StateMismatch(
+ f"The following config files are tracked in state but missing "
+ f"from config.json. "
+ f"They would be restored or removed: {sorted(removed_dests)}"
+ )
+
+ # Perform the regular content, permissions, and ownership
+ # checks on the declared files
for data in config.get('config_files', []):
config_file = ConfigFile(**data)
config_file.check()
diff --git a/docker/base/sources.list.debian b/docker/base/sources.list.debian
deleted file mode 100644
index 89f7a1160..000000000
--- a/docker/base/sources.list.debian
+++ /dev/null
@@ -1,11 +0,0 @@
-# Default repos
-deb http://deb.debian.org/debian bookworm main
-
-# debian security updates
-deb http://deb.debian.org/debian-security bookworm-security main
-
-# debian updates
-deb http://deb.debian.org/debian bookworm-updates main
-
-# debian backports
-deb http://deb.debian.org/debian bookworm-backports main
diff --git a/docker/base/sources.list.ubuntu b/docker/base/sources.list.ubuntu
deleted file mode 100644
index f0d1f4e37..000000000
--- a/docker/base/sources.list.ubuntu
+++ /dev/null
@@ -1,15 +0,0 @@
-# For non-x86 architectures we use sources.list.ubuntu.<arch>
-
-# Default repos
-deb mirror://mirrors.ubuntu.com/mirrors.txt noble main universe
-deb mirror://mirrors.ubuntu.com/mirrors.txt noble-updates main universe
-deb mirror://mirrors.ubuntu.com/mirrors.txt noble-backports main universe
-deb mirror://mirrors.ubuntu.com/mirrors.txt noble-security main universe
-
-# We need to add the repo for the updated packages they provide. The main ones
-# are qemu, libvirt, and openvswitch.
-deb http://ubuntu-cloud.archive.canonical.com/ubuntu noble-updates/epoxy main
-
-# NOTE(hrw): extra repositories are added into image when they are needed as
-# separate files in /etc/apt/sources.list.d/ directory. For that purpose they
-# are defined in kolla/template/repos.yaml file.
diff --git a/docker/base/sources.list.ubuntu.aarch64 b/docker/base/sources.list.ubuntu.aarch64
deleted file mode 100644
index 0aba90523..000000000
--- a/docker/base/sources.list.ubuntu.aarch64
+++ /dev/null
@@ -1,15 +0,0 @@
-# Default repos
-deb http://ports.ubuntu.com/ noble main universe
-deb http://ports.ubuntu.com/ noble-updates main universe
-deb http://ports.ubuntu.com/ noble-security main universe
-
-# Backports have a lower priority and must be explicitly installed to be used
-deb http://ports.ubuntu.com/ noble-backports main universe
-
-# We need to add the repo for the updated packages they provide. The main ones
-# are qemu, libvirt, and openvswitch.
-deb http://ubuntu-cloud.archive.canonical.com/ubuntu noble-updates/epoxy main
-
-# NOTE(hrw): extra repositories are added into image when they are needed as
-# separate files in /etc/apt/sources.list.d/ directory. For that purpose they
-# are defined in kolla/template/repos.yaml file.
diff --git a/docker/base/td.repo b/docker/base/td.repo
deleted file mode 100644
index e06b62991..000000000
--- a/docker/base/td.repo
+++ /dev/null
@@ -1,6 +0,0 @@
-[fluent-package-lts]
-name=Fluentd Project
-baseurl=https://packages.treasuredata.com/lts/5/redhat/$releasever/$basearch
-gpgcheck=1
-gpgkey=https://packages.treasuredata.com/GPG-KEY-td-agent
-enabled=0
diff --git a/docker/base/ubuntu.sources b/docker/base/ubuntu.sources
new file mode 100644
index 000000000..f8f609cee
--- /dev/null
+++ b/docker/base/ubuntu.sources
@@ -0,0 +1,24 @@
+Types: deb
+URIs: http://archive.ubuntu.com/ubuntu/
+Suites: noble noble-updates noble-backports
+Components: main universe
+Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
+
+## Ubuntu security updates. Aside from URIs and Suites,
+## this should mirror your choices in the previous section.
+Types: deb
+URIs: http://security.ubuntu.com/ubuntu/
+Suites: noble-security
+Components: main universe
+Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
+
+## Ubuntu Cloud Archive
+Types: deb
+URIs: http://ubuntu-cloud.archive.canonical.com/ubuntu
+Suites: noble-updates/gazpacho
+Components: main
+Signed-By: /usr/share/keyrings/ubuntu-cloud-keyring.gpg
+
+# NOTE(hrw): extra repositories are added into image when they are needed as
+# separate files in /etc/apt/sources.list.d/ directory. For that purpose they
+# are defined in kolla/template/repos.yaml file.
diff --git a/docker/base/ubuntu.sources.arm64 b/docker/base/ubuntu.sources.arm64
new file mode 100644
index 000000000..751af7ccf
--- /dev/null
+++ b/docker/base/ubuntu.sources.arm64
@@ -0,0 +1,24 @@
+Types: deb
+URIs: http://ports.ubuntu.com/ubuntu-ports/
+Suites: noble noble-updates noble-backports
+Components: main universe
+Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
+
+## Ubuntu security updates. Aside from URIs and Suites,
+## this should mirror your choices in the previous section.
+Types: deb
+URIs: http://ports.ubuntu.com/ubuntu-ports/
+Suites: noble-security
+Components: main universe
+Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
+
+## Ubuntu Cloud Archive
+Types: deb
+URIs: http://ubuntu-cloud.archive.canonical.com/ubuntu
+Suites: noble-updates/gazpacho
+Components: main
+Signed-By: /usr/share/keyrings/ubuntu-cloud-keyring.gpg
+
+# NOTE(hrw): extra repositories are added into image when they are needed as
+# separate files in /etc/apt/sources.list.d/ directory. For that purpose they
+# are defined in kolla/template/repos.yaml file.
diff --git a/docker/bifrost/bifrost-base/Dockerfile.j2 b/docker/bifrost/bifrost-base/Dockerfile.j2
index 2596842c7..a84f0e0e3 100644
--- a/docker/bifrost/bifrost-base/Dockerfile.j2
+++ b/docker/bifrost/bifrost-base/Dockerfile.j2
@@ -11,29 +11,18 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{{ macros.configure_user(name='bifrost') }}
-{# NOTE(mgoddard): EPEL required for nginx #}
-{{ macros.enable_extra_repos(['epel']) }}
-
{% set bifrost_base_packages = [
'cpio'
] %}
{% if base_package_type == 'rpm' %}
- {% set bifrost_base_packages = bifrost_base_packages + [
- 'python3.12',
- 'python3.12-devel'
- ] %}
+
+{# NOTE(mgoddard): EPEL required for nginx #}
+{{ macros.enable_extra_repos(['epel']) }}
{% endif %}
{{ macros.install_packages(bifrost_base_packages | customizable("packages")) }}
-{# Ensure we use Python 3.12 on RPM-based systems #}
-{% if base_package_type == 'rpm' %}
-RUN cd /usr/bin && \
- rm -f python3 && \
- ln -s python3.12 python3
-{% endif %}
-
ENV VENV {{ venv_path }}
{% set bifrost_base_pip_packages = [
@@ -46,12 +35,7 @@ COPY build_arg.yml /tmp/build_arg.yml
RUN mkdir -p /requirements \
&& curl -o /requirements/upper-constraints.txt ${UPPER_CONSTRAINTS_FILE:-https://releases.openstack.org/constraints/upper/{{ openstack_release }}} \
&& python3 -m venv --system-site-packages {{ venv_path }} \
- && KOLLA_DISTRO_PYTHON_VERSION=$(/usr/bin/python3 -c "import sys; print('{}.{}'.format(sys.version_info.major, sys.version_info.minor))") \
- && cd {{ venv_path }}/lib \
- && rm -f python3 \
- && ln -s python${KOLLA_DISTRO_PYTHON_VERSION} python3
-
-RUN ln -s bifrost-base-source/* bifrost \
+ && ln -s bifrost-base-source/* bifrost \
&& {{ macros.install_pip(['pip', 'wheel', 'setuptools']) }} \
&& {{ macros.install_pip(bifrost_base_pip_packages | customizable("pip_packages")) }}
@@ -66,14 +50,13 @@ RUN apt-get --error-on=any update && \
{%- else %}
RUN echo " " && \
{%- endif %}
- bash -c '$VENV/bin/pip install "ansible>=11,<12" && \
+ bash -c '$VENV/bin/pip install "ansible>=12,<14" && \
$VENV/bin/ansible-galaxy collection install -r /bifrost/ansible-collections-requirements.yml && \
$VENV/bin/ansible-playbook -vvvv -i /bifrost/playbooks/inventory/target \
/bifrost/playbooks/install.yaml \
-e upper_constraints_file="/requirements/upper-constraints.txt" \
-e git_branch={{ openstack_branch_slashed }} \
-e ipa_upstream_release={{ openstack_branch }} \
- -e enable_inspector=true \
-e @/tmp/build_arg.yml && \
{%- if base_package_type == 'deb' %}
apt-get clean && rm -rf /var/lib/apt/lists/*'
diff --git a/docker/cinder/cinder-api/Dockerfile.j2 b/docker/cinder/cinder-api/Dockerfile.j2
index b26bbf6e5..f64291d7e 100644
--- a/docker/cinder/cinder-api/Dockerfile.j2
+++ b/docker/cinder/cinder-api/Dockerfile.j2
@@ -14,10 +14,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
COPY extend_start.sh /usr/local/bin/kolla_cinder_extend_start
-RUN mkdir -p /var/www/cgi-bin/cinder \
- && cp -a /var/lib/kolla/venv/bin/cinder-wsgi /var/www/cgi-bin/cinder/cinder-wsgi \
- && chmod 644 /usr/local/bin/kolla_cinder_extend_start \
- && chmod 755 /var/www/cgi-bin/cinder/cinder-wsgi
+RUN chmod 644 /usr/local/bin/kolla_cinder_extend_start
{{ macros.kolla_patch_sources() }}
diff --git a/docker/cinder/cinder-base/Dockerfile.j2 b/docker/cinder/cinder-base/Dockerfile.j2
index 312f12808..e868f5385 100644
--- a/docker/cinder/cinder-base/Dockerfile.j2
+++ b/docker/cinder/cinder-base/Dockerfile.j2
@@ -9,9 +9,10 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{{ macros.configure_user(name='cinder') }}
+{% if base_package_type == 'rpm' %}
+
{{ macros.enable_extra_repos(['ceph', 'epel']) }}
-{% if base_package_type == 'rpm' %}
{% set cinder_base_packages = [
'ceph-common',
'cryptsetup',
diff --git a/docker/collectd/Dockerfile.j2 b/docker/collectd/Dockerfile.j2
index 0633a94da..6849a02bf 100644
--- a/docker/collectd/Dockerfile.j2
+++ b/docker/collectd/Dockerfile.j2
@@ -9,13 +9,14 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{{ macros.configure_user(name='collectd') }}
-{{ macros.enable_extra_repos(['opstools']) }}
-
{% set collectd_packages = [
'collectd'
] %}
{% if base_package_type == 'rpm' %}
+
+{{ macros.enable_extra_repos(['opstools']) }}
+
{% set collectd_packages = collectd_packages + [
'collectd-amqp',
'collectd-amqp1',
diff --git a/docker/dnsmasq/extend_start.sh b/docker/dnsmasq/extend_start.sh
index c09ce0327..0c9734fa1 100644
--- a/docker/dnsmasq/extend_start.sh
+++ b/docker/dnsmasq/extend_start.sh
@@ -1,5 +1,8 @@
#!/bin/bash
+DNSMASQ_PIDFILE=${DNSMASQ_PIDFILE:-/run/ironic/dnsmasq.pid}
+DNSMASQ_PIDFILE_DIR="$(dirname $DNSMASQ_PIDFILE)"
+
if [[ ! -d "/var/log/kolla/ironic" ]]; then
mkdir -p /var/log/kolla/ironic
fi
@@ -10,3 +13,19 @@ if [[ ! -r "/var/log/kolla/ironic/dnsmasq.log" ]]; then
touch /var/log/kolla/ironic/dnsmasq.log
chown ironic:ironic /var/log/kolla/ironic/dnsmasq.log
fi
+
+if [[ ! -d "$DNSMASQ_PIDFILE_DIR" ]]; then
+ mkdir -p "$DNSMASQ_PIDFILE_DIR"
+fi
+
+# NOTE(wszumski): This writes the PID of dnsmasq out to a file. The PIDFILE can be used in
+# another container to send a signal to dnsmasq to reload its config (providing that the two
+# containers share a PID namespace). The concrete use case is for the Ironic PXE filter to
+# clean up stale host entries on startup as documented in:
+#
+# https://docs.openstack.org/ironic/latest/admin/inspection/pxe_filter.html
+#
+# We cannot use the pid-file option in dnsmasq, since it will only write the PIDFILE if you
+# run dnsmasq in its non-forking mode i.e you do use the --no-daemon or --keep-in-foreground
+# options.
+echo $$ > "$DNSMASQ_PIDFILE"
diff --git a/docker/glance/glance-api/Dockerfile.j2 b/docker/glance/glance-api/Dockerfile.j2
index b839c1dfe..045efb6ae 100644
--- a/docker/glance/glance-api/Dockerfile.j2
+++ b/docker/glance/glance-api/Dockerfile.j2
@@ -9,13 +9,17 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% if base_package_type == 'rpm' %}
{% set glance_api_packages = [
+ 'lsscsi',
'device-mapper-multipath',
+ 'nvme-cli',
'qemu-img'
] %}
{% elif base_package_type == 'deb' %}
{% set glance_api_packages = [
+ 'lsscsi',
'multipath-tools',
'nfs-common',
+ 'nvme-cli',
'qemu-utils'
] %}
{% endif %}
diff --git a/docker/glance/glance-base/Dockerfile.j2 b/docker/glance/glance-base/Dockerfile.j2
index f6cfe1b44..156d7991a 100644
--- a/docker/glance/glance-base/Dockerfile.j2
+++ b/docker/glance/glance-base/Dockerfile.j2
@@ -9,9 +9,10 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{{ macros.configure_user(name='glance') }}
-{{ macros.enable_extra_repos(['ceph']) }}
-
{% if base_package_type == 'rpm' %}
+
+{{ macros.enable_extra_repos(['ceph', 'epel']) }}
+
{% set glance_base_packages = [
'python3-rados',
'python3-rbd'
diff --git a/docker/gnocchi/gnocchi-base/Dockerfile.j2 b/docker/gnocchi/gnocchi-base/Dockerfile.j2
index f6376e8b0..b4a210a13 100644
--- a/docker/gnocchi/gnocchi-base/Dockerfile.j2
+++ b/docker/gnocchi/gnocchi-base/Dockerfile.j2
@@ -9,10 +9,10 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{{ macros.configure_user(name='gnocchi') }}
-{{ macros.enable_extra_repos(['ceph']) }}
-
{% if base_package_type == 'rpm' %}
+{{ macros.enable_extra_repos(['ceph', 'epel']) }}
+
{% set gnocchi_base_packages = [
'librados2-devel',
'python3-rados',
diff --git a/docker/hacluster/hacluster-base/Dockerfile.j2 b/docker/hacluster/hacluster-base/Dockerfile.j2
index 7eb7a5965..1bcbbfdfd 100644
--- a/docker/hacluster/hacluster-base/Dockerfile.j2
+++ b/docker/hacluster/hacluster-base/Dockerfile.j2
@@ -7,8 +7,12 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% import "macros.j2" as macros with context %}
+{% if base_package_type =='rpm' %}
+
{{ macros.enable_extra_repos(['hacluster']) }}
+{% endif %}
+
COPY extend_start.sh /usr/local/bin/kolla_extend_start
RUN chmod 644 /usr/local/bin/kolla_extend_start
diff --git a/docker/haproxy/haproxy-ssh/extend_start.sh b/docker/haproxy/haproxy-ssh/extend_start.sh
index 421e4bd6f..4b2239100 100644
--- a/docker/haproxy/haproxy-ssh/extend_start.sh
+++ b/docker/haproxy/haproxy-ssh/extend_start.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-SSH_HOST_KEY_TYPES=( "rsa" "dsa" "ecdsa" "ed25519" )
+SSH_HOST_KEY_TYPES=( "rsa" "ecdsa" "ed25519" )
for key_type in ${SSH_HOST_KEY_TYPES[@]}; do
KEY_PATH=/etc/ssh/ssh_host_${key_type}_key
diff --git a/docker/heat/heat-base/Dockerfile.j2 b/docker/heat/heat-base/Dockerfile.j2
index 59d6aabb8..ef275f0d2 100644
--- a/docker/heat/heat-base/Dockerfile.j2
+++ b/docker/heat/heat-base/Dockerfile.j2
@@ -7,9 +7,14 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% import "macros.j2" as macros with context %}
-{{ macros.enable_extra_repos(['openvswitch']) }}
{{ macros.configure_user(name='heat') }}
+{% if base_package_type == 'rpm' %}
+
+{{ macros.enable_extra_repos(['openvswitch']) }}
+
+{% endif %}
+
{% set heat_base_packages = [
] %}
diff --git a/docker/heat/heat-base/extend_start.sh b/docker/heat/heat-base/extend_start.sh
index a73f17345..1c1e86b8e 100644
--- a/docker/heat/heat-base/extend_start.sh
+++ b/docker/heat/heat-base/extend_start.sh
@@ -3,6 +3,9 @@
if [[ ! -d "/var/log/kolla/heat" ]]; then
mkdir -p /var/log/kolla/heat
fi
+if [[ $(stat -c %U:%G /var/log/kolla/heat) != "heat:kolla" ]]; then
+ chown -R heat:kolla /var/log/kolla/heat
+fi
if [[ $(stat -c %a /var/log/kolla/heat) != "755" ]]; then
chmod 755 /var/log/kolla/heat
fi
diff --git a/docker/horizon/Dockerfile.j2 b/docker/horizon/Dockerfile.j2
index d73e5702d..c7d6f8aa2 100644
--- a/docker/horizon/Dockerfile.j2
+++ b/docker/horizon/Dockerfile.j2
@@ -36,7 +36,8 @@ ADD horizon-archive /horizon-source
ADD plugins-archive /
{% set horizon_pip_packages = [
- '/horizon'
+ '/horizon',
+ 'django_redis'
] %}
{% set horizon_plugins_pip_packages = [
@@ -49,11 +50,13 @@ COPY extend_start.sh /usr/local/bin/kolla_extend_start
# NOTE(kevko): This dance with local settings python paths below is needed
# because we are using different distros with different python version and we need to
# know to which path symlink should point to.
-# NOTE(mnasiadka): pinning setuptools due to https://bugs.launchpad.net/horizon/+bug/2007574
+# NOTE(bbezak): pin setuptools for pip build isolation due to
+# https://bugs.launchpad.net/horizon/+bug/2141293
RUN ln -s horizon-source/* horizon \
- && {{ macros.install_pip(['setuptools==67.2.*']) }} \
&& {{ macros.upper_constraints_remove("horizon") }} \
- && {{ macros.install_pip(horizon_pip_packages | customizable("pip_packages")) }} \
+ && echo "setuptools<82" > /tmp/horizon-build-constraints.txt \
+ && PIP_BUILD_CONSTRAINT=/tmp/horizon-build-constraints.txt \
+ {{ macros.install_pip(horizon_pip_packages | customizable("pip_packages")) }} \
&& mkdir -p /etc/openstack-dashboard \
&& cp -r /horizon/openstack_dashboard/conf/* /etc/openstack-dashboard/ \
&& cp /horizon/openstack_dashboard/local/local_settings.py.example /etc/openstack-dashboard/local_settings.py \
diff --git a/docker/horizon/extend_start.sh b/docker/horizon/extend_start.sh
index 63a40189d..dae3ae2db 100644
--- a/docker/horizon/extend_start.sh
+++ b/docker/horizon/extend_start.sh
@@ -172,14 +172,6 @@ function config_trove_dashboard {
done
}
-function config_venus_dashboard {
- for file in ${SITE_PACKAGES}/venus_dashboard/enabled/_*[^__].py; do
- config_dashboard "${ENABLE_VENUS:-no}" \
- "${SITE_PACKAGES}/venus_dashboard/enabled/${file##*/}" \
- "${SITE_PACKAGES}/openstack_dashboard/local/enabled/${file##*/}"
- done
-}
-
function config_watcher_dashboard {
for file in ${SITE_PACKAGES}/watcher_dashboard/local/enabled/_*[^__].py; do
config_dashboard "${ENABLE_WATCHER:-no}" \
@@ -236,7 +228,6 @@ config_neutron_vpnaas_dashboard
config_octavia_dashboard
config_tacker_dashboard
config_trove_dashboard
-config_venus_dashboard
config_watcher_dashboard
config_zun_dashboard
@@ -252,6 +243,10 @@ if [[ ! -d "/var/log/kolla/horizon" ]]; then
mkdir -p /var/log/kolla/horizon
fi
+if [[ $(stat -c %U:%G /var/log/kolla/horizon) != "horizon:kolla" ]]; then
+ chown -R horizon:kolla /var/log/kolla/horizon
+fi
+
if [[ $(stat -c %a /var/log/kolla/horizon) != "755" ]]; then
chmod 755 /var/log/kolla/horizon
fi
diff --git a/docker/httpd/Dockerfile.j2 b/docker/httpd/Dockerfile.j2
new file mode 100644
index 000000000..a41465661
--- /dev/null
+++ b/docker/httpd/Dockerfile.j2
@@ -0,0 +1,44 @@
+FROM {{ namespace }}/{{ image_prefix }}base:{{ tag }}
+{% block labels %}
+LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
+{% endblock %}
+
+{% block apache_header %}{% endblock %}
+
+{% import "macros.j2" as macros with context %}
+
+{% if base_package_type == 'rpm' %}
+{# NOTE(mnasiadka): mod_auth_mellon missing in CentOS 10 Stream - temporarily from Kolla COPR #}
+{{ macros.enable_extra_repos(['epel', 'kolla_el10']) }}
+ {% set apache_packages = [
+ 'httpd',
+ 'mod_ssl',
+ 'mod_auth_mellon',
+ 'mod_auth_openidc',
+ 'mod_proxy_uwsgi'
+ ] %}
+{% elif base_package_type == 'deb' %}
+ {% set apache_packages = [
+ 'apache2',
+ 'ca-certificates',
+ 'libapache2-mod-auth-mellon',
+ 'libapache2-mod-auth-openidc'
+ ] %}
+{% endif %}
+
+{{ macros.install_packages(apache_packages | customizable("packages")) }}
+
+{% if base_package_type == 'rpm' %}
+RUN sed -i -r 's,^(Listen 80),#\1,' /etc/httpd/conf/httpd.conf \
+ && sed -i -r 's,^(Listen 443),#\1,' /etc/httpd/conf.d/ssl.conf
+{% elif base_package_type == 'deb' %}
+RUN echo > /etc/apache2/ports.conf
+{% endif %}
+
+COPY extend_start.sh /usr/local/bin/kolla_extend_start
+RUN chmod 644 /usr/local/bin/kolla_extend_start
+
+USER root
+
+{% block apache_footer %}{% endblock %}
+
diff --git a/docker/httpd/extend_start.sh b/docker/httpd/extend_start.sh
new file mode 100644
index 000000000..d47af64b9
--- /dev/null
+++ b/docker/httpd/extend_start.sh
@@ -0,0 +1 @@
+. /usr/local/bin/kolla_httpd_setup
diff --git a/docker/influxdb/Dockerfile.j2 b/docker/influxdb/Dockerfile.j2
deleted file mode 100644
index 060973dd6..000000000
--- a/docker/influxdb/Dockerfile.j2
+++ /dev/null
@@ -1,29 +0,0 @@
-FROM {{ namespace }}/{{ image_prefix }}base:{{ tag }}
-{% block labels %}
-LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
-{% endblock %}
-
-{% block influxdb_header %}{% endblock %}
-
-{% import "macros.j2" as macros with context %}
-
-{{ macros.configure_user(name='influxdb') }}
-
-{{ macros.enable_extra_repos(['influxdb']) }}
-
-{% set influxdb_packages = ['influxdb'] %}
-{{ macros.install_packages(influxdb_packages | customizable("packages")) }}
-
-COPY influxdb_sudoers /etc/sudoers.d/kolla_influxdb_sudoers
-COPY extend_start.sh /usr/local/bin/kolla_extend_start
-
-RUN chmod 750 /etc/sudoers.d \
- && chmod 440 /etc/sudoers.d/kolla_influxdb_sudoers \
- && chmod 644 /usr/local/bin/kolla_extend_start
-
-{{ macros.kolla_patch_sources() }}
-
-{% block influxdb_footer %}{% endblock %}
-{% block footer %}{% endblock %}
-
-USER influxdb
diff --git a/docker/influxdb/extend_start.sh b/docker/influxdb/extend_start.sh
deleted file mode 100644
index 42a3c4607..000000000
--- a/docker/influxdb/extend_start.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/bash
-
-# Create log directory, with appropriate permissions
-INFLUXDB_LOG_DIR=/var/log/kolla/influxdb
-
-if [[ ! -d "${INFLUXDB_LOG_DIR}" ]]; then
- mkdir -p ${INFLUXDB_LOG_DIR}
-fi
-if [[ $(stat -c %a ${INFLUXDB_LOG_DIR}) != "755" ]]; then
- chmod 755 ${INFLUXDB_LOG_DIR}
-fi
diff --git a/docker/influxdb/influxdb_sudoers b/docker/influxdb/influxdb_sudoers
deleted file mode 100644
index a9757b264..000000000
--- a/docker/influxdb/influxdb_sudoers
+++ /dev/null
@@ -1 +0,0 @@
-%kolla ALL=(root) NOPASSWD: /usr/bin/chown -R influxdb\: /var/lib/influxdb, /bin/chown -R influxdb\: /var/lib/influxdb
diff --git a/docker/ironic-inspector/Dockerfile.j2 b/docker/ironic-inspector/Dockerfile.j2
deleted file mode 100644
index 29f0dbb67..000000000
--- a/docker/ironic-inspector/Dockerfile.j2
+++ /dev/null
@@ -1,46 +0,0 @@
-FROM {{ namespace }}/{{ image_prefix }}openstack-base:{{ tag }}
-{% block labels %}
-LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
-{% endblock %}
-
-{% block ironic_inspector_header %}{% endblock %}
-
-{% import "macros.j2" as macros with context %}
-
-{{ macros.configure_user(name='ironic-inspector') }}
-
-{% if base_package_type == 'rpm' %}
- {% set ironic_inspector_packages = ['iptables'] %}
-{% elif base_package_type == 'deb' %}
- {% set ironic_inspector_packages = ['iptables'] %}
-{% endif %}
-
-{{ macros.install_packages(ironic_inspector_packages | customizable("packages")) }}
-
-ADD ironic-inspector-archive /ironic-inspector-source
-ADD ironic_inspector_sudoers /etc/sudoers.d/kolla_ironic_inspector_sudoers
-
-{% set ironic_inspector_pip_packages = [
- '/ironic-inspector'
-] %}
-
-COPY extend_start.sh /usr/local/bin/kolla_extend_start
-
-RUN ln -s ironic-inspector-source/* ironic-inspector \
- && {{ macros.install_pip(ironic_inspector_pip_packages | customizable("pip_packages")) }} \
- && mkdir -p /etc/ironic-inspector \
- && cp /ironic-inspector/rootwrap.conf /etc/ironic-inspector/ \
- && cp -r /ironic-inspector/rootwrap.d/ /etc/ironic-inspector/ \
- && sed -i 's|^exec_dirs.*|exec_dirs=/var/lib/kolla/venv/bin,/sbin,/usr/sbin,/bin,/usr/bin,/usr/local/bin,/usr/local/sbin|g' /etc/ironic-inspector/rootwrap.conf \
- && chmod 750 /etc/sudoers.d \
- && chmod 440 /etc/sudoers.d/kolla_ironic_inspector_sudoers \
- && chmod 644 /usr/local/bin/kolla_extend_start \
- && mkdir -p /var/lib/ironic-inspector/dhcp-hostsdir \
- && chown -R ironic-inspector: /var/lib/ironic-inspector
-
-{{ macros.kolla_patch_sources() }}
-
-{% block ironic_inspector_footer %}{% endblock %}
-{% block footer %}{% endblock %}
-
-USER ironic-inspector
diff --git a/docker/ironic-inspector/extend_start.sh b/docker/ironic-inspector/extend_start.sh
deleted file mode 100644
index 2582b017a..000000000
--- a/docker/ironic-inspector/extend_start.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash
-
-LOG_PATH=/var/log/kolla/ironic-inspector
-
-if [[ ! -d "${LOG_PATH}" ]]; then
- mkdir -p "${LOG_PATH}"
-fi
-if [[ $(stat -c %a "${LOG_PATH}") != "755" ]]; then
- chmod 755 "${LOG_PATH}"
-fi
-
-# Bootstrap and exit if KOLLA_BOOTSTRAP variable is set. This catches all cases
-# of the KOLLA_BOOTSTRAP variable being set, including empty.
-if [[ "${!KOLLA_BOOTSTRAP[@]}" ]]; then
- ironic-inspector-dbsync --config-file /etc/ironic-inspector/inspector.conf upgrade
- exit 0
-fi
diff --git a/docker/ironic-inspector/ironic_inspector_sudoers b/docker/ironic-inspector/ironic_inspector_sudoers
deleted file mode 100644
index 395846820..000000000
--- a/docker/ironic-inspector/ironic_inspector_sudoers
+++ /dev/null
@@ -1 +0,0 @@
-ironic-inspector ALL=(root) NOPASSWD: /var/lib/kolla/venv/bin/ironic-inspector-rootwrap /etc/ironic-inspector/rootwrap.conf *
diff --git a/docker/ironic/ironic-base/Dockerfile.j2 b/docker/ironic/ironic-base/Dockerfile.j2
index 2002438c0..86f1d7014 100644
--- a/docker/ironic/ironic-base/Dockerfile.j2
+++ b/docker/ironic/ironic-base/Dockerfile.j2
@@ -21,9 +21,7 @@ COPY extend_start.sh /usr/local/bin/kolla_extend_start
RUN ln -s ironic-base-source/* ironic \
&& {{ macros.install_pip(ironic_base_pip_packages | customizable("pip_packages")) }} \
&& mkdir -p /etc/ironic \
- && cp -r /var/lib/kolla/venv/etc/ironic/* /etc/ironic/ \
&& cp /var/lib/kolla/venv/etc/pycadf/ironic_api_audit_map.conf /etc/ironic/ \
- && sed -i 's|^exec_dirs.*|exec_dirs=/var/lib/kolla/venv/bin,/sbin,/usr/sbin,/bin,/usr/bin,/usr/local/bin,/usr/local/sbin|g' /etc/ironic/rootwrap.conf \
&& chmod 750 /etc/sudoers.d \
&& chmod 440 /etc/sudoers.d/kolla_ironic_sudoers \
&& touch /usr/local/bin/kolla_ironic_extend_start \
diff --git a/docker/ironic/ironic-base/ironic_sudoers b/docker/ironic/ironic-base/ironic_sudoers
index 1a3f32e1a..9b9deed4d 100644
--- a/docker/ironic/ironic-base/ironic_sudoers
+++ b/docker/ironic/ironic-base/ironic_sudoers
@@ -1,4 +1,3 @@
-ironic ALL = (root) NOPASSWD: /var/lib/kolla/venv/bin/ironic-rootwrap /etc/ironic/rootwrap.conf *
ironic ALL = (root) NOPASSWD: /bin/mkdir -p /var/lib/ironic-metrics, /usr/bin/mkdir -p /var/lib/ironic-metrics
ironic ALL = (root) NOPASSWD: /bin/chown ironic\:ironic /var/lib/ironic-metrics, /usr/bin/chown ironic\:ironic /var/lib/ironic-metrics
ironic ALL = (root) NOPASSWD: /bin/chmod 2755 /var/lib/ironic-metrics, /usr/bin/chmod 2775 /var/lib/ironic-metrics
diff --git a/docker/ironic/ironic-conductor/Dockerfile.j2 b/docker/ironic/ironic-conductor/Dockerfile.j2
index d89dca66d..874a0b81f 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',
@@ -24,6 +23,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
'systemd-udev',
'util-linux',
'xfsprogs',
+ 'xorriso'
] %}
{% if base_arch in ['x86_64'] %}
{% set ironic_conductor_packages = ironic_conductor_packages + [
diff --git a/docker/ironic/ironic-pxe-filter/Dockerfile.j2 b/docker/ironic/ironic-pxe-filter/Dockerfile.j2
new file mode 100644
index 000000000..b8bc2cc63
--- /dev/null
+++ b/docker/ironic/ironic-pxe-filter/Dockerfile.j2
@@ -0,0 +1,24 @@
+FROM {{ namespace }}/{{ image_prefix }}ironic-base:{{ tag }}
+{% block labels %}
+LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
+{% endblock %}
+
+{% block ironic_pxe_filter_header %}{% endblock %}
+
+{% import "macros.j2" as macros with context %}
+
+{% set ironic_pxe_filter_packages = [] %}
+
+{% set ironic_pxe_filter_pip_packages = [] %}
+
+RUN {{ macros.install_pip(ironic_pxe_filter_pip_packages | customizable("pip_packages")) }}
+
+{{ macros.install_packages(ironic_pxe_filter_packages | customizable("packages")) }}
+
+{{ macros.kolla_patch_sources() }}
+
+COPY extend_start.sh /usr/local/bin/kolla_ironic_extend_start
+RUN chmod 644 /usr/local/bin/kolla_ironic_extend_start
+
+{% block ironic_pxe_filter_footer %}{% endblock %}
+{% block footer %}{% endblock %}
diff --git a/docker/ironic/ironic-pxe-filter/extend_start.sh b/docker/ironic/ironic-pxe-filter/extend_start.sh
new file mode 100644
index 000000000..c7a807c8d
--- /dev/null
+++ b/docker/ironic/ironic-pxe-filter/extend_start.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+IRONIC_DHCP_HOSTS_DIR=${IRONIC_DHCP_HOSTS_DIR:-/etc/dnsmasq/dhcp-hostsdir}
+DNSMASQ_PIDFILE=${DNSMASQ_PIDFILE:-/run/ironic/dnsmasq.pid}
+
+# NOTE(wszumski): This container must be in same process namespace as dnsmasq
+rm -f $IRONIC_DHCP_HOSTS_DIR/* && kill -HUP $(cat "$DNSMASQ_PIDFILE") || true
diff --git a/docker/ironic/ironic-pxe/Dockerfile.j2 b/docker/ironic/ironic-pxe/Dockerfile.j2
index 6a2131de6..eb357610b 100644
--- a/docker/ironic/ironic-pxe/Dockerfile.j2
+++ b/docker/ironic/ironic-pxe/Dockerfile.j2
@@ -17,15 +17,10 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
'ipxe-bootimgs-aarch64',
'mtools',
'shim-*64',
+ 'syslinux-tftpboot',
'tftp-server',
] %}
- {% if base_arch in ['x86_64'] %}
- {% set ironic_pxe_packages = ironic_pxe_packages + [
- 'syslinux-tftpboot'
- ] %}
- {% endif %}
-
{{ macros.install_packages(ironic_pxe_packages | customizable("packages")) }}
{% elif base_package_type == 'deb' %}
{% set ironic_pxe_packages = [
diff --git a/docker/ironic/ironic-pxe/extend_start.sh b/docker/ironic/ironic-pxe/extend_start.sh
index 07652b803..7377198e2 100644
--- a/docker/ironic/ironic-pxe/extend_start.sh
+++ b/docker/ironic/ironic-pxe/extend_start.sh
@@ -50,13 +50,8 @@ function prepare_ipxe {
fi
cp /usr/lib/ipxe/{undionly.kpxe,ipxe*.efi,snponly.efi} ${TFTPBOOT_PATH}/
elif [[ "${KOLLA_BASE_DISTRO}" =~ centos|rocky ]]; then
- cp /usr/share/ipxe/{undionly.kpxe,ipxe*.efi} ${TFTPBOOT_PATH}/
+ cp /usr/share/ipxe/{undionly.kpxe,ipxe-snponly-x86_64.efi} ${TFTPBOOT_PATH}/
cp /usr/share/ipxe/arm64-efi/snponly.efi ${TFTPBOOT_PATH}/ipxe-snponly-aarch64.efi
- if [[ ! -e ${TFTPBOOT_PATH}/ipxe.efi ]]; then
- # NOTE(m-anson): No ipxe-aarch64.efi exists so no need to use
- # $KOLLA_BASE_ARCH in the symlink target
- ln -s ${TFTPBOOT_PATH}/ipxe-x86_64.efi ${TFTPBOOT_PATH}/ipxe.efi
- fi
if [[ ! -e ${TFTPBOOT_PATH}/snponly.efi ]]; then
ln -s ${TFTPBOOT_PATH}/ipxe-snponly-${KOLLA_BASE_ARCH}.efi ${TFTPBOOT_PATH}/snponly.efi
fi
diff --git a/docker/keystone/keystone-base/Dockerfile.j2 b/docker/keystone/keystone-base/Dockerfile.j2
index 7764accbd..f7bb0919f 100644
--- a/docker/keystone/keystone-base/Dockerfile.j2
+++ b/docker/keystone/keystone-base/Dockerfile.j2
@@ -10,6 +10,10 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{{ macros.configure_user(name='keystone') }}
{% if base_package_type == 'rpm' %}
+
+{# NOTE(mnasiadka): mod_auth_mellon missing in CentOS 10 Stream - temporarily from Kolla COPR #}
+{{ macros.enable_extra_repos(['epel', 'kolla_el10']) }}
+
{% set keystone_base_packages = [
'cyrus-sasl-devel',
'mod_auth_mellon',
@@ -30,6 +34,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% block keystone_source_install %}
ADD keystone-base-archive /keystone-base-source
+ADD wsgi /var/lib/kolla/venv/bin/keystone-wsgi-public
{% set keystone_base_pip_packages = [
'/keystone[ldap]',
@@ -37,14 +42,10 @@ ADD keystone-base-archive /keystone-base-source
RUN ln -s keystone-base-source/* keystone \
&& {{ macros.install_pip(keystone_base_pip_packages | customizable("pip_packages")) }} \
- && mkdir -p /etc/keystone /var/www/cgi-bin/keystone \
- && cp -r /keystone/etc/* /etc/keystone/ \
- && cp /var/lib/kolla/venv/bin/keystone-wsgi-admin /var/www/cgi-bin/keystone/admin \
- && cp /var/lib/kolla/venv/bin/keystone-wsgi-public /var/www/cgi-bin/keystone/main
+ && mkdir -p /etc/keystone \
+ && cp -r /keystone/etc/* /etc/keystone/
{% endblock %}
-RUN chmod 755 /var/www/cgi-bin/keystone/*
-
{{ macros.kolla_patch_sources() }}
{% block keystone_base_footer %}{% endblock %}
diff --git a/docker/keystone/keystone-base/wsgi b/docker/keystone/keystone-base/wsgi
new file mode 100644
index 000000000..852ee95eb
--- /dev/null
+++ b/docker/keystone/keystone-base/wsgi
@@ -0,0 +1,2 @@
+#!/var/lib/kolla/venv/bin/python
+from keystone.wsgi.api import application
diff --git a/docker/keystone/keystone-ssh/extend_start.sh b/docker/keystone/keystone-ssh/extend_start.sh
index dc8f04b49..559cd65a9 100644
--- a/docker/keystone/keystone-ssh/extend_start.sh
+++ b/docker/keystone/keystone-ssh/extend_start.sh
@@ -1,6 +1,7 @@
#!/bin/bash
-SSH_HOST_KEY_TYPES=( "rsa" "dsa" "ecdsa" "ed25519" )
+# NOTE(mnasiadka): CentOS 10 does not support dsa
+SSH_HOST_KEY_TYPES=( "rsa" "ecdsa" "ed25519" )
for key_type in ${SSH_HOST_KEY_TYPES[@]}; do
KEY_PATH=/etc/ssh/ssh_host_${key_type}_key
diff --git a/docker/keystone/keystone/extend_start.sh b/docker/keystone/keystone/extend_start.sh
index e428fc95e..25220b683 100644
--- a/docker/keystone/keystone/extend_start.sh
+++ b/docker/keystone/keystone/extend_start.sh
@@ -47,4 +47,3 @@ fi
. /usr/local/bin/kolla_httpd_setup
-ARGS="-DFOREGROUND"
diff --git a/docker/kolla-toolbox/Dockerfile.j2 b/docker/kolla-toolbox/Dockerfile.j2
index cc8ae1b55..c730c5566 100644
--- a/docker/kolla-toolbox/Dockerfile.j2
+++ b/docker/kolla-toolbox/Dockerfile.j2
@@ -13,7 +13,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{{ macros.configure_user(name='ansible') }}
{{ macros.configure_user(name='rabbitmq') }}
-{{ macros.enable_extra_repos(['crb', 'erlang', 'openvswitch', 'rabbitmq']) }}
+{{ macros.enable_extra_repos(['erlang', 'rabbitmq']) }}
{% block rabbitmq_apt_preferences %}
{% if base_package_type == 'deb' %}
@@ -22,8 +22,10 @@ COPY apt_preferences_rabbitmq.{{ base_distro }} /etc/apt/preferences.d/rabbitmq
{% endblock %}
{% if base_package_type == 'rpm' %}
+
+{{ macros.enable_extra_repos(['crb', 'epel', 'openvswitch']) }}
+
{% set kolla_toolbox_packages = [
- 'crudini',
'erlang-27.*',
'gcc',
'gdisk',
@@ -35,17 +37,16 @@ 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.1.*'
+ 'openvswitch${KOLLA_RPM_OVS_VERSION}',
+ 'python3',
+ 'python3-devel',
+ 'rabbitmq-server-4.2.*'
] %}
{% elif base_package_type == 'deb' %}
{% set kolla_toolbox_packages = [
'build-essential',
'ca-certificates',
- 'crudini',
'gdisk',
'git',
'jq',
@@ -60,31 +61,17 @@ COPY apt_preferences_rabbitmq.{{ base_distro }} /etc/apt/preferences.d/rabbitmq
{% endif %}
{{ macros.install_packages(kolla_toolbox_packages | customizable("packages")) }}
-{# NOTE(kevko):
- In all distros, there is always a /usr/bin/python3 -> python3.X.
- However, this is disrupted for RHEL-based systems because, unlike
- other distros, we upgrade Python above [1], but we forget to set
- the default python3 to the new python3.X. As a result also, everything
- outside of the virtual environment ends up running on Python 3.9.
-
- So, let's correctly set python3 -> python3.X since we had to install
- it and now have default python3 points to the new version.
-
- [1] https://review.opendev.org/c/openstack/kolla/+/924245
-#}
-{% if base_package_type == 'rpm' %}
-RUN cd /usr/bin && \
- rm -f python3 && \
- ln -s python3.12 python3
-{% endif %}
-
{% block kolla_toolbox_pip_conf %}
-ENV UPPER_CONSTRAINTS_FILE=https://releases.openstack.org/constraints/upper/{{ openstack_release }}
+ENV UPPER_CONSTRAINTS_FILE=/requirements/upper-constraints.txt
{% endblock %}
{% block kolla_toolbox_upper_constraints %}
-RUN mkdir -p /requirements \
- && curl -o /requirements/upper-constraints.txt $UPPER_CONSTRAINTS_FILE \
+ADD kolla-toolbox-archive /kolla-toolbox-source
+
+RUN case "$UPPER_CONSTRAINTS_FILE" in \
+ http*) mkdir -p /requirements && curl -LO $UPPER_CONSTRAINTS_FILE /requirements/upper-constraints.txt ;; \
+ *) ln -s kolla-toolbox-source/* /requirements ;; \
+ esac \
&& {{ macros.upper_constraints_remove("openstacksdk") }} \
&& python3 -m venv --system-site-packages {{ venv_path }} \
&& KOLLA_DISTRO_PYTHON_VERSION=$(/usr/bin/python3 -c "import sys; print('{}.{}'.format(sys.version_info.major, sys.version_info.minor))") \
@@ -95,9 +82,9 @@ RUN mkdir -p /requirements \
ENV PATH {{ venv_path }}/bin:$PATH
{% set kolla_toolbox_pip_packages = [
- 'ansible-core==2.18.*',
+ 'ansible-core==2.20.*',
+ 'ansible-runner',
'cmd2',
- 'influxdb',
'openstacksdk',
'os-client-config',
'pbr',
diff --git a/docker/kolla-toolbox/ansible.cfg b/docker/kolla-toolbox/ansible.cfg
index 53708de39..ec505f4a4 100644
--- a/docker/kolla-toolbox/ansible.cfg
+++ b/docker/kolla-toolbox/ansible.cfg
@@ -1,3 +1,4 @@
[defaults]
-remote_tmp = /tmp
+inject_facts_as_vars = False
log_path = /var/log/kolla/ansible.log
+remote_tmp = /tmp
diff --git a/docker/kolla-toolbox/requirements.yml b/docker/kolla-toolbox/requirements.yml
index 0c4025d01..83c795142 100644
--- a/docker/kolla-toolbox/requirements.yml
+++ b/docker/kolla-toolbox/requirements.yml
@@ -1,11 +1,11 @@
---
collections:
- name: ansible.posix
- version: '<2'
+ version: '<3'
- name: community.general
- version: '<4'
+ version: '<13'
- name: community.mysql
- version: '<3'
+ version: '<5'
- name: community.rabbitmq
version: '<2'
- name: openstack.cloud
diff --git a/docker/kuryr/kuryr-libnetwork/Dockerfile.j2 b/docker/kuryr/kuryr-libnetwork/Dockerfile.j2
index 6d0bed487..8764cbb84 100644
--- a/docker/kuryr/kuryr-libnetwork/Dockerfile.j2
+++ b/docker/kuryr/kuryr-libnetwork/Dockerfile.j2
@@ -7,12 +7,12 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% import "macros.j2" as macros with context %}
-{{ macros.enable_extra_repos(['openvswitch']) }}
-
{% if base_package_type == 'rpm' %}
+{{ macros.enable_extra_repos(['openvswitch']) }}
+
{% set kuryr_libnetwork_packages = [
- 'openvswitch'
+ 'openvswitch${KOLLA_RPM_OVS_VERSION}'
] %}
{% elif base_package_type == 'deb' %}
diff --git a/docker/manila/manila-api/Dockerfile.j2 b/docker/manila/manila-api/Dockerfile.j2
index 817933cfc..4e13321f5 100644
--- a/docker/manila/manila-api/Dockerfile.j2
+++ b/docker/manila/manila-api/Dockerfile.j2
@@ -13,10 +13,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
COPY extend_start.sh /usr/local/bin/kolla_manila_extend_start
-RUN mkdir -p /var/www/cgi-bin/manila \
- && cp -a /var/lib/kolla/venv/bin/manila-wsgi /var/www/cgi-bin/manila/manila-wsgi \
- && chmod 644 /usr/local/bin/kolla_manila_extend_start \
- && chmod 755 /var/www/cgi-bin/manila/manila-wsgi
+RUN chmod 644 /usr/local/bin/kolla_manila_extend_start
{{ macros.kolla_patch_sources() }}
diff --git a/docker/manila/manila-base/Dockerfile.j2 b/docker/manila/manila-base/Dockerfile.j2
index 0580cccbc..83d6ca71d 100644
--- a/docker/manila/manila-base/Dockerfile.j2
+++ b/docker/manila/manila-base/Dockerfile.j2
@@ -7,12 +7,13 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% import "macros.j2" as macros with context %}
-{{ macros.enable_extra_repos(['openvswitch']) }}
{{ macros.configure_user(name='manila') }}
{% if base_package_type == 'rpm' %}
- {% set manila_base_packages = ['openvswitch'] %}
+{{ macros.enable_extra_repos(['openvswitch']) }}
+
+ {% set manila_base_packages = ['openvswitch${KOLLA_RPM_OVS_VERSION}'] %}
{% elif base_package_type == 'deb' %}
diff --git a/docker/manila/manila-share/Dockerfile.j2 b/docker/manila/manila-share/Dockerfile.j2
index 22dceb342..210d8b31c 100644
--- a/docker/manila/manila-share/Dockerfile.j2
+++ b/docker/manila/manila-share/Dockerfile.j2
@@ -7,12 +7,9 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% import "macros.j2" as macros with context %}
-{{ macros.enable_extra_repos(['ceph', 'epel']) }}
-
{% if base_package_type == 'rpm' %}
{% set manila_share_packages = [
'ceph-common',
- 'glusterfs-fuse',
'sqlite',
] %}
{% elif base_package_type == 'deb' %}
diff --git a/docker/mariadb/mariadb-server/Dockerfile.j2 b/docker/mariadb-server/Dockerfile.j2
index ec17a5055..af9297396 100644
--- a/docker/mariadb/mariadb-server/Dockerfile.j2
+++ b/docker/mariadb-server/Dockerfile.j2
@@ -1,4 +1,4 @@
-FROM {{ namespace }}/{{ image_prefix }}mariadb-base:{{ tag }}
+FROM {{ namespace }}/{{ image_prefix }}base:{{ tag }}
{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
{% endblock %}
@@ -9,12 +9,14 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{{ macros.configure_user(name='mysql') }}
+{% if base_package_type == 'rpm' %}
+
{# NOTE(mgoddard): EPEL required for pv package #}
{{ macros.enable_extra_repos(['epel', 'mariadb']) }}
-{% if base_package_type == 'rpm' %}
{% set mariadb_packages = [
'expect',
+ 'mariadb',
'mariadb-backup',
'mariadb-server',
'pv',
@@ -26,15 +28,26 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
RUN ln -s /usr/lib64/galera-4 /usr/lib64/galera
{% elif base_package_type == 'deb' %}
+{{ macros.enable_extra_repos(['mariadb']) }}
{% set mariadb_packages = [
'expect',
'mariadb-backup',
- 'mariadb-server'
+ 'mariadb-client',
+ 'mariadb-server',
+ 'pv',
+ 'rsync',
+ 'tar'
] %}
{% endif %}
{{ macros.install_packages(mariadb_packages | customizable("packages")) }}
+{% block mariadb_healthcheck %}
+ENV MARIADB_VERSION=11.4
+ADD plugins-archive /
+RUN install -m 755 /plugins/mariadb-server-plugin-mariadb-docker-archive*/$MARIADB_VERSION/healthcheck.sh /usr/bin/healthcheck.sh
+{% endblock %}
+
COPY mariadb_sudoers /etc/sudoers.d/kolla_mariadb_sudoers
COPY extend_start.sh /usr/local/bin/kolla_extend_start
COPY security_reset.expect /usr/local/bin/kolla_security_reset
diff --git a/docker/mariadb/mariadb-server/backup.sh b/docker/mariadb-server/backup.sh
index be63cd938..be63cd938 100644
--- a/docker/mariadb/mariadb-server/backup.sh
+++ b/docker/mariadb-server/backup.sh
diff --git a/docker/mariadb/mariadb-server/backup_replica.sh b/docker/mariadb-server/backup_replica.sh
index ebdcbf6b0..fe10bc61b 100644
--- a/docker/mariadb/mariadb-server/backup_replica.sh
+++ b/docker/mariadb-server/backup_replica.sh
@@ -8,6 +8,7 @@ DEFAULT_MY_CNF="/etc/mysql/my.cnf"
REPLICA_MY_CNF="$(mktemp)"
RETRY_INTERVAL=5 # Interval between retries (in seconds)
MAX_RETRIES=12 # Max retries (12 retries * 5 seconds = 60 seconds)
+VERIFY_DB_SERVER_CERT="${VERIFY_DB_SERVER_CERT:=FALSE}"
# Cleanup function to remove the REPLICA_MY_CNF file
cleanup() {
@@ -74,7 +75,7 @@ retry_mysql_query() {
local attempt=1
while [ ${attempt} -le ${MAX_RETRIES} ]; do
- result=$(mysql -h "${HOST}" -u "${USER}" -p"${PASS}" -s -N -e "${query}" 2>/dev/null || true)
+ result=$(mariadb --ssl-verify-server-cert="${VERIFY_DB_SERVER_CERT}" -h "${HOST}" -u "${USER}" -p"${PASS}" -s -N -e "${query}" 2>/dev/null || true)
if [ -n "${result}" ]; then
echo "${result}"
return 0
diff --git a/docker/mariadb/mariadb-server/extend_start.sh b/docker/mariadb-server/extend_start.sh
index 53a54557d..f14c85949 100644
--- a/docker/mariadb/mariadb-server/extend_start.sh
+++ b/docker/mariadb-server/extend_start.sh
@@ -3,7 +3,7 @@
: ${MARIADB_LOG_DIR:=/var/log/kolla/mariadb}
function bootstrap_db {
- mysqld_safe --wsrep-new-cluster --skip-networking --wsrep-on=OFF --pid-file=/var/lib/mysql/mariadb.pid &
+ mariadbd-safe --wsrep-new-cluster --skip-networking --wsrep-on=OFF --pid-file=/var/lib/mysql/mariadb.pid &
# Wait for the mariadb server to be "Ready" before starting the security reset with a max timeout
# NOTE(huikang): the location of mysql's socket file varies depending on the OS distributions.
# Querying the cluster status has to be executed after the existence of mysql.sock and mariadb.pid.
@@ -22,9 +22,9 @@ function bootstrap_db {
sudo -E kolla_security_reset
set +o xtrace
- mysql -u root --password="${DB_ROOT_PASSWORD}" -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '${DB_ROOT_PASSWORD}' WITH GRANT OPTION;"
- mysql -u root --password="${DB_ROOT_PASSWORD}" -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '${DB_ROOT_PASSWORD}' WITH GRANT OPTION;"
- mysqladmin -uroot -p"${DB_ROOT_PASSWORD}" shutdown
+ mariadb -u root --password="${DB_ROOT_PASSWORD}" -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '${DB_ROOT_PASSWORD}' WITH GRANT OPTION;"
+ mariadb -u root --password="${DB_ROOT_PASSWORD}" -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '${DB_ROOT_PASSWORD}' WITH GRANT OPTION;"
+ mariadb-admin -uroot -p"${DB_ROOT_PASSWORD}" shutdown
set -o xtrace
}
@@ -38,21 +38,21 @@ fi
# This catches all cases of the BOOTSTRAP variable being set, including empty
if [[ "${!KOLLA_BOOTSTRAP[@]}" ]]; then
- mysql_install_db 2>&1 | tee -a ${MARIADB_LOG_DIR}/mariadb-bootstrap.log
+ mariadb-install-db 2>&1 | tee -a ${MARIADB_LOG_DIR}/mariadb-bootstrap.log
bootstrap_db 2>&1 | tee -a ${MARIADB_LOG_DIR}/mariadb-bootstrap.log
exit 0
fi
# This catches all cases of the KOLLA_UPGRADE variable being set, including empty
if [[ "${!KOLLA_UPGRADE[@]}" ]]; then
- # The mysql_upgrade command treats any directories under /var/lib/mysql as
+ # The mariadb-upgrade command treats any directories under /var/lib/mysql as
# databases. Somehow we can end up with a .pki directory, which causes the
# command to fail with this error:
# Incorrect database name '#mysql50#.pki' when selecting the database
# There doesn't seem to be anything in the directory, so remove it.
rm -rf /var/lib/mysql/.pki
- mysql_upgrade --host=${DB_HOST} --port=${DB_PORT} --user=root --password="${DB_ROOT_PASSWORD}" 2>&1 | tee -a ${MARIADB_LOG_DIR}/mariadb-upgrade.log
+ mariadb-upgrade --host=${DB_HOST} --port=${DB_PORT} --user=root --password="${DB_ROOT_PASSWORD}" 2>&1 | tee -a ${MARIADB_LOG_DIR}/mariadb-upgrade.log
exit 0
fi
diff --git a/docker/mariadb/mariadb-server/healthcheck_mariadb b/docker/mariadb-server/healthcheck_mariadb
index 0d9f59a95..0d9f59a95 100755
--- a/docker/mariadb/mariadb-server/healthcheck_mariadb
+++ b/docker/mariadb-server/healthcheck_mariadb
diff --git a/docker/mariadb/mariadb-server/mariadb_sudoers b/docker/mariadb-server/mariadb_sudoers
index 150534e16..150534e16 100644
--- a/docker/mariadb/mariadb-server/mariadb_sudoers
+++ b/docker/mariadb-server/mariadb_sudoers
diff --git a/docker/mariadb/mariadb-server/security_reset.expect b/docker/mariadb-server/security_reset.expect
index 06f1d5c8e..06f1d5c8e 100644
--- a/docker/mariadb/mariadb-server/security_reset.expect
+++ b/docker/mariadb-server/security_reset.expect
diff --git a/docker/mariadb/mariadb-base/Dockerfile.j2 b/docker/mariadb/mariadb-base/Dockerfile.j2
deleted file mode 100644
index e4e17a8bf..000000000
--- a/docker/mariadb/mariadb-base/Dockerfile.j2
+++ /dev/null
@@ -1,38 +0,0 @@
-FROM {{ namespace }}/{{ image_prefix }}base:{{ tag }}
-{% block labels %}
-LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
-{% endblock %}
-
-{% block mariadb_base_header %}{% endblock %}
-
-{% import "macros.j2" as macros with context %}
-
-{{ macros.configure_user(name='mysql') }}
-
-{{ macros.enable_extra_repos(['mariadb']) }}
-
-{% if base_package_type == 'rpm' %}
- {% set mariadb_base_packages = [
- 'mariadb',
- ] %}
-
-{% elif base_package_type == 'deb' %}
- {% set mariadb_base_packages = [
- 'mariadb-client',
- ] %}
-{% endif %}
-
-{{ macros.install_packages(mariadb_base_packages | customizable("packages")) }}
-
-{# NOTE(mnasiadka): Latest clustercheck version as of May 2023 is 10.9 #}
-{% block mariadb_clustercheck_version %}
-ARG mariadb_clustercheck_version=10.9
-ARG mariadb_clustercheck_url=https://src.fedoraproject.org/rpms/mariadb/raw/${mariadb_clustercheck_version}/f/clustercheck.sh
-{% endblock %}
-
-RUN curl -o /usr/bin/clustercheck ${mariadb_clustercheck_url} \
- && chmod 755 /usr/bin/clustercheck
-
-{{ macros.kolla_patch_sources() }}
-
-{% block mariadb_base_footer %}{% endblock %}
diff --git a/docker/mariadb/mariadb-clustercheck/Dockerfile.j2 b/docker/mariadb/mariadb-clustercheck/Dockerfile.j2
deleted file mode 100644
index 7aee4ef05..000000000
--- a/docker/mariadb/mariadb-clustercheck/Dockerfile.j2
+++ /dev/null
@@ -1,19 +0,0 @@
-FROM {{ namespace }}/{{ image_prefix }}mariadb-base:{{ tag }}
-{% block labels %}
-LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
-{% endblock %}
-
-{% block mariadb_clustercheck_header %}{% endblock %}
-
-{% import "macros.j2" as macros with context %}
-
-COPY extend_start.sh /usr/local/bin/kolla_extend_start
-COPY socat_wrapper.sh /usr/local/bin/socat_wrapper
-
-RUN chmod 644 /usr/local/bin/kolla_extend_start && \
- chmod 755 /usr/local/bin/socat_wrapper
-
-{{ macros.kolla_patch_sources() }}
-
-{% block mariadb_clustercheck_footer %}{% endblock %}
-{% block footer %}{% endblock %}
diff --git a/docker/mariadb/mariadb-clustercheck/extend_start.sh b/docker/mariadb/mariadb-clustercheck/extend_start.sh
deleted file mode 100644
index 7379abddc..000000000
--- a/docker/mariadb/mariadb-clustercheck/extend_start.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/bash
-
-: ${MARIADB_LOG_DIR:=/var/log/kolla/mariadb}
-
-# Create log directory, with appropriate permissions
-if [[ ! -d "${MARIADB_LOG_DIR}" ]]; then
- mkdir -p ${MARIADB_LOG_DIR}
-fi
-if [[ $(stat -c %a ${MARIADB_LOG_DIR}) != "755" ]]; then
- chmod 755 ${MARIADB_LOG_DIR}
-fi
diff --git a/docker/mariadb/mariadb-clustercheck/socat_wrapper.sh b/docker/mariadb/mariadb-clustercheck/socat_wrapper.sh
deleted file mode 100644
index bf562e3d5..000000000
--- a/docker/mariadb/mariadb-clustercheck/socat_wrapper.sh
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/env bash
-
-catch_term() {
- kill -TERM "$child" 2>/dev/null
- exit 0
-}
-
-catch_quit() {
- kill -QUIT "$child" 2>/dev/null
- exit 0
-}
-
-trap catch_term SIGTERM
-trap catch_quit SIGQUIT
-
-socat "$@" &
-
-child=$!
-wait "$child"
diff --git a/docker/masakari/masakari-base/extend_start.sh b/docker/masakari/masakari-base/extend_start.sh
index d4fdcc86a..4f13d3e8b 100755
--- a/docker/masakari/masakari-base/extend_start.sh
+++ b/docker/masakari/masakari-base/extend_start.sh
@@ -3,6 +3,9 @@
if [[ ! -d "/var/log/kolla/masakari" ]]; then
mkdir -p /var/log/kolla/masakari
fi
+if [[ $(stat -c %U:%G /var/log/kolla/masakari) != "masakari:kolla" ]]; then
+ chown -R masakari:kolla /var/log/kolla/masakari
+fi
if [[ $(stat -c %a /var/log/kolla/masakari) != "755" ]]; then
chmod 755 /var/log/kolla/masakari
fi
diff --git a/docker/masakari/masakari-monitors/Dockerfile.j2 b/docker/masakari/masakari-monitors/Dockerfile.j2
index b7c847e1e..76ad28d3f 100644
--- a/docker/masakari/masakari-monitors/Dockerfile.j2
+++ b/docker/masakari/masakari-monitors/Dockerfile.j2
@@ -7,10 +7,10 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% import "macros.j2" as macros with context %}
-{{ macros.enable_extra_repos(['hacluster']) }}
-
{% if base_package_type == 'rpm' %}
+{{ macros.enable_extra_repos(['hacluster']) }}
+
{% set masakari_monitors_packages = [
'cyrus-sasl-md5',
'cyrus-sasl-scram',
diff --git a/docker/neutron/neutron-base/Dockerfile.j2 b/docker/neutron/neutron-base/Dockerfile.j2
index 267dac3fa..956551fbd 100644
--- a/docker/neutron/neutron-base/Dockerfile.j2
+++ b/docker/neutron/neutron-base/Dockerfile.j2
@@ -7,11 +7,13 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% import "macros.j2" as macros with context %}
-{{ macros.enable_extra_repos(['docker-ce', 'openvswitch']) }}
+{{ macros.enable_extra_repos(['docker-ce']) }}
{{ macros.configure_user(name='neutron') }}
{% if base_package_type == 'rpm' %}
+{{ macros.enable_extra_repos(['openvswitch']) }}
+
{% set neutron_base_packages = [
'conntrack-tools',
'dnsmasq',
@@ -24,8 +26,8 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
'iputils',
'keepalived',
'net-tools',
- 'openvswitch',
- 'python3-openvswitch',
+ 'openvswitch${KOLLA_RPM_OVS_VERSION}',
+ 'python3-openvswitch${KOLLA_RPM_OVS_VERSION}',
'radvd',
'uuid'
] %}
@@ -76,6 +78,7 @@ RUN chmod +x /usr/local/lib/neutron-wrappers/copy-wrappers \
&& chmod +x /usr/local/lib/neutron-wrappers/delete-wrappers
RUN ln -s neutron-base-source/* neutron \
+ && {{ macros.upper_constraints_remove('networking-generic-switch') }} \
&& {{ macros.install_pip(neutron_base_pip_packages | customizable("pip_packages")) }} \
&& mkdir -p /etc/neutron \
&& cp -r /neutron/etc/* /etc/neutron/ \
diff --git a/docker/neutron/neutron-base/keepalived b/docker/neutron/neutron-base/keepalived
index 34b1afaea..6bb2b4d3d 100644
--- a/docker/neutron/neutron-base/keepalived
+++ b/docker/neutron/neutron-base/keepalived
@@ -30,7 +30,7 @@ LIST=$($CLI ps -a --filter name=${KOLLA_SERVICE}_keepalived_ --format '{{.ID}}:{
printf "%s\n" "${LIST}" | grep -q "${NAME}$" && NAME="${NAME}_$(date +%Y-%m-%d-%H%M%S-%N)"
echo "Starting a new child container ${NAME} using image ${KOLLA_IMAGE}"
-$CLI run --detach \
+$CLI run --rm --detach \
-v /etc/kolla/${KOLLA_SERVICE_NAME}:/etc/neutron:ro \
-v /lib/modules:/lib/modules:ro \
-v /sbin/modprobe:/sbin/modprobe:ro \
diff --git a/docker/neutron/neutron-linuxbridge-agent/Dockerfile.j2 b/docker/neutron/neutron-linuxbridge-agent/Dockerfile.j2
deleted file mode 100644
index 471325548..000000000
--- a/docker/neutron/neutron-linuxbridge-agent/Dockerfile.j2
+++ /dev/null
@@ -1,21 +0,0 @@
-FROM {{ namespace }}/{{ image_prefix }}neutron-base:{{ tag }}
-{% block labels %}
-LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
-{% endblock %}
-
-{% block neutron_linuxbridge_agent_header %}{% endblock %}
-
-{% import "macros.j2" as macros with context %}
-
-{% set neutron_linuxbridge_agent_packages = [
- 'ebtables'
-] %}
-
-{{ macros.install_packages(neutron_linuxbridge_agent_packages | customizable("packages")) }}
-
-{{ macros.kolla_patch_sources() }}
-
-{% block neutron_linuxbridge_agent_footer %}{% endblock %}
-{% block footer %}{% endblock %}
-
-USER neutron
diff --git a/docker/neutron/neutron-metadata-agent/Dockerfile.j2 b/docker/neutron/neutron-metadata-agent/Dockerfile.j2
index 676ee1a85..91c308405 100644
--- a/docker/neutron/neutron-metadata-agent/Dockerfile.j2
+++ b/docker/neutron/neutron-metadata-agent/Dockerfile.j2
@@ -14,6 +14,8 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{{ macros.kolla_patch_sources() }}
+COPY extend_start.sh /usr/local/bin/kolla_extend_start
+
{% block neutron_metadata_agent_footer %}{% endblock %}
{% block footer %}{% endblock %}
diff --git a/docker/neutron/neutron-metadata-agent/extend_start.sh b/docker/neutron/neutron-metadata-agent/extend_start.sh
new file mode 100644
index 000000000..001898f68
--- /dev/null
+++ b/docker/neutron/neutron-metadata-agent/extend_start.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+if [[ ! -d "/var/log/kolla/neutron" ]]; then
+ mkdir -p /var/log/kolla/neutron
+fi
+if [[ $(stat -c %a /var/log/kolla/neutron) != "755" ]]; then
+ chmod 755 /var/log/kolla/neutron
+fi
+
+if [[ "${KOLLA_NEUTRON_WRAPPERS:-false}" == "true" ]]; then
+ echo "Copying neutron agent wrappers to /usr/local/bin"
+ sudo -E /usr/local/lib/neutron-wrappers/copy-wrappers
+else
+ echo "Removing neutron agent wrappers from /usr/local/bin"
+ sudo -E /usr/local/lib/neutron-wrappers/delete-wrappers
+fi
+
+. /usr/local/bin/kolla_neutron_extend_start
diff --git a/docker/neutron/neutron-mlnx-agent/Dockerfile.j2 b/docker/neutron/neutron-mlnx-agent/Dockerfile.j2
index 6e2252ac3..2ff8e0ff5 100644
--- a/docker/neutron/neutron-mlnx-agent/Dockerfile.j2
+++ b/docker/neutron/neutron-mlnx-agent/Dockerfile.j2
@@ -9,7 +9,6 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% set neutron_mlnx_agent_packages = [
'python3-libvirt',
- 'python3-ethtool',
] %}
{{ macros.install_packages(neutron_mlnx_agent_packages | customizable("packages")) }}
diff --git a/docker/neutron/neutron-ovn-vpn-agent/Dockerfile.j2 b/docker/neutron/neutron-ovn-vpn-agent/Dockerfile.j2
new file mode 100644
index 000000000..e4166c58d
--- /dev/null
+++ b/docker/neutron/neutron-ovn-vpn-agent/Dockerfile.j2
@@ -0,0 +1,31 @@
+FROM {{ namespace }}/{{ image_prefix }}neutron-base:{{ tag }}
+{% block labels %}
+LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
+{% endblock %}
+
+{% block neutron_ovn_vpn_agent_header %}{% endblock %}
+
+{% import "macros.j2" as macros with context %}
+
+# Note: VPN is currently not working on RHEL 10 due to a known issue:
+# https://bugs.launchpad.net/neutron/+bug/2146308
+{% if base_package_type == 'rpm' %}
+ {% set neutron_ovn_vpn_agent_packages = [
+ 'libreswan'
+ ] %}
+{% elif base_package_type == 'deb' %}
+ {% set neutron_ovn_vpn_agent_packages = [
+ 'strongswan',
+ 'strongswan-starter',
+ 'strongswan-charon'
+ ] %}
+{% endif %}
+
+{{ macros.install_packages(neutron_ovn_vpn_agent_packages | customizable("packages")) }}
+
+{{ macros.kolla_patch_sources() }}
+
+{% block neutron_ovn_vpn_agent_footer %}{% endblock %}
+{% block footer %}{% endblock %}
+
+USER neutron
diff --git a/docker/nova/nova-base/Dockerfile.j2 b/docker/nova/nova-base/Dockerfile.j2
index 702747976..f7ad8f0ad 100644
--- a/docker/nova/nova-base/Dockerfile.j2
+++ b/docker/nova/nova-base/Dockerfile.j2
@@ -7,14 +7,15 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% import "macros.j2" as macros with context %}
-{{ macros.enable_extra_repos(['openvswitch']) }}
{{ macros.configure_user(name='nova', groups='qemu') }}
{% if base_package_type == 'rpm' %}
+{{ macros.enable_extra_repos(['openvswitch']) }}
+
{% set nova_base_packages = [
- 'openvswitch',
- 'python3-openvswitch'
+ 'openvswitch${KOLLA_RPM_OVS_VERSION}',
+ 'python3-openvswitch${KOLLA_RPM_OVS_VERSION}'
] %}
{% if base_arch == 'x86_64' %}
{% set nova_base_packages = nova_base_packages + [
diff --git a/docker/nova/nova-compute-ironic/Dockerfile.j2 b/docker/nova/nova-compute-ironic/Dockerfile.j2
index 56d1f0abd..c849dc18f 100644
--- a/docker/nova/nova-compute-ironic/Dockerfile.j2
+++ b/docker/nova/nova-compute-ironic/Dockerfile.j2
@@ -7,7 +7,11 @@ 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 = [
+ 'genisoimage',
+ 'nvme-cli',
+ 'xorriso'
+] %}
{{ macros.install_packages(nova_compute_ironic_packages | customizable("packages")) }}
diff --git a/docker/nova/nova-compute/Dockerfile.j2 b/docker/nova/nova-compute/Dockerfile.j2
index 1378b21e6..8c31461f3 100644
--- a/docker/nova/nova-compute/Dockerfile.j2
+++ b/docker/nova/nova-compute/Dockerfile.j2
@@ -7,10 +7,10 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% import "macros.j2" as macros with context %}
-{{ macros.enable_extra_repos(['ceph', 'epel']) }}
-
{% if base_package_type == 'rpm' %}
+{{ macros.enable_extra_repos(['ceph', 'epel']) }}
+
{% set nova_compute_packages = [
'ceph-common',
'cyrus-sasl-md5',
diff --git a/docker/nova/nova-libvirt/Dockerfile.j2 b/docker/nova/nova-libvirt/Dockerfile.j2
index f738fdc35..88e4a52d6 100644
--- a/docker/nova/nova-libvirt/Dockerfile.j2
+++ b/docker/nova/nova-libvirt/Dockerfile.j2
@@ -9,10 +9,10 @@ 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_package_type == 'rpm' %}
+{{ macros.enable_extra_repos(['ceph', 'crb', 'epel', 'openvswitch']) }}
+
{% set nova_libvirt_packages = [
'ceph-common',
'cyrus-sasl-md5',
@@ -23,7 +23,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
'libvirt-daemon-config-nwfilter',
'libvirt-daemon-driver-nwfilter',
'libvirt-daemon-driver-nodedev',
- 'openvswitch',
+ 'openvswitch${KOLLA_RPM_OVS_VERSION}',
'qemu-img',
'qemu-kvm',
'swtpm',
@@ -54,6 +54,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
'python3-rbd',
'qemu-block-extra',
'qemu-system',
+ 'qemu-system-modules-spice',
'qemu-utils',
'sasl2-bin',
'swtpm',
diff --git a/docker/nova/nova-ssh/Dockerfile.j2 b/docker/nova/nova-ssh/Dockerfile.j2
index c1ee000cb..a17df28cb 100644
--- a/docker/nova/nova-ssh/Dockerfile.j2
+++ b/docker/nova/nova-ssh/Dockerfile.j2
@@ -10,7 +10,8 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{{ macros.configure_user(name='nova', shell='/bin/bash') }}
{% set nova_ssh_packages = [
- 'openssh-server'
+ 'openssh-server',
+ 'rsync'
] %}
{% if base_package_type == 'deb' %}
diff --git a/docker/nova/nova-ssh/extend_start.sh b/docker/nova/nova-ssh/extend_start.sh
index 6d52952a7..b80114c0a 100644
--- a/docker/nova/nova-ssh/extend_start.sh
+++ b/docker/nova/nova-ssh/extend_start.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-SSH_HOST_KEY_TYPES=( "rsa" "dsa" "ecdsa" "ed25519" )
+SSH_HOST_KEY_TYPES=( "rsa" "ecdsa" "ed25519" )
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 e036a4af7..d64ecde2e 100644
--- a/docker/octavia/octavia-base/Dockerfile.j2
+++ b/docker/octavia/octavia-base/Dockerfile.j2
@@ -7,12 +7,23 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% import "macros.j2" as macros with context %}
-{{ macros.enable_extra_repos(['openvswitch']) }}
{{ macros.configure_user(name='octavia') }}
-{% set octavia_base_packages = [
- 'python3-openvswitch'
-] %}
+{% if base_package_type == 'rpm' %}
+
+{{ macros.enable_extra_repos(['openvswitch']) }}
+
+ {% set octavia_base_packages = [
+ 'python3-openvswitch${KOLLA_RPM_OVS_VERSION}'
+ ] %}
+
+{% elif base_package_type == 'deb' %}
+
+ {% set octavia_base_packages = [
+ 'python3-openvswitch'
+ ] %}
+
+{% endif %}
{{ macros.install_packages(octavia_base_packages | customizable("packages")) }}
diff --git a/docker/openstack-base/Dockerfile.j2 b/docker/openstack-base/Dockerfile.j2
index 8cb8a97b7..1b5d0ae89 100644
--- a/docker/openstack-base/Dockerfile.j2
+++ b/docker/openstack-base/Dockerfile.j2
@@ -7,9 +7,10 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% import "macros.j2" as macros with context %}
-{{ macros.enable_extra_repos(['crb']) }}
-
{% if base_package_type == 'rpm' %}
+
+{{ macros.enable_extra_repos(['crb', 'epel']) }}
+
{% set openstack_base_packages = [
'gcc',
'gcc-c++',
@@ -24,9 +25,10 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
'mod_ssl',
'openssl',
'openssl-devel',
- 'pcre-devel',
+ 'pcre2-devel',
'postgresql',
'postgresql-devel',
+ 'postgresql-server-devel',
'python3-devel',
'python3-mod_wsgi',
'sqlite-devel',
@@ -42,7 +44,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
'git',
'libapache2-mod-wsgi-py3',
'libffi-dev',
- 'libpcre3-dev',
+ 'libpcre2-dev',
'libpq-dev',
'libssl-dev',
'libxml2-dev',
@@ -172,10 +174,9 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
'simplegeneric',
'simplejson',
'six',
- 'sqlalchemy-migrate',
'sqlparse',
'stevedore',
- 'tooz[consul,etcd,etcd3gw,zake,redis,postgresql,mysql,zookeeper,memcached,ipc]',
+ 'tooz[consul,etcd,etcd3gw,redis,postgresql,mysql,zookeeper,memcached,ipc]',
'unicodecsv',
'uwsgi',
'warlock',
diff --git a/docker/openvswitch/openvswitch-base/Dockerfile.j2 b/docker/openvswitch/openvswitch-base/Dockerfile.j2
index 7f79cb818..4400d4f1e 100644
--- a/docker/openvswitch/openvswitch-base/Dockerfile.j2
+++ b/docker/openvswitch/openvswitch-base/Dockerfile.j2
@@ -7,23 +7,22 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% import "macros.j2" as macros with context %}
-{{ macros.enable_extra_repos(['openvswitch']) }}
-
{% block ovs_install %}
{% if base_package_type == 'rpm' %}
+
+{{ macros.enable_extra_repos(['openvswitch']) }}
+
{% set openvswitch_base_packages = [
'libibverbs',
- 'openvswitch',
- 'python3-netifaces',
- 'python3-openvswitch',
+ 'openvswitch${KOLLA_RPM_OVS_VERSION}',
+ 'python3-openvswitch${KOLLA_RPM_OVS_VERSION}',
'tcpdump'
] %}
{% elif base_package_type == 'deb' %}
{% set openvswitch_base_packages = [
'openvswitch-switch',
'python3-openvswitch',
- 'python3-netifaces',
'tcpdump'
] %}
{% endif %}
diff --git a/docker/ovn/ovn-base/Dockerfile.j2 b/docker/ovn/ovn-base/Dockerfile.j2
index 83e1c8dc8..0871383d3 100644
--- a/docker/ovn/ovn-base/Dockerfile.j2
+++ b/docker/ovn/ovn-base/Dockerfile.j2
@@ -9,7 +9,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% if base_package_type == 'rpm' %}
{% set ovn_base_packages = [
- 'openvswitch-ovn-common',
+ 'ovn${KOLLA_RPM_OVN_VERSION}',
] %}
{% elif base_package_type == 'deb' %}
diff --git a/docker/ovn/ovn-base/extend_start.sh b/docker/ovn/ovn-base/extend_start.sh
index 413ce1fd0..eae4ab9e1 100644
--- a/docker/ovn/ovn-base/extend_start.sh
+++ b/docker/ovn/ovn-base/extend_start.sh
@@ -9,3 +9,5 @@ fi
if [[ $(stat -c %a /var/log/kolla/openvswitch) != "755" ]]; then
chmod 755 /var/log/kolla/openvswitch
fi
+
+. /usr/local/bin/kolla_ovn_extend_start
diff --git a/docker/ovn/ovn-controller/Dockerfile.j2 b/docker/ovn/ovn-controller/Dockerfile.j2
index 4674d9f73..8dfcb163d 100644
--- a/docker/ovn/ovn-controller/Dockerfile.j2
+++ b/docker/ovn/ovn-controller/Dockerfile.j2
@@ -9,7 +9,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% if base_package_type == 'rpm' %}
{% set ovn_controller_packages = [
- 'openvswitch-ovn-host'
+ 'ovn${KOLLA_RPM_OVN_VERSION}-host'
] %}
{% elif base_package_type == 'deb' %}
@@ -20,6 +20,9 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% endif %}
{{ macros.install_packages(ovn_controller_packages | customizable("packages")) }}
+COPY extend_start.sh /usr/local/bin/kolla_ovn_extend_start
+RUN chmod 644 /usr/local/bin/kolla_ovn_extend_start
+
{{ macros.kolla_patch_sources() }}
{% block ovn_controller_footer %}{% endblock %}
diff --git a/docker/ovn/ovn-controller/extend_start.sh b/docker/ovn/ovn-controller/extend_start.sh
new file mode 100644
index 000000000..8080ea7c8
--- /dev/null
+++ b/docker/ovn/ovn-controller/extend_start.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+if [[ ! -r "/var/log/kolla/openvswitch/ovn-controller.log" ]]; then
+ touch /var/log/kolla/openvswitch/ovn-controller.log
+ chown openvswitch:openvswitch /var/log/kolla/openvswitch/ovn-controller.log
+fi
diff --git a/docker/ovn/ovn-nb-db-server/Dockerfile.j2 b/docker/ovn/ovn-nb-db-server/Dockerfile.j2
index dc8e3e53d..05d99d437 100644
--- a/docker/ovn/ovn-nb-db-server/Dockerfile.j2
+++ b/docker/ovn/ovn-nb-db-server/Dockerfile.j2
@@ -9,7 +9,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% if base_package_type == 'rpm' %}
{% set ovn_nb_db_server_packages = [
- 'openvswitch-ovn-central',
+ 'ovn${KOLLA_RPM_OVN_VERSION}-central',
] %}
{% elif base_package_type == 'deb' %}
@@ -22,6 +22,8 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
COPY start_nb_db_server.sh /usr/local/bin/start-nb-db-server
RUN chmod 755 /usr/local/bin/start-nb-db-server
+COPY extend_start.sh /usr/local/bin/kolla_ovn_extend_start
+RUN chmod 644 /usr/local/bin/kolla_ovn_extend_start
{{ macros.kolla_patch_sources() }}
diff --git a/docker/ovn/ovn-nb-db-server/extend_start.sh b/docker/ovn/ovn-nb-db-server/extend_start.sh
new file mode 100644
index 000000000..4c0e742f5
--- /dev/null
+++ b/docker/ovn/ovn-nb-db-server/extend_start.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+if [[ ! -r "/var/log/kolla/openvswitch/ovn-nb-db.log" ]]; then
+ touch /var/log/kolla/openvswitch/ovn-nb-db.log
+ chown openvswitch:openvswitch /var/log/kolla/openvswitch/ovn-nb-db.log
+fi
diff --git a/docker/ovn/ovn-northd/Dockerfile.j2 b/docker/ovn/ovn-northd/Dockerfile.j2
index 744495a82..2d1a873dc 100644
--- a/docker/ovn/ovn-northd/Dockerfile.j2
+++ b/docker/ovn/ovn-northd/Dockerfile.j2
@@ -9,7 +9,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% if base_package_type == 'rpm' %}
{% set ovn_northd_packages = [
- 'openvswitch-ovn-central',
+ 'ovn${KOLLA_RPM_OVN_VERSION}-central',
] %}
{% elif base_package_type == 'deb' %}
@@ -20,6 +20,9 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% endif %}
{{ macros.install_packages(ovn_northd_packages | customizable("packages")) }}
+COPY extend_start.sh /usr/local/bin/kolla_ovn_extend_start
+RUN chmod 644 /usr/local/bin/kolla_ovn_extend_start
+
{{ macros.kolla_patch_sources() }}
{% block ovn_northd_footer %}{% endblock %}
diff --git a/docker/ovn/ovn-northd/extend_start.sh b/docker/ovn/ovn-northd/extend_start.sh
new file mode 100644
index 000000000..c832c5383
--- /dev/null
+++ b/docker/ovn/ovn-northd/extend_start.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+if [[ ! -r "/var/log/kolla/openvswitch/ovn-northd.log" ]]; then
+ touch /var/log/kolla/openvswitch/ovn-northd.log
+ chown openvswitch:openvswitch /var/log/kolla/openvswitch/ovn-northd.log
+fi
diff --git a/docker/ovn/ovn-sb-db-relay/Dockerfile.j2 b/docker/ovn/ovn-sb-db-relay/Dockerfile.j2
index 4beebaa4f..d95c7e34c 100644
--- a/docker/ovn/ovn-sb-db-relay/Dockerfile.j2
+++ b/docker/ovn/ovn-sb-db-relay/Dockerfile.j2
@@ -11,5 +11,8 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
RUN curl -o /usr/share/ovn/scripts/ovn-ctl https://raw.githubusercontent.com/ovn-org/ovn/refs/heads/main/utilities/ovn-ctl
{% endblock %}
+COPY extend_start.sh /usr/local/bin/kolla_ovn_extend_start
+RUN chmod 644 /usr/local/bin/kolla_ovn_extend_start
+
{% block ovn_sb_db_relay_footer %}{% endblock %}
{% block footer %}{% endblock %}
diff --git a/docker/ovn/ovn-sb-db-relay/extend_start.sh b/docker/ovn/ovn-sb-db-relay/extend_start.sh
new file mode 100644
index 000000000..04b6c5357
--- /dev/null
+++ b/docker/ovn/ovn-sb-db-relay/extend_start.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+if [[ ! -r "/var/log/kolla/openvswitch/ovn-sb-relay-${RELAY_ID}.log" ]]; then
+ touch /var/log/kolla/openvswitch/ovn-sb-relay-${RELAY_ID}.log
+ chown openvswitch:openvswitch /var/log/kolla/openvswitch/ovn-sb-relay-${RELAY_ID}.log
+fi
diff --git a/docker/ovn/ovn-sb-db-server/Dockerfile.j2 b/docker/ovn/ovn-sb-db-server/Dockerfile.j2
index 2e1da4eb8..96d27ce1f 100644
--- a/docker/ovn/ovn-sb-db-server/Dockerfile.j2
+++ b/docker/ovn/ovn-sb-db-server/Dockerfile.j2
@@ -9,7 +9,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% if base_package_type == 'rpm' %}
{% set ovn_sb_db_server_packages = [
- 'openvswitch-ovn-central',
+ 'ovn${KOLLA_RPM_OVN_VERSION}-central',
] %}
{% elif base_package_type == 'deb' %}
@@ -22,6 +22,8 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
COPY start_sb_db_server.sh /usr/local/bin/start-sb-db-server
RUN chmod 755 /usr/local/bin/start-sb-db-server
+COPY extend_start.sh /usr/local/bin/kolla_ovn_extend_start
+RUN chmod 644 /usr/local/bin/kolla_ovn_extend_start
{{ macros.kolla_patch_sources() }}
diff --git a/docker/ovn/ovn-sb-db-server/extend_start.sh b/docker/ovn/ovn-sb-db-server/extend_start.sh
new file mode 100644
index 000000000..07bcd1b45
--- /dev/null
+++ b/docker/ovn/ovn-sb-db-server/extend_start.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+if [[ ! -r "/var/log/kolla/openvswitch/ovn-sb-db.log" ]]; then
+ touch /var/log/kolla/openvswitch/ovn-sb-db.log
+ chown openvswitch:openvswitch /var/log/kolla/openvswitch/ovn-sb-db.log
+fi
diff --git a/docker/prometheus/prometheus-ovn-exporter/Dockerfile.j2 b/docker/prometheus/prometheus-ovn-exporter/Dockerfile.j2
deleted file mode 100644
index f7c9c6041..000000000
--- a/docker/prometheus/prometheus-ovn-exporter/Dockerfile.j2
+++ /dev/null
@@ -1,22 +0,0 @@
-FROM {{ namespace }}/{{ image_prefix }}prometheus-base:{{ tag }}
-{% block labels %}
-LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
-{% endblock %}
-
-{% block prometheus_ovn_exporter_header %}{% endblock %}
-
-{% import "macros.j2" as macros with context %}
-
-{% block prometheus_ovn_exporter_install %}
-
-ADD prometheus-ovn-exporter-archive /prometheus-ovn-exporter-source
-
-RUN cp /prometheus-ovn-exporter-source/* /opt/
-{% endblock %}
-
-{{ macros.kolla_patch_sources() }}
-
-{% block prometheus_ovn_exporter_footer %}{% endblock %}
-{% block footer %}{% endblock %}
-
-USER prometheus
diff --git a/docker/prometheus/prometheus-valkey-exporter/Dockerfile.j2 b/docker/prometheus/prometheus-valkey-exporter/Dockerfile.j2
new file mode 100644
index 000000000..7f38bae19
--- /dev/null
+++ b/docker/prometheus/prometheus-valkey-exporter/Dockerfile.j2
@@ -0,0 +1,25 @@
+FROM {{ namespace }}/{{ image_prefix }}prometheus-base:{{ tag }}
+{% block labels %}
+LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
+{% endblock %}
+
+{% import "macros.j2" as macros with context %}
+
+{% block prometheus_valkey_exporter_header %}{% endblock %}
+
+{{ macros.install_packages(prometheus_valkey_exporter_packages | customizable("packages")) }}
+
+{% block prometheus_valkey_exporter_install %}
+ADD prometheus-valkey-exporter-archive /prometheus-valkey-exporter-source
+
+RUN ln -s /prometheus-valkey-exporter-source/* prometheus-valkey-exporter \
+ && cp /prometheus-valkey-exporter/redis_exporter /opt/valkey-exporter
+
+{% endblock %}
+
+{{ macros.kolla_patch_sources() }}
+
+{% block prometheus_valkey_exporter_footer %}{% endblock %}
+{% block footer %}{% endblock %}
+
+USER prometheus
diff --git a/docker/rabbitmq/Dockerfile.j2 b/docker/rabbitmq/Dockerfile.j2
index 3ff00eef7..36feb9c25 100644
--- a/docker/rabbitmq/Dockerfile.j2
+++ b/docker/rabbitmq/Dockerfile.j2
@@ -9,7 +9,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{{ macros.configure_user(name='rabbitmq') }}
-{{ macros.enable_extra_repos(['crb', 'erlang', 'rabbitmq']) }}
+{{ macros.enable_extra_repos(['erlang', 'rabbitmq']) }}
{% block rabbitmq_apt_preferences %}
{% if base_package_type == 'deb' %}
@@ -20,9 +20,11 @@ COPY apt_preferences_rabbitmq.{{ base_distro }} /etc/apt/preferences.d/rabbitmq
{% block rabbitmq_install %}
{% if base_package_type == 'rpm' %}
+{{ macros.enable_extra_repos(['crb']) }}
+
{% set rabbitmq_packages = [
'erlang-27.*',
- 'rabbitmq-server-4.1.*'
+ 'rabbitmq-server-4.2.*'
] %}
{% elif base_package_type == 'deb' %}
diff --git a/docker/rabbitmq/apt_preferences_rabbitmq.debian b/docker/rabbitmq/apt_preferences_rabbitmq.debian
index 0c254e0ac..cc6404b3e 100644
--- a/docker/rabbitmq/apt_preferences_rabbitmq.debian
+++ b/docker/rabbitmq/apt_preferences_rabbitmq.debian
@@ -1,7 +1,7 @@
Package: rabbitmq-server
-Pin: version 4.1.*
+Pin: version 4.2.*
Pin-Priority: 1000
-Package: erlang
-Pin: version 27.*
+Package: erlang*
+Pin: version 1:27.*
Pin-Priority: 1000
diff --git a/docker/rabbitmq/apt_preferences_rabbitmq.ubuntu b/docker/rabbitmq/apt_preferences_rabbitmq.ubuntu
index 0c254e0ac..cc6404b3e 100644
--- a/docker/rabbitmq/apt_preferences_rabbitmq.ubuntu
+++ b/docker/rabbitmq/apt_preferences_rabbitmq.ubuntu
@@ -1,7 +1,7 @@
Package: rabbitmq-server
-Pin: version 4.1.*
+Pin: version 4.2.*
Pin-Priority: 1000
-Package: erlang
-Pin: version 27.*
+Package: erlang*
+Pin: version 1:27.*
Pin-Priority: 1000
diff --git a/docker/rabbitmq/healthcheck_rabbitmq b/docker/rabbitmq/healthcheck_rabbitmq
index 529362bac..277ab098c 100644
--- a/docker/rabbitmq/healthcheck_rabbitmq
+++ b/docker/rabbitmq/healthcheck_rabbitmq
@@ -2,9 +2,7 @@
set -e
-rabbitmq-diagnostics -t 5 -q ping || exit 1
-rabbitmq-diagnostics -t 5 -q status || exit 1
-rabbitmq-diagnostics -t 5 -q check_running || exit 1
-rabbitmq-diagnostics -t 5 -q check_local_alarms || exit 1
-rabbitmq-diagnostics -t 5 -q check_port_connectivity || exit 1
-rabbitmq-diagnostics -t 5 -q check_virtual_hosts || exit 1
+for check in ping status check_running check_local_alarms check_port_connectivity check_virtual_hosts; do
+ echo "Running rabbitmq-diagnostics $check"
+ rabbitmq-diagnostics -t 5 -q $check || (echo "ERROR: $check failed" && exit 1)
+done
diff --git a/docker/redis/redis-base/extend_start.sh b/docker/redis/redis-base/extend_start.sh
deleted file mode 100644
index f5f12ac70..000000000
--- a/docker/redis/redis-base/extend_start.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/bash
-
-if [[ ! -d "/var/log/kolla/redis" ]]; then
- mkdir -p /var/log/kolla/redis
-fi
-
-if [[ $(stat -c %a /var/log/kolla/redis) != "755" ]]; then
- chmod 755 /var/log/kolla/redis
-fi
diff --git a/docker/redis/redis/Dockerfile.j2 b/docker/redis/redis/Dockerfile.j2
deleted file mode 100644
index 7e5ce923b..000000000
--- a/docker/redis/redis/Dockerfile.j2
+++ /dev/null
@@ -1,22 +0,0 @@
-FROM {{ namespace }}/{{ image_prefix }}redis-base:{{ tag }}
-{% block labels %}
-LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
-{% endblock %}
-
-{% block redis_header %}{% endblock %}
-
-{% import "macros.j2" as macros with context %}
-
-{% if base_package_type == 'rpm' %}
- {% set redis_packages = ['redis'] %}
-{% elif base_package_type == 'deb' %}
- {% set redis_packages = ['redis-server'] %}
-{% endif %}
-{{ macros.install_packages(redis_packages | customizable("packages")) }}
-
-{{ macros.kolla_patch_sources() }}
-
-{% block redis_footer %}{% endblock %}
-{% block footer %}{% endblock %}
-
-USER redis
diff --git a/docker/skyline/skyline-apiserver/Dockerfile.j2 b/docker/skyline/skyline-apiserver/Dockerfile.j2
index a34178a85..00c871165 100644
--- a/docker/skyline/skyline-apiserver/Dockerfile.j2
+++ b/docker/skyline/skyline-apiserver/Dockerfile.j2
@@ -16,8 +16,6 @@ ADD skyline-apiserver-archive /skyline-apiserver-source
COPY extend_start.sh /usr/local/bin/kolla_skyline_extend_start
RUN ln -s skyline-apiserver-source/* skyline-apiserver \
-{# TODO: Remove when https://review.opendev.org/c/openstack/skyline-apiserver/+/935604 is merged #}
- && {{ macros.upper_constraints_remove("aiosqlite") }} \
&& {{ macros.install_pip(skyline_apiserver_pip_packages | customizable("pip_packages")) }} \
&& chmod 644 /usr/local/bin/kolla_skyline_extend_start
diff --git a/docker/tacker/tacker-base/Dockerfile.j2 b/docker/tacker/tacker-base/Dockerfile.j2
index 51459eae0..5f66d744a 100644
--- a/docker/tacker/tacker-base/Dockerfile.j2
+++ b/docker/tacker/tacker-base/Dockerfile.j2
@@ -7,9 +7,14 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% import "macros.j2" as macros with context %}
-{{ macros.enable_extra_repos(['openvswitch']) }}
{{ macros.configure_user(name='tacker') }}
+{% if base_package_type == 'rpm' %}
+
+{{ macros.enable_extra_repos(['openvswitch']) }}
+
+{% endif %}
+
ADD tacker-base-archive /tacker-base-source
ADD plugins-archive /
diff --git a/docker/telegraf/Dockerfile.j2 b/docker/telegraf/Dockerfile.j2
deleted file mode 100644
index 20764b127..000000000
--- a/docker/telegraf/Dockerfile.j2
+++ /dev/null
@@ -1,44 +0,0 @@
-FROM {{ namespace }}/{{ image_prefix }}base:{{ tag }}
-{% block labels %}
-LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
-{% endblock %}
-
-{% block telegraf_header %}{% endblock %}
-
-{% import "macros.j2" as macros with context %}
-
-{{ macros.configure_user(name='telegraf', homedir='/etc/telegraf') }}
-
-{{ macros.enable_extra_repos(['influxdb', 'opstools']) }}
-
-{% set telegraf_packages = [
- 'chrony',
- 'net-tools',
- 'telegraf'
-] %}
-
-{% if base_package_type == 'rpm' %}
- {% set telegraf_packages = telegraf_packages + [
- 'collectd',
- ] %}
-{% elif base_package_type == 'deb' %}
- {% set telegraf_packages = telegraf_packages + [
- 'collectd-core',
- ] %}
-{% endif %}
-
-{{ macros.install_packages(telegraf_packages | customizable("packages")) }}
-
-COPY telegraf_sudoers /etc/sudoers.d/kolla_telegraf_sudoers
-COPY extend_start.sh /usr/local/bin/kolla_extend_start
-
-RUN chmod 750 /etc/sudoers.d \
- && chmod 440 /etc/sudoers.d/kolla_telegraf_sudoers \
- && chmod 644 /usr/local/bin/kolla_extend_start
-
-{{ macros.kolla_patch_sources() }}
-
-{% block telegraf_footer %}{% endblock %}
-{% block footer %}{% endblock %}
-
-USER telegraf
diff --git a/docker/telegraf/extend_start.sh b/docker/telegraf/extend_start.sh
deleted file mode 100644
index 2830da1cb..000000000
--- a/docker/telegraf/extend_start.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-
-TELEGRAF_LOG_DIR="/var/log/kolla/telegraf"
-
-if [[ ! -d "${TELEGRAF_LOG_DIR}" ]]; then
- mkdir -p ${TELEGRAF_LOG_DIR}
-fi
-if [[ $(stat -c %a ${TELEGRAF_LOG_DIR}) != "755" ]]; then
- chmod 755 ${TELEGRAF_LOG_DIR}
-fi
diff --git a/docker/telegraf/telegraf_sudoers b/docker/telegraf/telegraf_sudoers
deleted file mode 100644
index d6e1e092f..000000000
--- a/docker/telegraf/telegraf_sudoers
+++ /dev/null
@@ -1 +0,0 @@
-%kolla ALL=(root) NOPASSWD: /usr/bin/chown -R telegraf\: /var/lib/telegraf, /bin/chown -R telegraf\: /var/lib/telegraf
diff --git a/docker/redis/redis-base/Dockerfile.j2 b/docker/valkey/valkey-base/Dockerfile.j2
index 89dccd258..7d4e6da9a 100644
--- a/docker/redis/redis-base/Dockerfile.j2
+++ b/docker/valkey/valkey-base/Dockerfile.j2
@@ -3,15 +3,15 @@ FROM {{ namespace }}/{{ image_prefix }}base:{{ tag }}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
{% endblock %}
-{% block redis_base_header %}{% endblock %}
+{% block valkey_base_header %}{% endblock %}
{% import "macros.j2" as macros with context %}
-{{ macros.configure_user(name='redis', homedir='/run/redis') }}
+{{ 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 redis_base_footer %}{% endblock %}
+{% 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 000000000..3a3a321d4
--- /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/redis/redis-sentinel/Dockerfile.j2 b/docker/valkey/valkey-sentinel/Dockerfile.j2
index 83fc60df0..9cdfac282 100644
--- a/docker/redis/redis-sentinel/Dockerfile.j2
+++ b/docker/valkey/valkey-sentinel/Dockerfile.j2
@@ -1,25 +1,26 @@
-FROM {{ namespace }}/{{ image_prefix }}redis-base:{{ tag }}
+FROM {{ namespace }}/{{ image_prefix }}valkey-base:{{ tag }}
{% block labels %}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
{% endblock %}
-{% block redis_sentinel_header %}{% endblock %}
+{% block valkey_sentinel_header %}{% endblock %}
{% import "macros.j2" as macros with context %}
{% if base_package_type == 'rpm' %}
- {% set redis_sentinel_packages = ['redis'] %}
+{{ macros.enable_extra_repos(['epel']) }}
+ {% set valkey_sentinel_packages = ['valkey'] %}
{% elif base_package_type == 'deb' %}
- {% set redis_sentinel_packages = ['redis-sentinel'] %}
+ {% set valkey_sentinel_packages = ['valkey-sentinel'] %}
{% endif %}
-{{ macros.install_packages(redis_sentinel_packages | customizable("packages")) }}
+{{ 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 redis_sentinel_footer %}{% endblock %}
+{% block valkey_sentinel_footer %}{% endblock %}
{% block footer %}{% endblock %}
-USER redis
+USER valkey
diff --git a/docker/redis/redis-sentinel/extend_start.sh b/docker/valkey/valkey-sentinel/extend_start.sh
index 9044f3990..e6af42ef6 100644
--- a/docker/redis/redis-sentinel/extend_start.sh
+++ b/docker/valkey/valkey-sentinel/extend_start.sh
@@ -1,21 +1,21 @@
#!/bin/bash
-if [[ ! -d "/var/log/kolla/redis" ]]; then
- mkdir -p /var/log/kolla/redis
+if [[ ! -d "/var/log/kolla/valkey" ]]; then
+ mkdir -p /var/log/kolla/valkey
fi
-if [[ $(stat -c %a /var/log/kolla/redis) != "755" ]]; then
- chmod 755 /var/log/kolla/redis
+if [[ $(stat -c %a /var/log/kolla/valkey) != "755" ]]; then
+ chmod 755 /var/log/kolla/valkey
fi
-# The CONFIG REWRITE command rewrites the redis.conf
+# 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://redis.io/commands/config-rewrite/
+# https://valkey.io/commands/config-rewrite/
#
# Because of above behaviour it's needed to
# hack kolla's CMD.
@@ -24,9 +24,9 @@ fi
# /usr/local/bin/kolla_set_configs --check
# is always reporting changed.
#
-# Therefore redis-sentinel is always restarted
+# Therefore valkey-sentinel is always restarted
# even if configuration is not changed from
# kolla-ansible side.
-if [ ! -z "${REDIS_CONF}" ] && [ ! -z ${REDIS_GEN_CONF} ]; then
- cp ${REDIS_CONF} ${REDIS_GEN_CONF}
+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 000000000..9d187ffbe
--- /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']) }}
+{% endif %}
+
+{% set valkey_server_packages = ['valkey'] %}
+
+{{ 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/docker/venus/venus-api/Dockerfile.j2 b/docker/venus/venus-api/Dockerfile.j2
deleted file mode 100644
index 35ac69dca..000000000
--- a/docker/venus/venus-api/Dockerfile.j2
+++ /dev/null
@@ -1,18 +0,0 @@
-FROM {{ namespace }}/{{ image_prefix }}venus-base:{{ tag }}
-{% block labels %}
-LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
-{% endblock %}
-
-{% block venus_api_header %}{% endblock %}
-
-{% import "macros.j2" as macros with context %}
-
-COPY extend_start.sh /usr/local/bin/kolla_venus_extend_start
-RUN chmod 644 /usr/local/bin/kolla_venus_extend_start
-
-{{ macros.kolla_patch_sources() }}
-
-{% block venus_api_footer %}{% endblock %}
-{% block footer %}{% endblock %}
-
-USER venus
diff --git a/docker/venus/venus-api/extend_start.sh b/docker/venus/venus-api/extend_start.sh
deleted file mode 100644
index bbe03bbbc..000000000
--- a/docker/venus/venus-api/extend_start.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/bash
-
-# Bootstrap and exit if KOLLA_BOOTSTRAP variable is set. This catches all cases
-# of the KOLLA_BOOTSTRAP variable being set, including empty.
-if [[ "${!KOLLA_BOOTSTRAP[@]}" ]]; then
- venus_manager db sync
- exit 0
-fi
diff --git a/docker/venus/venus-base/Dockerfile.j2 b/docker/venus/venus-base/Dockerfile.j2
deleted file mode 100644
index 729ae6bd4..000000000
--- a/docker/venus/venus-base/Dockerfile.j2
+++ /dev/null
@@ -1,29 +0,0 @@
-FROM {{ namespace }}/{{ image_prefix }}openstack-base:{{ tag }}
-{% block labels %}
-LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
-{% endblock %}
-
-{% block venus_base_header %}{% endblock %}
-
-{% import "macros.j2" as macros with context %}
-
-{{ macros.configure_user(name='venus') }}
-
-ADD venus-base-archive /venus-base-source
-
-{% set venus_base_pip_packages = [
- '/venus'
-] %}
-
-COPY extend_start.sh /usr/local/bin/kolla_extend_start
-
-RUN ln -s venus-base-source/* venus \
- && {{ macros.install_pip(venus_base_pip_packages | customizable("pip_packages")) }} \
- && mkdir -p /etc/venus \
- && cp -r /venus/etc/venus/* /etc/venus/ \
- && touch /usr/local/bin/kolla_venus_extend_start \
- && chmod 644 /usr/local/bin/kolla_extend_start /usr/local/bin/kolla_venus_extend_start
-
-{{ macros.kolla_patch_sources() }}
-
-{% block venus_base_footer %}{% endblock %}
diff --git a/docker/venus/venus-base/extend_start.sh b/docker/venus/venus-base/extend_start.sh
deleted file mode 100644
index fa7bbe54b..000000000
--- a/docker/venus/venus-base/extend_start.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-
-if [[ ! -d "/var/log/kolla/venus" ]]; then
- mkdir -p /var/log/kolla/venus
-fi
-if [[ $(stat -c %a /var/log/kolla/venus) != "755" ]]; then
- chmod 755 /var/log/kolla/venus
-fi
-
-. /usr/local/bin/kolla_venus_extend_start
diff --git a/docker/venus/venus-manager/Dockerfile.j2 b/docker/venus/venus-manager/Dockerfile.j2
deleted file mode 100644
index 35575adb6..000000000
--- a/docker/venus/venus-manager/Dockerfile.j2
+++ /dev/null
@@ -1,15 +0,0 @@
-FROM {{ namespace }}/{{ image_prefix }}venus-base:{{ tag }}
-{% block labels %}
-LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
-{% endblock %}
-
-{% block venus_manager_header %}{% endblock %}
-
-{% import "macros.j2" as macros with context %}
-
-{{ macros.kolla_patch_sources() }}
-
-{% block venus_manager_footer %}{% endblock %}
-{% block footer %}{% endblock %}
-
-USER venus
diff --git a/docker/zun/zun-base/Dockerfile.j2 b/docker/zun/zun-base/Dockerfile.j2
index 908720b94..b6eac1907 100644
--- a/docker/zun/zun-base/Dockerfile.j2
+++ b/docker/zun/zun-base/Dockerfile.j2
@@ -7,11 +7,12 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% import "macros.j2" as macros with context %}
-{{ macros.enable_extra_repos(['openvswitch']) }}
{{ macros.configure_user(name='zun') }}
{% if base_package_type == 'rpm' %}
+{{ macros.enable_extra_repos(['openvswitch']) }}
+
{% set zun_base_packages = [
'numactl',
] %}
@@ -37,12 +38,12 @@ ADD zun-base-archive /zun-base-source
COPY zun_sudoers /etc/sudoers.d/kolla_zun_sudoers
COPY extend_start.sh /usr/local/bin/kolla_extend_start
+COPY app.wsgi /var/www/cgi-bin/zun
RUN ln -s zun-base-source/* zun \
&& {{ macros.install_pip(zun_base_pip_packages | customizable("pip_packages")) }} \
&& mkdir -p /etc/zun /var/www/cgi-bin/zun \
&& cp -r /zun/etc/zun/* /etc/zun/ \
- && cp /zun/zun/api/app.wsgi /var/www/cgi-bin/zun \
&& sed -i 's|^exec_dirs.*|exec_dirs=/var/lib/kolla/venv/bin,/sbin,/usr/sbin,/bin,/usr/bin,/usr/local/bin,/usr/local/sbin|g' /etc/zun/rootwrap.conf \
&& chmod 750 /etc/sudoers.d \
&& chmod 640 /etc/sudoers.d/kolla_zun_sudoers \
diff --git a/docker/zun/zun-base/app.wsgi b/docker/zun/zun-base/app.wsgi
new file mode 100644
index 000000000..bd64371de
--- /dev/null
+++ b/docker/zun/zun-base/app.wsgi
@@ -0,0 +1,2 @@
+#!/var/lib/kolla/venv/bin/python
+from zun.wsgi.api import application
diff --git a/docker/zun/zun-cni-daemon/Dockerfile.j2 b/docker/zun/zun-cni-daemon/Dockerfile.j2
index 02cc9b2be..3534f8f3e 100644
--- a/docker/zun/zun-cni-daemon/Dockerfile.j2
+++ b/docker/zun/zun-cni-daemon/Dockerfile.j2
@@ -10,7 +10,7 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% if base_package_type == 'rpm' %}
{% set zun_cni_daemon_packages = [
- 'openvswitch'
+ 'openvswitch${KOLLA_RPM_OVS_VERSION}'
] %}
{% elif base_package_type == 'deb' %}
diff --git a/docker/zun/zun-compute/Dockerfile.j2 b/docker/zun/zun-compute/Dockerfile.j2
index 17f34e0be..e6c778f0b 100644
--- a/docker/zun/zun-compute/Dockerfile.j2
+++ b/docker/zun/zun-compute/Dockerfile.j2
@@ -7,8 +7,12 @@ LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build
{% import "macros.j2" as macros with context %}
+{% if base_package_type == 'rpm' %}
+
{{ macros.enable_extra_repos(['ceph', 'epel']) }}
+{% endif %}
+
{% set zun_compute_packages = [
'ceph-common',
'e2fsprogs',
diff --git a/kolla/common/config.py b/kolla/common/config.py
index 6038a2dbe..d66221af1 100644
--- a/kolla/common/config.py
+++ b/kolla/common/config.py
@@ -25,23 +25,21 @@ BASE_OS_DISTRO = ['centos', 'debian', 'rocky', 'ubuntu']
BASE_ARCH = ['x86_64', 'aarch64']
DEBIAN_ARCH = ['amd64', 'arm64']
DEFAULT_BASE_TAGS = {
- 'centos': {'name': 'quay.io/centos/centos', 'tag': 'stream9'},
- 'debian': {'name': 'debian', 'tag': 'bookworm'},
- 'rocky': {'name': 'quay.io/rockylinux/rockylinux', 'tag': '9'},
+ 'centos': {'name': 'quay.io/centos/centos', 'tag': 'stream10'},
+ 'debian': {'name': 'debian', 'tag': 'trixie'},
+ 'rocky': {'name': 'quay.io/rockylinux/rockylinux', 'tag': '10'},
'ubuntu': {'name': 'ubuntu', 'tag': '24.04'},
}
# NOTE(hrw): has to match PRETTY_NAME in /etc/os-release
DISTRO_PRETTY_NAME = {
- 'centos': 'CentOS Stream 9',
- 'debian': 'Debian GNU/Linux 12 (bookworm)',
- 'rocky': 'Rocky Linux 9.* (Blue Onyx)',
+ 'centos': 'CentOS Stream 10',
+ 'debian': 'Debian GNU/Linux 13 (trixie)',
+ 'rocky': 'Rocky Linux 10.* (Red Quartz)',
'ubuntu': 'Ubuntu 24.04.* LTS',
}
-OPENSTACK_RELEASE = '2025.1'
-# This is noarch repository so we will use it on all architectures
-DELOREAN_DEPS = "https://trunk.rdoproject.org/centos9-master/" \
- "delorean-deps.repo"
+OPENSTACK_RELEASE = '2026.1'
+OPENSTACK_RELEASE_CODENAME = 'Gazpacho'
# TODO(mandre) check for file integrity instead of downloading from an HTTPS
# source
@@ -64,9 +62,8 @@ _PROFILE_OPTS = [
'openvswitch',
'proxysql',
'rabbitmq',
- 'redis',
- 'storm',
'tgtd',
+ 'valkey',
],
help='Infra images'),
cfg.ListOpt('main',
@@ -90,20 +87,16 @@ _PROFILE_OPTS = [
'cloudkitty',
'designate',
'gnocchi',
- 'influxdb',
'ironic',
- 'kafka',
'kuryr',
'magnum',
'manila',
'masakari',
'mistral',
'octavia',
- 'redis',
'tacker',
- 'telegraf',
'trove',
- 'zookeeper',
+ 'valkey',
'zun',
],
help='Aux Images'),
@@ -203,9 +196,7 @@ _CLI_OPTS = [
cfg.MultiOpt('regex', types.String(), positional=True, required=False,
help=('Build only images matching regex and its'
' dependencies')),
- cfg.StrOpt('registry',
- help=('The container image registry host. The default registry'
- ' host is Docker Hub')),
+ cfg.StrOpt('registry', help='The container image registry host'),
cfg.StrOpt('save-dependency',
help=('Path to the file to store the docker image'
' dependency in Graphviz dot format')),
@@ -246,6 +237,9 @@ _CLI_OPTS = [
cfg.StrOpt('openstack-release', default=OPENSTACK_RELEASE,
help='OpenStack release for building kolla source images and '
'kolla-toolbox image'),
+ cfg.StrOpt('openstack-release-codename',
+ default=OPENSTACK_RELEASE_CODENAME,
+ help='OpenStack release codename for Debian OpenStack extrepo'),
cfg.StrOpt('openstack-branch',
help='Branch for source images (internal; with a dash; '
'please set openstack-release instead)'),
@@ -283,7 +277,7 @@ _BASE_OPTS = [
help=('Set the package type of the distro. If not set then '
'the packaging type is set to "rpm" if a RHEL based '
'distro and "deb" if a Debian based distro.')),
- cfg.ListOpt('rpm_setup_config', default=[DELOREAN_DEPS],
+ cfg.ListOpt('rpm_setup_config', default=[],
help=('Comma separated list of .rpm or .repo file(s) '
'or URL(s) to install before building containers')),
cfg.StrOpt('apt_sources_list', help=('Path to custom sources.list')),
diff --git a/kolla/common/sources.py b/kolla/common/sources.py
index e05146747..24a0d7851 100644
--- a/kolla/common/sources.py
+++ b/kolla/common/sources.py
@@ -53,12 +53,12 @@ SOURCES = {
'designate-${openstack_branch}.tar.gz')},
'etcd': {
# NOTE(wszumski): Upgrade one minor version at a time:
- # https://etcd.io/docs/v3.4/upgrades/upgrade_3_4/
- 'version': '3.5.16',
+ # https://etcd.io/docs/v3.6/upgrades/upgrade_3_6/
+ 'version': '3.6.5',
'type': 'url',
'sha256': {
- 'amd64': 'b414b27a5ad05f7cb01395c447c85d3227e3fb1c176e51757a283b817f645ccc', # noqa: E501
- 'arm64': '8e68c55e6d72b791a9e98591c755af36f6f55aa9eca63767822cd8a3817fdb23'}, # noqa: E501
+ 'amd64': '66bad39ed920f6fc15fd74adcb8bfd38ba9a6412f8c7852d09eb11670e88cac3', # noqa: E501
+ 'arm64': '7010161787077b07de29b15b76825ceacbbcedcb77fe2e6832f509be102cab6b'}, # noqa: E501
'location': ('https://github.com/etcd-io/etcd/'
'releases/download/v${version}'
'/etcd-v${version}-linux-${debian_arch}.tar.gz')},
@@ -68,7 +68,7 @@ SOURCES = {
'glance-${openstack_branch}.tar.gz')},
'gnocchi-base': {
'type': 'git',
- 'reference': '4.6.4',
+ 'reference': '4.7.0',
'location': ('https://github.com/gnocchixyz/'
'gnocchi.git')},
'heat-base': {
@@ -135,10 +135,6 @@ SOURCES = {
'type': 'url',
'location': ('$tarballs_base/openstack/trove-dashboard/'
'trove-dashboard-${openstack_branch}.tar.gz')},
- 'horizon-plugin-venus-dashboard': {
- 'type': 'url',
- 'location': ('$tarballs_base/openstack/venus-dashboard/'
- 'venus-dashboard-${openstack_branch}.tar.gz')},
'horizon-plugin-watcher-dashboard': {
'type': 'url',
'location': ('$tarballs_base/openstack/watcher-dashboard/'
@@ -151,10 +147,6 @@ SOURCES = {
'type': 'url',
'location': ('$tarballs_base/openstack/ironic/'
'ironic-${openstack_branch}.tar.gz')},
- 'ironic-inspector': {
- 'type': 'url',
- 'location': ('$tarballs_base/openstack/ironic-inspector/'
- 'ironic-inspector-${openstack_branch}.tar.gz')},
'ironic-conductor-plugin-prometheus-exporter': {
'type': 'url',
'location': (
@@ -164,6 +156,10 @@ SOURCES = {
'type': 'url',
'location': ('$tarballs_base/openstack/keystone/'
'keystone-${openstack_branch}.tar.gz')},
+ 'kolla-toolbox': {
+ 'type': 'url',
+ 'location': ('$tarballs_base/openstack/requirements/'
+ 'requirements-${openstack_branch}.tar.gz')},
'kuryr-base': {
'type': 'url',
'location': ('$tarballs_base/openstack/kuryr/'
@@ -173,11 +169,11 @@ SOURCES = {
'location': ('$tarballs_base/openstack/kuryr-libnetwork/'
'kuryr-libnetwork-${openstack_branch}.tar.gz')},
'letsencrypt-lego': {
- 'version': 'v4.20.4',
+ 'version': 'v4.27.0',
'type': 'url',
'sha256': {
- 'amd64': 'fed2cd32fa0042feda44a4a81d73e76f51d692a779f689d3df8082dcadcc73ba', # noqa: E501
- 'arm64': '6bde708d9c8b2e914120772bb6491d7c3dccb7f98746e171ff4c435948f599e1'}, # noqa: E501
+ 'amd64': '898b58bbbca4282d706b4f204593cb94fc2ed13232777236c06dc20259bbcd02', # noqa: E501
+ 'arm64': '2973b412d37e5d652a91bda1a6bf7642491e316bc0f855a614e2c996249014dc'}, # noqa: E501
'location': ('https://github.com/go-acme/lego/'
'releases/download/${version}/'
'lego_${version}_linux_${debian_arch}.tar.gz')},
@@ -186,17 +182,22 @@ SOURCES = {
'location': ('$tarballs_base/openstack/magnum/'
'magnum-${openstack_branch}.tar.gz')},
'magnum-conductor-plugin-helm': {
- 'version': 'v3.16.3',
+ 'version': 'v3.19.0',
'type': 'url',
'sha256': {
- 'amd64': 'f5355c79190951eed23c5432a3b920e071f4c00a64f75e077de0dd4cb7b294ea', # noqa: E501
- 'arm64': '5bd34ed774df6914b323ff84a0a156ea6ff2ba1eaf0113962fa773f3f9def798'}, # noqa: E501
+ 'amd64': 'a7f81ce08007091b86d8bd696eb4d86b8d0f2e1b9f6c714be62f82f96a594496', # noqa: E501
+ 'arm64': '440cf7add0aee27ebc93fada965523c1dc2e0ab340d4348da2215737fc0d76ad'}, # noqa: E501
'location': ('https://get.helm.sh/helm'
'-${version}-linux-${debian_arch}.tar.gz')},
'manila-base': {
'type': 'url',
'location': ('$tarballs_base/openstack/manila/'
'manila-${openstack_branch}.tar.gz')},
+ 'mariadb-server-plugin-mariadb-docker': {
+ # NOTE(seunghun1ee): This repo is needed to get MariaDB healthcheck.sh
+ 'type': 'git',
+ 'reference': 'master',
+ 'location': ('https://github.com/MariaDB/mariadb-docker')},
'masakari-base': {
'type': 'url',
'location': ('$tarballs_base/openstack/masakari/'
@@ -274,66 +275,66 @@ SOURCES = {
'location': ('$tarballs_base/openstack/placement/'
'placement-${openstack_branch}.tar.gz')},
'prometheus-alertmanager': {
- 'version': '0.28.1',
+ 'version': '0.31.1',
'type': 'url',
'sha256': {
- 'amd64': '5ac7ab5e4b8ee5ce4d8fb0988f9cb275efcc3f181b4b408179fafee121693311', # noqa: E501
- 'arm64': 'd8832540e5b9f613d2fd759e31d603173b9c61cc7bb5e3bc7ae2f12038b1ce4f'}, # noqa: E501
+ 'amd64': '35191cbd9d4f8162458b78dd7e93990cccd246044d9a6f788adb1c66ac3ea07b', # noqa: E501
+ 'arm64': '266dda88b64318c27847ef9af4ff450fc178c827550a8039420c5ca8657a4a8b'}, # noqa: E501
'location': ('https://github.com/'
'prometheus/alertmanager/'
'releases/download/v${version}/'
'alertmanager'
'-${version}.linux-${debian_arch}.tar.gz')},
'prometheus-blackbox-exporter': {
- 'version': '0.25.0',
+ 'version': '0.28.0',
'type': 'url',
'sha256': {
- 'amd64': 'c651ced6405c5e0cd292a400f47ae9b34f431f16c7bb098afbcd38f710144640', # noqa: E501
- 'arm64': '46ec5a54a41dc1ea8a8cecee637e117de4807d3b0976482a16596e82e79ac484'}, # noqa: E501
+ 'amd64': 'caf5d242fb1cf6d5cb678f3f799f22703d4fafea26b03dcbbd7e1f1825e06329', # noqa: E501
+ 'arm64': '63312be0983d85e5109710a7dc93df3051157ae581853fa3655d171cc1b2806e'}, # noqa: E501
'location': ('https://github.com/'
'prometheus/blackbox_exporter/'
'releases/download/v${version}/'
'blackbox_exporter'
'-${version}.linux-${debian_arch}.tar.gz')},
'prometheus-cadvisor': {
- 'version': '0.49.2',
+ 'version': '0.56.2',
'type': 'url',
'sha256': {
- 'amd64': 'e8273ebfd18bac96834de3eb74a86bda4c2c6d6e9b4c924bdbf1f93e4e0bc24f', # noqa: E501
- 'arm64': '5b852edb911cfe3df7448b03ccbdc6538b6ff00299527864234127cc54f8080f'}, # noqa: E501
+ 'amd64': 'ad92930f16a2f9da15190675e09eeaceb8fd38637d07a686bb0dd68695f692af', # noqa: E501
+ 'arm64': 'b7a707379496fd7a7b5d2768c5c494427112f534ba5069f889af28ffe6ad11bb'}, # noqa: E501
'location': ('https://github.com/'
'google/cadvisor/'
'releases/download/v${version}/'
'cadvisor'
'-v${version}-linux-${debian_arch}')},
'prometheus-elasticsearch-exporter': {
- 'version': '1.8.0',
+ 'version': '1.10.0',
'type': 'url',
'sha256': {
- 'amd64': 'a03a19d015c45ccc9e35f3a99c6a202b347a521a494cff0e404f9038e426135a', # noqa: E501
- 'arm64': '493ceef304a54e60dfcd0c477d4f0ddad02cfbbb975532f1cb3a169e662f4eea'}, # noqa: E501
+ 'amd64': '1dcf288082a25b2741e98da6c9fc012b6c821696a26c6ac57c20042f24714a74', # noqa: E501
+ 'arm64': '0ff4753a975eb5611c03123d565e8aaa84e4c05f698ce0a2d6c0f437a14bfe34'}, # noqa: E501
'location': ('https://github.com/'
'prometheus-community/elasticsearch_exporter/'
'releases/download/v${version}/'
'elasticsearch_exporter'
'-${version}.linux-${debian_arch}.tar.gz')},
'prometheus-libvirt-exporter': {
- 'version': '1.6.0',
+ 'version': '2.3.1',
'type': 'url',
'sha256': {
- 'amd64': '57f1e71ac5bd87f18a40b9089e9fb513dec44ced58328b3065879b279f967596', # noqa: E501
- 'arm64': '8f474fbb515caf19fda92c839eece761738138c7c676d12d10aa0b8c29b3ef9d'}, # noqa: E501
+ 'amd64': '2e1657d10291059f420a467cbe3363c7353bbce9d5445f0d8d302bd96caaf0a8', # noqa: E501
+ 'arm64': '676dc76766ce4a2eaa8324a3aca8cfe89711536337d3b5b862ddf141fb57a224'}, # noqa: E501
'location': ('https://github.com/'
'inovex/prometheus-libvirt-exporter/'
'releases/download/v${version}/'
'prometheus-libvirt-exporter'
'-${version}.linux-${debian_arch}.tar.gz')},
'prometheus-memcached-exporter': {
- 'version': '0.15.0',
+ 'version': '0.15.5',
'type': 'url',
'sha256': {
- 'amd64': 'd628bd8119b8e69696f61bdf6736490962d5abd52d35207b58a547447aa4e74f', # noqa: E501
- 'arm64': '1ec401184ed207c40e8ab8323f46d116f6ff7654ea4040fe0d786af237c5df8d'}, # noqa: E501
+ 'amd64': '5b82e6579b77fae00683d10d5923329173925a5abd95a799f5489a66136b884c', # noqa: E501
+ 'arm64': '609e6d7484f22fd9e405c0022a9e2d7f86eedef1cfa55772231528271082aeae'}, # noqa: E501
'location': ('https://github.com/'
'prometheus/memcached_exporter/'
'releases/download/v${version}/'
@@ -351,22 +352,22 @@ SOURCES = {
'mtail'
'_${version}_linux_${debian_arch}.tar.gz')},
'prometheus-mysqld-exporter': {
- 'version': '0.16.0',
+ 'version': '0.18.0',
'type': 'url',
'sha256': {
- 'amd64': '32fe0b59ef3f52624a1958aaf6b8855f27c2b492a7026d62a975bbd251be209d', # noqa: E501
- 'arm64': '9ffc6e107bd122e68a95fa5c194bc3fc257104fef6ed720a26a240cd608c777b'}, # noqa: E501
+ 'amd64': '46e8f45654352bdd42d162b2b4a68f00055d45acc168f9c068235b9e3acc39c1', # noqa: E501
+ 'arm64': 'abdb452600ca086b68244aadf8045fbf0b6a48dcb76eed5576995806c176f6ce'}, # noqa: E501
'location': ('https://github.com/'
'prometheus/mysqld_exporter/'
'releases/download/v${version}/'
'mysqld_exporter'
'-${version}.linux-${debian_arch}.tar.gz')},
'prometheus-node-exporter': {
- 'version': '1.8.2',
+ 'version': '1.10.2',
'type': 'url',
'sha256': {
- 'amd64': '6809dd0b3ec45fd6e992c19071d6b5253aed3ead7bf0686885a51d85c6643c66', # noqa: E501
- 'arm64': '627382b9723c642411c33f48861134ebe893e70a63bcc8b3fc0619cd0bfac4be'}, # noqa: E501
+ 'amd64': 'c46e5b6f53948477ff3a19d97c58307394a29fe64a01905646f026ddc32cb65b', # noqa: E501
+ 'arm64': 'de69ec8341c8068b7c8e4cfe3eb85065d24d984a3b33007f575d307d13eb89a6'}, # noqa: E501
'location': ('https://github.com/'
'prometheus/node_exporter/'
'releases/download/v${version}/'
@@ -383,28 +384,28 @@ SOURCES = {
'releases/download/v${version}/'
'openstack-exporter'
'_${version}_linux_${debian_arch}.tar.gz')},
- 'prometheus-ovn-exporter': {
- 'version': '1.0.7',
- 'type': 'url',
- 'sha256': {
- 'amd64': '38d9874ddca1581574a7fa0a28ea53447a57dada37bb1385adeb766e6e819de0', # noqa: E501
- 'arm64': 'e03f6a5ab4cf2855a498697026981273ce3c9ff16bd9bb6c97fd7f1344ec2067'}, # noqa: E501
- 'location': ('https://github.com/'
- 'greenpau/ovn_exporter/'
- 'releases/download/v${version}/'
- 'ovn-exporter'
- '_${version}_linux_${debian_arch}.tar.gz')},
'prometheus-server': {
- 'version': '3.2.1',
+ 'version': '3.5.1',
'type': 'url',
'sha256': {
- 'amd64': 'a622e3007c9109a7f470e1433cbd29bf392596715cf7eea8b81b37fa9d26b7be', # noqa: E501
- 'arm64': 'f2dec3178f1181c1b795b275750d056e71ead13f7fbfe08b76834c4ec20b748e'}, # noqa: E501
+ 'amd64': 'cd6aea0ab214b05838470668dfcee7d01a7d91913509a227b00401ca872423f0', # noqa: E501
+ 'arm64': 'cdb1de33d6d3ed73b4633cebedb70258c29e41bd132d287d387f322a046143d2'}, # noqa: E501
'location': ('https://github.com/'
'prometheus/prometheus/'
'releases/download/v${version}/'
'prometheus'
'-${version}.linux-${debian_arch}.tar.gz')},
+ 'prometheus-valkey-exporter': {
+ 'version': '1.82.0',
+ 'type': 'url',
+ 'sha256': {
+ 'amd64': '2d98dd0888f46e206bf3ad1b7c1784934a3a39cd8774cf47615f4c15594547cd', # noqa: E501
+ 'arm64': '13aaa6acbb145848cb97ed3bab22747e094b3f0ed22df83c8ace593e3c527c95'}, # noqa: E501
+ 'location': ('https://github.com/'
+ 'oliver006/redis_exporter/'
+ 'releases/download/v${version}/'
+ 'redis_exporter'
+ '-v${version}.linux-${debian_arch}.tar.gz')},
'skyline-apiserver': {
'type': 'url',
'location': ('$tarballs_base/openstack/skyline-apiserver/'
@@ -425,10 +426,6 @@ SOURCES = {
'type': 'url',
'location': ('$tarballs_base/openstack/trove/'
'trove-${openstack_branch}.tar.gz')},
- 'venus-base': {
- 'type': 'url',
- 'location': ('$tarballs_base/openstack/venus/'
- 'venus-${openstack_branch}.tar.gz')},
'watcher-base': {
'type': 'url',
'location': ('$tarballs_base/openstack/watcher/'
diff --git a/kolla/common/users.py b/kolla/common/users.py
index 9468396e4..623456071 100644
--- a/kolla/common/users.py
+++ b/kolla/common/users.py
@@ -89,7 +89,7 @@ USERS = {
'uid': 42420,
'gid': 42420,
},
- 'influxdb-user': {
+ 'influxdb-user': { # unused user (influxdb dropped)
'uid': 42421,
'gid': 42421,
},
@@ -185,7 +185,7 @@ USERS = {
'uid': 42447,
'gid': 42447,
},
- 'telegraf-user': {
+ 'telegraf-user': { # unused user (telegraf dropped)
'uid': 42448,
'gid': 42448,
},
@@ -217,11 +217,11 @@ USERS = {
'uid': 42459,
'gid': 42459,
},
- 'redis-user': {
+ 'redis-user': { # unused user (redis dropped)
'uid': 42460,
'gid': 42460,
},
- 'ironic-inspector-user': {
+ 'ironic-inspector-user': { # unused user (ironic-inspector dropped)
'uid': 42461,
'gid': 42461,
},
@@ -326,7 +326,7 @@ USERS = {
'uid': 42488,
'gid': 42488,
},
- 'venus-user': {
+ 'venus-user': { # unused user (venus dropped)
'uid': 42489,
'gid': 42489,
},
@@ -345,5 +345,9 @@ USERS = {
'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/kolla_worker.py b/kolla/image/kolla_worker.py
index 3a78a7f35..680595f86 100644
--- a/kolla/image/kolla_worker.py
+++ b/kolla/image/kolla_worker.py
@@ -11,6 +11,8 @@
# limitations under the License.
import datetime
+import git
+import importlib.metadata
import json
import os
import queue
@@ -42,7 +44,7 @@ PROJECT_ROOT = os.path.abspath(os.path.join(
class Image(object):
def __init__(self, name, canonical_name, path, parent_name='',
status=Status.UNPROCESSED, parent=None,
- source=None, logger=None, engine_client=None):
+ source=None, logger=None, engine_client=None, labels=None):
self.name = name
self.canonical_name = canonical_name
self.path = path
@@ -57,11 +59,12 @@ class Image(object):
self.plugins = []
self.additions = []
self.engine_client = engine_client
+ self.labels = labels or {}
def copy(self):
c = Image(self.name, self.canonical_name, self.path,
logger=self.logger, parent_name=self.parent_name,
- status=self.status, parent=self.parent)
+ status=self.status, parent=self.parent, labels=self.labels)
if self.source:
c.source = self.source.copy()
if self.children:
@@ -106,6 +109,7 @@ class KollaWorker(object):
self.debian_arch = 'amd64'
self.images = list()
self.openstack_release = conf.openstack_release
+ self.openstack_release_codename = conf.openstack_release_codename
self.openstack_branch = conf.openstack_branch
self.openstack_branch_slashed = conf.openstack_branch_slashed
self.docker_healthchecks = conf.docker_healthchecks
@@ -142,6 +146,9 @@ class KollaWorker(object):
self.image_statuses_allowed_to_fail = dict()
self.maintainer = conf.maintainer
self.patches_path = conf.patches_path
+ self.scm_labels = self._get_scm_labels()
+ self.build_created = (datetime.datetime.now(datetime.timezone.utc)
+ .strftime('%Y-%m-%dT%H:%M:%SZ'))
try:
self.engine_client = engine.getEngineClient(self.conf)
@@ -156,6 +163,53 @@ class KollaWorker(object):
LOG.info("Exception caught: {0}".format(e))
sys.exit(1)
+ def _get_scm_labels(self):
+ labels = {}
+
+ # Method 1: Install via PIP (direct_url.json)
+ try:
+ dist = importlib.metadata.distribution('kolla')
+ direct_url_file = [
+ p for p in dist.files if p.name == 'direct_url.json'
+ ]
+
+ if direct_url_file:
+ content = dist.read_text('direct_url.json')
+ if content:
+ data = json.loads(content)
+ if 'url' in data:
+ labels['org.opencontainers.image.source'] = data['url']
+ if 'vcs_info' in data and 'commit_id' in data['vcs_info']:
+ labels['org.opencontainers.image.revision'] = (
+ data['vcs_info']['commit_id'])
+ except Exception as e:
+ LOG.debug(f"Could not retrieve PIP direct_url info: {e}")
+
+ # Method 2: Fallback to Git (if PIP info is local or missing)
+ source = labels.get('org.opencontainers.image.source', '')
+ if not labels.get('org.opencontainers.image.revision') or \
+ source.startswith('file:'):
+ try:
+ repo = git.Repo(PROJECT_ROOT, search_parent_directories=True)
+
+ labels['org.opencontainers.image.revision'] = (
+ repo.head.object.hexsha)
+
+ if source.startswith('file:') or not source:
+ labels['org.opencontainers.image.source'] = (
+ 'https://opendev.org/openstack/kolla')
+
+ LOG.debug("Detected SCM info via Git fallback: %s", labels)
+ except Exception as e:
+ LOG.debug("Git fallback failed: %s", e)
+
+ source_url = labels.get('org.opencontainers.image.source', '')
+ if source_url.startswith('file:'):
+ labels['org.opencontainers.image.source'] = (
+ 'https://opendev.org/openstack/kolla')
+
+ return labels
+
def _get_images_dir(self):
possible_paths = (
PROJECT_ROOT,
@@ -323,6 +377,8 @@ class KollaWorker(object):
'image_prefix': self.image_prefix,
'namespace': self.namespace,
'openstack_release': self.openstack_release,
+ 'openstack_release_codename':
+ self.openstack_release_codename,
'openstack_branch': self.openstack_branch,
'openstack_branch_slashed':
self.openstack_branch_slashed,
@@ -691,10 +747,25 @@ class KollaWorker(object):
else:
parent_name = ''
del match
+
+ oci_labels = self.scm_labels.copy()
+ oci_labels.update({
+ "org.opencontainers.image.title": image_name,
+ "org.opencontainers.image.description": (
+ "OpenStack Kolla {} image".format(image_name)),
+ "org.opencontainers.image.version": self.tag,
+ "org.opencontainers.image.created": self.build_created,
+ "org.opencontainers.image.authors": self.maintainer,
+ "org.opencontainers.image.url": (
+ "https://opendev.org/openstack/kolla"),
+ "org.opencontainers.image.licenses": "Apache-2.0"
+ })
+
image = Image(image_name, canonical_name, path,
parent_name=parent_name,
logger=utils.make_a_logger(self.conf, image_name),
- engine_client=self.engine_client)
+ engine_client=self.engine_client,
+ labels=oci_labels)
# NOTE(jeffrey4l): register the opts if the section didn't
# register in the kolla/common/config.py file
diff --git a/kolla/image/tasks.py b/kolla/image/tasks.py
index 28af3d52d..6bee905f7 100644
--- a/kolla/image/tasks.py
+++ b/kolla/image/tasks.py
@@ -119,6 +119,16 @@ class PushTask(EngineTask):
def push_image(self, image):
kwargs = dict(stream=True, decode=True)
+ # NOTE(bbezak): Docker ≥ 28.3.3 rejects a push with no
+ # X-Registry-Auth header (moby/moby#50371, docker-py#3348).
+ # If the SDK cannot find creds for this registry, we inject
+ # an empty {} so the daemon still accepts the request.
+ # TODO(bbezak): Remove fallback once docker-py handles empty auth
+ if self.conf.engine == engine.Engine.DOCKER.value:
+ from docker.auth import resolve_authconfig
+ if not resolve_authconfig(self.engine_client.api._auth_configs,
+ registry=self.conf.registry):
+ kwargs.setdefault("auth_config", {})
for response in self.engine_client.images.push(image.canonical_name,
**kwargs):
@@ -397,6 +407,9 @@ class BuildTask(EngineTask):
buildargs = self.update_buildargs()
kwargs = {}
+ if hasattr(image, 'labels') and image.labels:
+ kwargs['labels'] = image.labels
+
if self.conf.engine == engine.Engine.PODMAN.value:
# TODO(kevko): dockerfile path is a workaround,
# should be removed as soon as it will be fixed in podman-py
diff --git a/kolla/image/unbuildable.py b/kolla/image/unbuildable.py
index 826316c26..5dbc72094 100644
--- a/kolla/image/unbuildable.py
+++ b/kolla/image/unbuildable.py
@@ -17,12 +17,12 @@
UNBUILDABLE_IMAGES = {
'aarch64': {
"bifrost-base", # someone need to get upstream working first
- "prometheus-mtail", # no aarch64 binary
},
# Issues for SHA1 keys:
# https://github.com/grafana/grafana/issues/41036
'centos': {
+ "collectd", # CS10 no opstools repo
"hacluster-pcs", # Missing crmsh package
"nova-spicehtml5proxy", # Missing spicehtml5 package
"ovsdpdk", # Not supported on CentOS
@@ -30,8 +30,6 @@ UNBUILDABLE_IMAGES = {
},
'debian': {
- "openvswitch-netcontrold",
- # https://bugs.launchpad.net/kolla/+bug/2027668
},
'rocky': {
@@ -46,10 +44,8 @@ UNBUILDABLE_IMAGES = {
},
'ubuntu+aarch64': {
- "barbican-base", # https://github.com/unbit/uwsgi/issues/2434
},
'centos+aarch64': {
- "telegraf", # no binary package
},
}
diff --git a/kolla/template/methods.py b/kolla/template/methods.py
index e9edbfeb0..42b7399bb 100644
--- a/kolla/template/methods.py
+++ b/kolla/template/methods.py
@@ -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,49 +121,94 @@ 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 = ''
try:
- repo_list = repo_data['%s-%s' % (base_distro, base_arch)]
+ repo_list = repo_data.get(base_package_type, dict()) | \
+ repo_data.get(base_distro, dict()) | \
+ repo_data.get('%s-%s' % (base_distro, base_arch), dict())
except KeyError:
# 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 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 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 _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
diff --git a/kolla/template/repos.yaml b/kolla/template/repos.yaml
index d0bfed99f..d559f6f09 100644
--- a/kolla/template/repos.yaml
+++ b/kolla/template/repos.yaml
@@ -1,61 +1,8 @@
---
-centos:
- ceph: "centos-ceph-reef"
- crb: "crb"
- docker-ce: "docker-ce"
- epel: "epel"
- erlang: "rabbitmq_rabbitmq-erlang"
- extras: "extras"
- fluentd: "fluent-package-lts"
- grafana: "grafana"
- hacluster: "highavailability"
- influxdb: "influxdb"
- 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"
-
-centos-aarch64:
- ceph: "centos-ceph-reef"
- crb: "crb"
- docker-ce: "docker-ce"
- epel: "epel"
- erlang: "copr-rabbitmq-erlang"
- extras: "extras"
- fluentd: "fluent-package-lts"
- grafana: "grafana"
- hacluster: "highavailability"
- influxdb: "influxdb"
- 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"
-
# NOTE(mnasiadka): For RabbitMQ Debuntu suite names is following:
# https://www.rabbitmq.com/install-debian.html#apt-cloudsmith
-debian:
- docker-ce:
- url: "https://download.docker.com/linux/debian"
- suite: "bookworm"
- component: "stable"
- gpg_key: "docker-ce.asc"
- erlang:
- url: "https://ppa.launchpadcontent.net/rabbitmq/rabbitmq-erlang/ubuntu"
- suite: "jammy"
- component: "main"
- gpg_key: "erlang-ppa.gpg"
- fluentd:
- url: "https://packages.treasuredata.com/lts/5/debian/bookworm"
- suite: "bookworm"
- component: "contrib"
- gpg_key: "treasuredata.asc"
+deb:
grafana:
url: "https://apt.grafana.com"
suite: "stable"
@@ -66,11 +13,6 @@ debian:
suite: "jammy"
component: "stable"
gpg_key: "influxdb.asc"
- mariadb:
- url: "https://dlm.mariadb.com/repo/mariadb-server/10.11/repo/debian"
- suite: "bookworm"
- component: "main"
- gpg_key: "mariadb.gpg"
opensearch:
url: "https://artifacts.opensearch.org/releases/bundle/opensearch/3.x/apt/"
suite: "stable"
@@ -81,213 +23,178 @@ debian:
suite: "stable"
component: "main"
gpg_key: "opensearch.asc"
- proxysql:
- url: "https://repo.proxysql.com/ProxySQL/proxysql-3.0.x/bookworm/"
- suite: "./"
- component: ""
- gpg_key: "proxysql.asc"
- rabbitmq:
- url: "https://ppa1.rabbitmq.com/rabbitmq/rabbitmq-server/deb/debian"
- suite: "bookworm"
- component: "main"
- gpg_key: "rabbitmq.gpg"
-debian-aarch64:
- docker-ce:
- url: "https://download.docker.com/linux/debian"
- suite: "bookworm"
- component: "stable"
- gpg_key: "docker-ce.asc"
+debian:
erlang:
url: "https://ppa.launchpadcontent.net/rabbitmq/rabbitmq-erlang/ubuntu"
- suite: "jammy"
+ suite: "noble"
component: "main"
gpg_key: "erlang-ppa.gpg"
+ docker-ce:
+ url: "https://download.docker.com/linux/debian"
+ suite: "trixie"
+ component: "stable"
+ gpg_key: "docker-ce.asc"
fluentd:
- url: "https://packages.treasuredata.com/lts/5/debian/bookworm"
- suite: "bookworm"
+ url: "https://fluentd.cdn.cncf.io/lts/6/debian/trixie"
+ suite: "trixie"
component: "contrib"
- gpg_key: "treasuredata.asc"
- grafana:
- url: "https://apt.grafana.com"
- suite: "stable"
- component: "main"
- gpg_key: "grafana.asc"
- influxdb:
- url: "https://repos.influxdata.com/ubuntu"
- suite: "jammy"
- component: "stable"
- gpg_key: "influxdb.asc"
+ gpg_key: "fluentd.asc"
+ # NOTE(mnasiadka): 11.4 does not have trixie builds yet
mariadb:
- url: "https://dlm.mariadb.com/repo/mariadb-server/10.11/repo/debian"
+ url: "https://dlm.mariadb.com/repo/mariadb-server/11.4/repo/debian"
suite: "bookworm"
component: "main"
gpg_key: "mariadb.gpg"
- opensearch:
- url: "https://artifacts.opensearch.org/releases/bundle/opensearch/3.x/apt/"
- suite: "stable"
- component: "main"
- gpg_key: "opensearch.asc"
- opensearch-dashboards:
- url: "https://artifacts.opensearch.org/releases/bundle/opensearch-dashboards/3.x/apt/"
- suite: "stable"
- component: "main"
- gpg_key: "opensearch.asc"
proxysql:
- url: "https://repo.proxysql.com/ProxySQL/proxysql-3.0.x/bookworm/"
+ url: "https://repo.proxysql.com/ProxySQL/proxysql-3.0.x/trixie/"
suite: "./"
component: ""
gpg_key: "proxysql.asc"
rabbitmq:
- url: "https://ppa1.rabbitmq.com/rabbitmq/rabbitmq-server/deb/debian"
- suite: "bookworm"
+ url: "https://deb1.rabbitmq.com/rabbitmq-server/debian/trixie/"
+ suite: "trixie"
+ component: "main"
+ gpg_key: "rabbitmq.gpg"
+
+debian-aarch64:
+ rabbitmq:
+ url: "https://deb1.rabbitmq.com/rabbitmq-server/debian/trixie"
+ suite: "trixie"
component: "main"
# NOTE(mnasiadka): Since rabbitmq is really noarch and community mirror is not
# syncing binary-aarch64 - we're using amd64 here.
arch: "amd64"
gpg_key: "rabbitmq.gpg"
-rocky:
- ceph: "centos-ceph-reef"
- crb: "crb"
- docker-ce: "docker-ce"
- epel: "epel"
- erlang: "rabbitmq_rabbitmq-erlang"
- extras: "extras"
- fluentd: "fluent-package-lts"
- grafana: "grafana"
- hacluster: "highavailability"
- influxdb: "influxdb"
- 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"
-
-rocky-aarch64:
- ceph: "centos-ceph-reef"
- crb: "crb"
- docker-ce: "docker-ce"
- epel: "epel"
- erlang: "copr-rabbitmq-erlang"
- extras: "extras"
- fluentd: "fluent-package-lts"
- grafana: "grafana"
- influxdb: "influxdb"
- 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"
-
ubuntu:
- docker-ce:
- url: "https://download.docker.com/linux/ubuntu"
- suite: "noble"
- component: "stable"
- gpg_key: "docker-ce.asc"
erlang:
url: "https://ppa.launchpadcontent.net/rabbitmq/rabbitmq-erlang/ubuntu"
suite: "noble"
component: "main"
gpg_key: "erlang-ppa.gpg"
+ docker-ce:
+ url: "https://download.docker.com/linux/ubuntu"
+ suite: "noble"
+ component: "stable"
+ gpg_key: "docker-ce.asc"
fluentd:
- url: "https://packages.treasuredata.com/lts/5/ubuntu/noble/"
+ url: "https://fluentd.cdn.cncf.io/lts/6/ubuntu/noble"
suite: "noble"
component: "contrib"
- gpg_key: "treasuredata.asc"
- grafana:
- url: "https://apt.grafana.com"
- suite: "stable"
- component: "main"
- gpg_key: "grafana.asc"
- influxdb:
- url: "https://repos.influxdata.com/ubuntu"
- # TODO(mnasiadka): Switch to noble when available
- suite: "jammy"
- component: "stable"
- gpg_key: "influxdb.asc"
+ gpg_key: "fluentd.asc"
mariadb:
- url: "https://dlm.mariadb.com/repo/mariadb-server/10.11/repo/ubuntu"
+ url: "https://dlm.mariadb.com/repo/mariadb-server/11.4/repo/ubuntu"
suite: "noble"
component: "main"
gpg_key: "mariadb.gpg"
- opensearch:
- url: "https://artifacts.opensearch.org/releases/bundle/opensearch/3.x/apt/"
- suite: "stable"
- component: "main"
- gpg_key: "opensearch.asc"
- opensearch-dashboards:
- url: "https://artifacts.opensearch.org/releases/bundle/opensearch-dashboards/3.x/apt/"
- suite: "stable"
- component: "main"
- gpg_key: "opensearch.asc"
proxysql:
url: "https://repo.proxysql.com/ProxySQL/proxysql-3.0.x/noble/"
suite: "./"
component: ""
gpg_key: "proxysql.asc"
rabbitmq:
- url: "https://ppa1.rabbitmq.com/rabbitmq/rabbitmq-server/deb/ubuntu"
+ url: "https://deb1.rabbitmq.com/rabbitmq-server/ubuntu/noble"
suite: "noble"
component: "main"
gpg_key: "rabbitmq.gpg"
ubuntu-aarch64:
- docker-ce:
- url: "https://download.docker.com/linux/ubuntu"
- suite: "noble"
- component: "stable"
- gpg_key: "docker-ce.asc"
- erlang:
- url: "https://ppa.launchpadcontent.net/rabbitmq/rabbitmq-erlang/ubuntu"
+ rabbitmq:
+ url: "https://deb1.rabbitmq.com/rabbitmq-server/ubuntu/noble"
suite: "noble"
component: "main"
- gpg_key: "erlang-ppa.gpg"
+ # NOTE(mnasiadka): Since rabbitmq is really noarch and community mirror is not
+ # syncing binary-aarch64 - we're using amd64 here.
+ arch: "amd64"
+ gpg_key: "rabbitmq.gpg"
+
+rpm:
+ 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-10-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:
- url: "https://packages.treasuredata.com/lts/5/ubuntu/noble/"
- suite: "noble"
- component: "contrib"
- gpg_key: "treasuredata.asc"
+ baseurl: "https://fluentd.cdn.cncf.io/lts/6/redhat/$releasever/$basearch"
+ gpgkey: "https://fluentd.cdn.cncf.io/GPG-KEY-fluent-package"
+ name: "fluent-package-lts"
grafana:
- url: "https://apt.grafana.com"
- suite: "stable"
- component: "main"
- gpg_key: "grafana.asc"
+ baseurl: "https://rpm.grafana.com"
+ gpgkey: "https://rpm.grafana.com/gpg.key"
+ name: "grafana"
+ hacluster:
+ name: "highavailability"
+ distro: true
influxdb:
- url: "https://repos.influxdata.com/ubuntu"
- # TODO(mnasiadka): Switch to noble when available
- suite: "jammy"
- component: "stable"
- gpg_key: "influxdb.asc"
+ baseurl: "https://repos.influxdata.com/rhel/9/$basearch/stable"
+ gpgkey: "https://repos.influxdata.com/influxdata-archive.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:
- url: "https://dlm.mariadb.com/repo/mariadb-server/10.11/repo/ubuntu"
- suite: "noble"
- component: "main"
- gpg_key: "mariadb.gpg"
+ baseurl: "https://dlm.mariadb.com/repo/mariadb-server/11.4/yum/rhel/$releasever/$basearch"
+ gpgkey: "https://downloads.mariadb.com/MariaDB/RPM-GPG-KEY-MariaDB"
+ name: "mariadb"
opensearch:
- url: "https://artifacts.opensearch.org/releases/bundle/opensearch/3.x/apt/"
- suite: "stable"
- component: "main"
- gpg_key: "opensearch.asc"
+ baseurl: "https://artifacts.opensearch.org/releases/bundle/opensearch/3.x/yum"
+ gpgkey: "https://artifacts.opensearch.org/publickeys/opensearch-release.pgp"
+ repo_gpgcheck: 1
+ name: "opensearch-3.x"
opensearch-dashboards:
- url: "https://artifacts.opensearch.org/releases/bundle/opensearch-dashboards/3.x/apt/"
- suite: "stable"
- component: "main"
- gpg_key: "opensearch.asc"
+ 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:
- url: "https://repo.proxysql.com/ProxySQL/proxysql-3.0.x/noble/"
- suite: "./"
- component: ""
- gpg_key: "proxysql.asc"
+ baseurl: "https://repo.proxysql.com/ProxySQL/proxysql-3.0.x/almalinux/10"
+ gpgkey: "https://repo.proxysql.com/ProxySQL/proxysql-3.0.x/repo_pub_key"
+ name: "proxysql"
rabbitmq:
- url: "https://ppa1.rabbitmq.com/rabbitmq/rabbitmq-server/deb/ubuntu"
- suite: "noble"
- component: "main"
- arch: "amd64"
- gpg_key: "rabbitmq.gpg"
+ 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:
+ 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"
+
+rocky-aarch64:
+ 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"
diff --git a/kolla/tests/test_build.py b/kolla/tests/test_build.py
index ca2faa056..deb2dfa10 100644
--- a/kolla/tests/test_build.py
+++ b/kolla/tests/test_build.py
@@ -81,10 +81,12 @@ class TasksTest(base.TestCase):
@mock.patch(engine_client)
def test_push_image(self, mock_client):
self.engine_client = mock_client
+ mock_client().api._auth_configs = {}
pusher = tasks.PushTask(self.conf, self.image)
pusher.run()
mock_client().images.push.assert_called_once_with(
- self.image.canonical_name, decode=True, stream=True)
+ self.image.canonical_name,
+ decode=True, stream=True, auth_config={})
self.assertTrue(pusher.success)
@mock.patch.dict(os.environ, clear=True)
@@ -92,11 +94,13 @@ class TasksTest(base.TestCase):
def test_push_image_failure(self, mock_client):
"""failure on connecting Docker API"""
self.engine_client = mock_client
+ mock_client().api._auth_configs = {}
mock_client().images.push.side_effect = Exception
pusher = tasks.PushTask(self.conf, self.image)
pusher.run()
mock_client().images.push.assert_called_once_with(
- self.image.canonical_name, decode=True, stream=True)
+ self.image.canonical_name,
+ decode=True, stream=True, auth_config={})
self.assertFalse(pusher.success)
self.assertEqual(utils.Status.PUSH_ERROR, self.image.status)
@@ -105,11 +109,13 @@ class TasksTest(base.TestCase):
def test_push_image_failure_retry(self, mock_client):
"""failure on connecting Docker API, success on retry"""
self.engine_client = mock_client
+ mock_client().api._auth_configs = {}
mock_client().images.push.side_effect = [Exception, []]
pusher = tasks.PushTask(self.conf, self.image)
pusher.run()
mock_client().images.push.assert_called_once_with(
- self.image.canonical_name, decode=True, stream=True)
+ self.image.canonical_name,
+ decode=True, stream=True, auth_config={})
self.assertFalse(pusher.success)
self.assertEqual(utils.Status.PUSH_ERROR, self.image.status)
@@ -125,12 +131,14 @@ class TasksTest(base.TestCase):
def test_push_image_failure_error(self, mock_client):
"""Docker connected, failure to push"""
self.engine_client = mock_client
+ mock_client().api._auth_configs = {}
mock_client().images.push.return_value = [{'errorDetail': {'message':
'mock push fail'}}]
pusher = tasks.PushTask(self.conf, self.image)
pusher.run()
mock_client().images.push.assert_called_once_with(
- self.image.canonical_name, decode=True, stream=True)
+ self.image.canonical_name,
+ decode=True, stream=True, auth_config={})
self.assertFalse(pusher.success)
self.assertEqual(utils.Status.PUSH_ERROR, self.image.status)
@@ -139,12 +147,14 @@ class TasksTest(base.TestCase):
def test_push_image_failure_error_retry(self, mock_client):
"""Docker connected, failure to push, success on retry"""
self.engine_client = mock_client
+ mock_client().api._auth_configs = {}
mock_client().images.push.return_value = [{'errorDetail': {'message':
'mock push fail'}}]
pusher = tasks.PushTask(self.conf, self.image)
pusher.run()
mock_client().images.push.assert_called_once_with(
- self.image.canonical_name, decode=True, stream=True)
+ self.image.canonical_name,
+ decode=True, stream=True, auth_config={})
self.assertFalse(pusher.success)
self.assertEqual(utils.Status.PUSH_ERROR, self.image.status)
diff --git a/kolla/tests/test_methods.py b/kolla/tests/test_methods.py
index afa21e2ab..e1dc810d1 100644
--- a/kolla/tests/test_methods.py
+++ b/kolla/tests/test_methods.py
@@ -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-10-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", "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, ['grafana', 'ceph'],
- 'enable')
- expectCmd = 'RUN dnf config-manager --enable grafana '
- expectCmd += '--enable centos-ceph-reef || true'
+ 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,17 +187,17 @@ 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')
- expectCmd = "RUN echo 'Uris: https://ppa1.rabbitmq.com/rabbitmq/rabbitmq-server/deb/debian' " # noqa: E501
+ result = methods.handle_repos(template_vars, ["rabbitmq"], "enable")
+ expectCmd = "RUN echo 'Uris: https://deb1.rabbitmq.com/rabbitmq-server/debian/trixie' " # noqa: E501
expectCmd += ">/etc/apt/sources.list.d/rabbitmq.sources && "
expectCmd += "echo 'Components: main' "
expectCmd += ">>/etc/apt/sources.list.d/rabbitmq.sources && "
expectCmd += "echo 'Types: deb' "
expectCmd += ">>/etc/apt/sources.list.d/rabbitmq.sources && "
- expectCmd += "echo 'Suites: bookworm' "
+ expectCmd += "echo 'Suites: trixie' "
expectCmd += ">>/etc/apt/sources.list.d/rabbitmq.sources && "
expectCmd += "echo 'Signed-By: /etc/kolla/apt-keys/rabbitmq.gpg' "
expectCmd += ">>/etc/apt/sources.list.d/rabbitmq.sources && "
@@ -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' "
@@ -133,60 +236,36 @@ class MethodsTest(base.TestCase):
expectCmd += ">>/etc/apt/sources.list.d/grafana.sources && "
expectCmd += "echo 'Uris: "
- expectCmd += "https://ppa1.rabbitmq.com/rabbitmq/rabbitmq-server/deb/debian' " # noqa: E501
+ expectCmd += "https://deb1.rabbitmq.com/rabbitmq-server/debian/trixie/' " # noqa: E501
expectCmd += ">/etc/apt/sources.list.d/rabbitmq.sources && "
expectCmd += "echo 'Components: main' "
expectCmd += ">>/etc/apt/sources.list.d/rabbitmq.sources && "
expectCmd += "echo 'Types: deb' "
expectCmd += ">>/etc/apt/sources.list.d/rabbitmq.sources && "
- expectCmd += "echo 'Suites: bookworm' "
+ expectCmd += "echo 'Suites: trixie' "
expectCmd += ">>/etc/apt/sources.list.d/rabbitmq.sources && "
expectCmd += "echo 'Signed-By: /etc/kolla/apt-keys/rabbitmq.gpg' "
expectCmd += ">>/etc/apt/sources.list.d/rabbitmq.sources"
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-reef || 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,
diff --git a/releasenotes/notes/add-mariadb-healthcheck-script-916e5ad7a216e05e.yaml b/releasenotes/notes/add-mariadb-healthcheck-script-916e5ad7a216e05e.yaml
new file mode 100644
index 000000000..16be532eb
--- /dev/null
+++ b/releasenotes/notes/add-mariadb-healthcheck-script-916e5ad7a216e05e.yaml
@@ -0,0 +1,8 @@
+---
+features:
+ - |
+ Added new MariaDB container health check script ``healthcheck.sh``.
+ This script is from official docker images of MariaDB.
+
+ This script is planned to replace current health check script
+ ``clustercheck.sh`` to keep compatibility with newer MariaDB releases.
diff --git a/releasenotes/notes/add-oci-standard-labels-f68cc6eb3a4db7c7.yaml b/releasenotes/notes/add-oci-standard-labels-f68cc6eb3a4db7c7.yaml
new file mode 100644
index 000000000..e9ba30dfb
--- /dev/null
+++ b/releasenotes/notes/add-oci-standard-labels-f68cc6eb3a4db7c7.yaml
@@ -0,0 +1,10 @@
+---
+features:
+ - |
+ Implemented support for Open Container Initiative (OCI) standard labels
+ in generated container images.
+
+ Kolla images are now tagged with standard metadata to improve traceability
+ and observability. The build process automatically detects source
+ information and populates labels such as build creation time, version,
+ source URL, and commit revision.
diff --git a/releasenotes/notes/add-valkey-exporter-e21762a106307538.yaml b/releasenotes/notes/add-valkey-exporter-e21762a106307538.yaml
new file mode 100644
index 000000000..78cf5d4f8
--- /dev/null
+++ b/releasenotes/notes/add-valkey-exporter-e21762a106307538.yaml
@@ -0,0 +1,5 @@
+---
+features:
+ - |
+ Adds support for Valkey monitoring by introducing a new
+ ``prometheus-valkey-exporter`` container image.
diff --git a/releasenotes/notes/ansible-core-2-20-bd912e1767d5f197.yaml b/releasenotes/notes/ansible-core-2-20-bd912e1767d5f197.yaml
new file mode 100644
index 000000000..bf7ac0e7d
--- /dev/null
+++ b/releasenotes/notes/ansible-core-2-20-bd912e1767d5f197.yaml
@@ -0,0 +1,5 @@
+---
+features:
+ - |
+ Version of ``ansible-core`` in ``kolla-toolbox`` has been updated to
+ ``2.20``.
diff --git a/releasenotes/notes/bug-2035975-94c5670049a7e1a6.yaml b/releasenotes/notes/bug-2035975-94c5670049a7e1a6.yaml
new file mode 100644
index 000000000..2c4186576
--- /dev/null
+++ b/releasenotes/notes/bug-2035975-94c5670049a7e1a6.yaml
@@ -0,0 +1,5 @@
+---
+fixes:
+ - |
+ Fix missing nvme-cli package in Glance container.
+ `LP#2035975 <https://launchpad.net/bugs/2035975>`__
diff --git a/releasenotes/notes/bug-2093414-12e2d0f21e34bc59.yaml b/releasenotes/notes/bug-2093414-12e2d0f21e34bc59.yaml
new file mode 100644
index 000000000..0cf23f330
--- /dev/null
+++ b/releasenotes/notes/bug-2093414-12e2d0f21e34bc59.yaml
@@ -0,0 +1,7 @@
+---
+fixes:
+ - |
+ Adds the ``django-redis`` package to the Horizon image.
+ This enables using Redis or Valkey as a Django cache and
+ session backend.
+ `LP#2093414 <https://launchpad.net/bugs/2093414>`__
diff --git a/releasenotes/notes/bug-2114173-70d0b815a42ae239.yaml b/releasenotes/notes/bug-2114173-70d0b815a42ae239.yaml
new file mode 100644
index 000000000..29349be97
--- /dev/null
+++ b/releasenotes/notes/bug-2114173-70d0b815a42ae239.yaml
@@ -0,0 +1,6 @@
+---
+fixes:
+ - |
+ Fixes set_configs.py not detecting removed config files
+ during --check, which prevented container restart when
+ needed. `LP#2114173 <https://launchpad.net/bugs/2114173>`__
diff --git a/releasenotes/notes/bug-2120639-74c180bd812ddcf7.yaml b/releasenotes/notes/bug-2120639-74c180bd812ddcf7.yaml
new file mode 100644
index 000000000..0b77a1bf8
--- /dev/null
+++ b/releasenotes/notes/bug-2120639-74c180bd812ddcf7.yaml
@@ -0,0 +1,10 @@
+---
+fixes:
+ - |
+ Fixed missing metrics in Prometheus libvirt exporter.
+
+ The Prometheus libvirt exporter has been bumped from ``v1.6.0`` to
+ ``v2.2.0``. This restores some metrics that were lost when the exporter
+ source was changed in a previous release.
+
+ `LP#2120639 <https://launchpad.net/bugs/2120639>`__.
diff --git a/releasenotes/notes/bug-2132960-genisoimage_package_nova-compute-ironic-28f4c262ec201f99.yaml b/releasenotes/notes/bug-2132960-genisoimage_package_nova-compute-ironic-28f4c262ec201f99.yaml
new file mode 100644
index 000000000..beffc2df0
--- /dev/null
+++ b/releasenotes/notes/bug-2132960-genisoimage_package_nova-compute-ironic-28f4c262ec201f99.yaml
@@ -0,0 +1,6 @@
+---
+fixes:
+ - |
+ Add missing genisoimage package to nova-compute-ironic
+ container to fix ironic baremetal provisioning error.
+ `LP#2132960 <https://bugs.launchpad.net/kolla/+bug/2132960>`__
diff --git a/releasenotes/notes/deb822-3f0435dfce6da841.yaml b/releasenotes/notes/deb822-3f0435dfce6da841.yaml
new file mode 100644
index 000000000..572248317
--- /dev/null
+++ b/releasenotes/notes/deb822-3f0435dfce6da841.yaml
@@ -0,0 +1,6 @@
+---
+features:
+ - |
+ ``base`` container image sources.list for Debian and Ubuntu have been
+ reworked to use ``deb822`` and now are called ``debian.sources`` and
+ ``ubuntu.sources``.
diff --git a/releasenotes/notes/debian-trixie-23987480043dc662.yaml b/releasenotes/notes/debian-trixie-23987480043dc662.yaml
new file mode 100644
index 000000000..68555cfea
--- /dev/null
+++ b/releasenotes/notes/debian-trixie-23987480043dc662.yaml
@@ -0,0 +1,5 @@
+---
+features:
+ - |
+ Debian ``trixie`` is now used instead of ``bookworm``. Trixie is the current
+ stable release of Debian.
diff --git a/releasenotes/notes/debian-trixie-spice-814929ed1efbcad1.yaml b/releasenotes/notes/debian-trixie-spice-814929ed1efbcad1.yaml
new file mode 100644
index 000000000..eca8927dd
--- /dev/null
+++ b/releasenotes/notes/debian-trixie-spice-814929ed1efbcad1.yaml
@@ -0,0 +1,8 @@
+---
+fixes:
+ - |
+ Debian Trixie container images require the additional
+ qemu-system-modules-spice operating system package for SPICE consoles
+ to function correctly. This package has therefore been added
+ to the nova-libvirt container build. Further details are available in
+ the bug report at `LP#2138186 <https://launchpad.net/bugs/2138186>`__.
diff --git a/releasenotes/notes/deprecate-telegraf-db2b0b9f30591552.yaml b/releasenotes/notes/deprecate-telegraf-db2b0b9f30591552.yaml
new file mode 100644
index 000000000..0667f571d
--- /dev/null
+++ b/releasenotes/notes/deprecate-telegraf-db2b0b9f30591552.yaml
@@ -0,0 +1,4 @@
+---
+deprecations:
+ - |
+ Deprecates support for building ``collectd`` and ``telegraf`` images.
diff --git a/releasenotes/notes/drop-delorean-c0bd3229162faef0.yaml b/releasenotes/notes/drop-delorean-c0bd3229162faef0.yaml
new file mode 100644
index 000000000..069419a2b
--- /dev/null
+++ b/releasenotes/notes/drop-delorean-c0bd3229162faef0.yaml
@@ -0,0 +1,5 @@
+---
+upgrade:
+ - |
+ Drops requirement to use ``Delorean/CentOS Cloud SIG`` repositories in
+ rpm-based images.
diff --git a/releasenotes/notes/drop-influxdb-cb3161a1e04fa38e.yaml b/releasenotes/notes/drop-influxdb-cb3161a1e04fa38e.yaml
new file mode 100644
index 000000000..47800626e
--- /dev/null
+++ b/releasenotes/notes/drop-influxdb-cb3161a1e04fa38e.yaml
@@ -0,0 +1,4 @@
+---
+upgrade:
+ - |
+ Support for building ``influxdb`` container images has been dropped.
diff --git a/releasenotes/notes/drop-ironic-inspector-093cc36e06787168.yaml b/releasenotes/notes/drop-ironic-inspector-093cc36e06787168.yaml
new file mode 100644
index 000000000..4aa76d6d8
--- /dev/null
+++ b/releasenotes/notes/drop-ironic-inspector-093cc36e06787168.yaml
@@ -0,0 +1,5 @@
+---
+upgrade:
+ - |
+ Removes support for building ``ironic-inspector`` images following
+ retirement in ``Ironic`` project.
diff --git a/releasenotes/notes/drop-neutron-linuxbridge-agent-5c4596f148c143ed.yaml b/releasenotes/notes/drop-neutron-linuxbridge-agent-5c4596f148c143ed.yaml
new file mode 100644
index 000000000..e4d951f53
--- /dev/null
+++ b/releasenotes/notes/drop-neutron-linuxbridge-agent-5c4596f148c143ed.yaml
@@ -0,0 +1,5 @@
+---
+upgrade:
+ - |
+ Support for building ``neutron-linuxbridge-agent`` container image has
+ been dropped following removal in Neutron.
diff --git a/releasenotes/notes/drop-redis-d286ca1237747c48.yaml b/releasenotes/notes/drop-redis-d286ca1237747c48.yaml
new file mode 100644
index 000000000..9710a37a2
--- /dev/null
+++ b/releasenotes/notes/drop-redis-d286ca1237747c48.yaml
@@ -0,0 +1,4 @@
+---
+upgrade:
+ - |
+ ``redis`` container image has been dropped due to migration to ``valkey``.
diff --git a/releasenotes/notes/drop-telegraf-28dd961f18ed7825.yaml b/releasenotes/notes/drop-telegraf-28dd961f18ed7825.yaml
new file mode 100644
index 000000000..93de985b2
--- /dev/null
+++ b/releasenotes/notes/drop-telegraf-28dd961f18ed7825.yaml
@@ -0,0 +1,4 @@
+---
+upgrade:
+ - |
+ Support for building ``telegraf`` container images has been dropped.
diff --git a/releasenotes/notes/drop-venus-435234b3bff7f209.yaml b/releasenotes/notes/drop-venus-435234b3bff7f209.yaml
new file mode 100644
index 000000000..b6d221842
--- /dev/null
+++ b/releasenotes/notes/drop-venus-435234b3bff7f209.yaml
@@ -0,0 +1,5 @@
+---
+upgrade:
+ - |
+ Support for building ``Venus`` container images has been dropped due to the
+ project's inactivity and the Horizon plugin build failures it caused.
diff --git a/releasenotes/notes/erlang-aarch64-repo-change-7fbc8696990b5677.yaml b/releasenotes/notes/erlang-aarch64-repo-change-7fbc8696990b5677.yaml
new file mode 100644
index 000000000..5e20a7e0e
--- /dev/null
+++ b/releasenotes/notes/erlang-aarch64-repo-change-7fbc8696990b5677.yaml
@@ -0,0 +1,5 @@
+---
+upgrade:
+ - |
+ Switches Erlang RPMs on aarch64 to a versioned Erlang 27 repository,
+ due to Fedora COPR not supporting multiple package versions in one repo.
diff --git a/releasenotes/notes/fix-glance-api-add-missing-lsscsi-package-e6ae949eb8bdbe7b.yaml b/releasenotes/notes/fix-glance-api-add-missing-lsscsi-package-e6ae949eb8bdbe7b.yaml
new file mode 100644
index 000000000..e38bf1f30
--- /dev/null
+++ b/releasenotes/notes/fix-glance-api-add-missing-lsscsi-package-e6ae949eb8bdbe7b.yaml
@@ -0,0 +1,6 @@
+---
+fixes:
+ - |
+ Fix using Cinder as Glance image store when Cinder uses a FC or iSCSI
+ backend by adding the missing ``lsscsi`` package to glance-api.
+ `LP#2111828 <https://bugs.launchpad.net/kolla/+bug/2111828>`__
diff --git a/releasenotes/notes/flamingo-prelude-b72f2599ed9d25d5.yaml b/releasenotes/notes/flamingo-prelude-b72f2599ed9d25d5.yaml
new file mode 100644
index 000000000..c0b40675a
--- /dev/null
+++ b/releasenotes/notes/flamingo-prelude-b72f2599ed9d25d5.yaml
@@ -0,0 +1,24 @@
+---
+prelude: |
+ The Kolla ``21.0.0`` (Flamingo) release modernises the base operating
+ systems and core infrastructure shipped by the containers. Highlights
+ include:
+
+ * Rocky Linux 10 replaces Rocky Linux 9 as the only supported Rocky base
+ image, removing the Delorean/CentOS Cloud SIG dependency and tightening RPM
+ repository handling via ``repos.yaml`` (including a new versioned Erlang
+ source for aarch64).
+ * Data-plane services received major upgrades: ``MariaDB`` now tracks the
+ 11.4 LTS series with the upstream health check script and the legacy
+ clustercheck image removed, ``ProxySQL`` moves to 3.x, ``Bifrost`` consumes
+ Ansible 11, ``RabbitMQ`` advances to 4.1, and ``Gnocchi`` is updated to
+ 4.7.0.
+ * Observability components were refreshed with ``Fluentd`` 6.x LTS,
+ ``OpenSearch``/``OpenSearch Dashboards`` 3.x, broad ``Prometheus`` exporter
+ and infrastructure bumps (``etcd``, ``helm``, ``letsencrypt-lego``), and the
+ retirement of the ``collectd``, ``telegraf``, and ``prometheus-ovn-exporter``
+ images.
+ * The container portfolio was streamlined: support landed for the
+ ``ironic-pxe-filter`` image and ``neutron-metadata-agent`` wrapper scripts,
+ while dormant services such as ``ironic-inspector`` and ``Venus`` were
+ dropped.
diff --git a/releasenotes/notes/fluentd-update-8db10e760b2dc4d5.yaml b/releasenotes/notes/fluentd-update-8db10e760b2dc4d5.yaml
new file mode 100644
index 000000000..7ac12764b
--- /dev/null
+++ b/releasenotes/notes/fluentd-update-8db10e760b2dc4d5.yaml
@@ -0,0 +1,4 @@
+---
+upgrade:
+ - |
+ Updates ``Fluentd`` to the 6.x LTS series.
diff --git a/releasenotes/notes/gnocchi-4_7_0-fdb7f76d367ee435.yaml b/releasenotes/notes/gnocchi-4_7_0-fdb7f76d367ee435.yaml
new file mode 100644
index 000000000..ec26eb894
--- /dev/null
+++ b/releasenotes/notes/gnocchi-4_7_0-fdb7f76d367ee435.yaml
@@ -0,0 +1,4 @@
+---
+upgrade:
+ - |
+ ``Gnocchi`` version has been updated to ``4.7.0``.
diff --git a/releasenotes/notes/handle-deprecated-rabbitmq-package-archive-47548e7a41baa68b.yaml b/releasenotes/notes/handle-deprecated-rabbitmq-package-archive-47548e7a41baa68b.yaml
new file mode 100644
index 000000000..b24cc3cdc
--- /dev/null
+++ b/releasenotes/notes/handle-deprecated-rabbitmq-package-archive-47548e7a41baa68b.yaml
@@ -0,0 +1,7 @@
+---
+fixes:
+ - |
+ `As announced in July 2025 <https://www.rabbitmq.com/blog/2025/07/16/debian-apt-repositories-are-moving>`__,
+ the RabbitMQ project has changed the location and signing key for their Debian and
+ Ubuntu packages. The repository configuration has been updated accordingly.
+ `LP#2131736 <https://launchpad.net/bugs/2131736>`__
diff --git a/releasenotes/notes/image-purpose-1884e00f993e09d0.yaml b/releasenotes/notes/image-purpose-1884e00f993e09d0.yaml
new file mode 100644
index 000000000..0296e9e1b
--- /dev/null
+++ b/releasenotes/notes/image-purpose-1884e00f993e09d0.yaml
@@ -0,0 +1,7 @@
+---
+prelude: >
+ The Kolla project publishes images to quay.io.
+ These are however only intended for demonstration and testing purposes.
+ In particular, they do not undergo any security scrutiny. If you intend to
+ deploy Kolla for production purposes, you are advised to create and curate your
+ own set of images.
diff --git a/releasenotes/notes/influxdb-repo-gpg-key-04eb924f249e54a5.yaml b/releasenotes/notes/influxdb-repo-gpg-key-04eb924f249e54a5.yaml
new file mode 100644
index 000000000..07b865f2c
--- /dev/null
+++ b/releasenotes/notes/influxdb-repo-gpg-key-04eb924f249e54a5.yaml
@@ -0,0 +1,6 @@
+---
+fixes:
+ - |
+ Updates the InfluxDB repository GPG key from the expired
+ ``influxdata-archive_compat.key`` to the recommended
+ ``influxdata-archive.key`` as per https://repos.influxdata.com.
diff --git a/releasenotes/notes/ironic-pxe-filter-b3b29090b0661ca2.yaml b/releasenotes/notes/ironic-pxe-filter-b3b29090b0661ca2.yaml
new file mode 100644
index 000000000..ffe875c34
--- /dev/null
+++ b/releasenotes/notes/ironic-pxe-filter-b3b29090b0661ca2.yaml
@@ -0,0 +1,4 @@
+---
+features:
+ - |
+ Adds ``ironic-pxe-filter`` container image.
diff --git a/releasenotes/notes/ironic-pxe-syslinux-tftpboot-3dc6415ed140dc50.yaml b/releasenotes/notes/ironic-pxe-syslinux-tftpboot-3dc6415ed140dc50.yaml
new file mode 100644
index 000000000..a2764704b
--- /dev/null
+++ b/releasenotes/notes/ironic-pxe-syslinux-tftpboot-3dc6415ed140dc50.yaml
@@ -0,0 +1,6 @@
+---
+fixes:
+ - |
+ Install syslinux-tftpboot in the ironic-pxe RPM image on all architectures
+ so TFTP boot files (pxelinux.0, chain.c32, ldlinux.c32) are present on
+ aarch64.
diff --git a/releasenotes/notes/mariadb-11.4-b66b5baf9f5e6cd0.yaml b/releasenotes/notes/mariadb-11.4-b66b5baf9f5e6cd0.yaml
new file mode 100644
index 000000000..9fa74e899
--- /dev/null
+++ b/releasenotes/notes/mariadb-11.4-b66b5baf9f5e6cd0.yaml
@@ -0,0 +1,5 @@
+---
+upgrade:
+ - |
+ Updates ``MariaDB`` to the ``11.4`` LTS release, which is supported until
+ 29 May 2029.
diff --git a/releasenotes/notes/neutron-metadata-agent-wrapper-scripts-d6163080d169ea14.yaml b/releasenotes/notes/neutron-metadata-agent-wrapper-scripts-d6163080d169ea14.yaml
new file mode 100644
index 000000000..8155aa568
--- /dev/null
+++ b/releasenotes/notes/neutron-metadata-agent-wrapper-scripts-d6163080d169ea14.yaml
@@ -0,0 +1,7 @@
+---
+features:
+ - |
+ The neutron wrapper scripts, which were introduced in
+ I679ac66186d457ae53f89469fe22c5662089019a, are now included in the
+ ``neutron-metadata-agent`` container, making it possible to run
+ haproxy processes as separate containers.
diff --git a/releasenotes/notes/opensearch-upgrade-9e263a65f015a376.yaml b/releasenotes/notes/opensearch-upgrade-9e263a65f015a376.yaml
index d7e00e331..9c3f5a300 100644
--- a/releasenotes/notes/opensearch-upgrade-9e263a65f015a376.yaml
+++ b/releasenotes/notes/opensearch-upgrade-9e263a65f015a376.yaml
@@ -1,4 +1,4 @@
---
upgrade:
- |
- Update OpenSearch and OpenSearch Dashboards to version 3.x.
+ Updates ``OpenSearch`` and ``OpenSearch Dashboards`` to version 3.x.
diff --git a/releasenotes/notes/rabbitmq-41-d881d0b6bbf46446.yaml b/releasenotes/notes/rabbitmq-41-d881d0b6bbf46446.yaml
index 8046fc722..2456bcf66 100644
--- a/releasenotes/notes/rabbitmq-41-d881d0b6bbf46446.yaml
+++ b/releasenotes/notes/rabbitmq-41-d881d0b6bbf46446.yaml
@@ -1,4 +1,4 @@
---
upgrade:
- |
- ``rabbitmq`` version has been updated to ``4.1``.
+ Updates ``RabbitMQ`` to version ``4.1``.
diff --git a/releasenotes/notes/rabbitmq-42-84cf0d09c9f33ef4.yaml b/releasenotes/notes/rabbitmq-42-84cf0d09c9f33ef4.yaml
new file mode 100644
index 000000000..f30512f6e
--- /dev/null
+++ b/releasenotes/notes/rabbitmq-42-84cf0d09c9f33ef4.yaml
@@ -0,0 +1,4 @@
+---
+upgrade:
+ - |
+ ``rabbitmq`` version has been updated to ``4.2``.
diff --git a/releasenotes/notes/releasenotes/notes/neutron-ovn-vpn-agent-kolla-image-979df04014ed9440.yaml b/releasenotes/notes/releasenotes/notes/neutron-ovn-vpn-agent-kolla-image-979df04014ed9440.yaml
new file mode 100644
index 000000000..fa67df975
--- /dev/null
+++ b/releasenotes/notes/releasenotes/notes/neutron-ovn-vpn-agent-kolla-image-979df04014ed9440.yaml
@@ -0,0 +1,4 @@
+---
+features:
+ - |
+ Added the neutron ovn vpn agent container image (``neutron-ovn-vpn-agent``)
diff --git a/releasenotes/notes/remove-mariadb-clustercheck-427a6cfb3f39c508.yaml b/releasenotes/notes/remove-mariadb-clustercheck-427a6cfb3f39c508.yaml
new file mode 100644
index 000000000..2a6fcadba
--- /dev/null
+++ b/releasenotes/notes/remove-mariadb-clustercheck-427a6cfb3f39c508.yaml
@@ -0,0 +1,5 @@
+---
+upgrade:
+ - |
+ Dropped support for building MariaDB clustercheck container image as it
+ will not be compatible with MariaDB 11.4 (the next LTS version).
diff --git a/releasenotes/notes/remove-prometheus-ovn-exporter-c5f5005b4d1a4b12.yaml b/releasenotes/notes/remove-prometheus-ovn-exporter-c5f5005b4d1a4b12.yaml
new file mode 100644
index 000000000..04382375e
--- /dev/null
+++ b/releasenotes/notes/remove-prometheus-ovn-exporter-c5f5005b4d1a4b12.yaml
@@ -0,0 +1,5 @@
+---
+upgrade:
+ - |
+ Removes the ``prometheus-ovn-exporter`` image because it is unused by
+ Kolla Ansible and the upstream repository was archived in December 2024.
diff --git a/releasenotes/notes/repos-yaml-rpm-support-01ff7f5fc3b9ecf2.yaml b/releasenotes/notes/repos-yaml-rpm-support-01ff7f5fc3b9ecf2.yaml
new file mode 100644
index 000000000..b3815928f
--- /dev/null
+++ b/releasenotes/notes/repos-yaml-rpm-support-01ff7f5fc3b9ecf2.yaml
@@ -0,0 +1,5 @@
+---
+features:
+ - |
+ Adds support for configuring RPM distributions repositories
+ using ``repos.yaml`` functionality.
diff --git a/releasenotes/notes/rocky-10-4111fa0160be14ab.yaml b/releasenotes/notes/rocky-10-4111fa0160be14ab.yaml
new file mode 100644
index 000000000..98ef21f28
--- /dev/null
+++ b/releasenotes/notes/rocky-10-4111fa0160be14ab.yaml
@@ -0,0 +1,12 @@
+---
+features:
+ - |
+ Adds support for Rocky Linux 10 as a base container image. From the 2025.2
+ release onward, Rocky Linux 10 is the only supported Rocky Linux major version.
+upgrade:
+ - |
+ Rocky Linux 9 is no longer supported as a base container image, so
+ deployments using Rocky Linux should migrate to Rocky Linux 10.
+ - |
+ The ``telegraf`` image relied on Rocky Linux 9-only packages and is therefore
+ unavailable for Rocky Linux-based builds.
diff --git a/releasenotes/notes/rocky-ovn-25.09-345468aec8cc8073.yaml b/releasenotes/notes/rocky-ovn-25.09-345468aec8cc8073.yaml
new file mode 100644
index 000000000..5af612530
--- /dev/null
+++ b/releasenotes/notes/rocky-ovn-25.09-345468aec8cc8073.yaml
@@ -0,0 +1,4 @@
+---
+features:
+ - |
+ Updates OVN to version 25.09 on Rocky Linux 10.
diff --git a/releasenotes/notes/switch-proxysql3-base-to-almalinux10-d64c97ba1a894a34.yaml b/releasenotes/notes/switch-proxysql3-base-to-almalinux10-d64c97ba1a894a34.yaml
new file mode 100644
index 000000000..bb2a0f526
--- /dev/null
+++ b/releasenotes/notes/switch-proxysql3-base-to-almalinux10-d64c97ba1a894a34.yaml
@@ -0,0 +1,5 @@
+---
+upgrade:
+ - |
+ Bumped ProxySQL 3.0.x repository to Almalinux 10 for Redhat family
+ distributions.
diff --git a/releasenotes/notes/update-packages-071d1863639fe3e3.yaml b/releasenotes/notes/update-packages-071d1863639fe3e3.yaml
new file mode 100644
index 000000000..efe10a960
--- /dev/null
+++ b/releasenotes/notes/update-packages-071d1863639fe3e3.yaml
@@ -0,0 +1,20 @@
+---
+upgrade:
+ - |
+ Updates monitoring and key infrastructure components to their latest
+ supported versions. This covers several Prometheus exporters as well as
+ ``etcd``, ``helm``, and ``letsencrypt-lego``.
+
+ * etcd: 3.5.16 -> 3.6.5
+ * helm: 3.16.3 -> 3.19.0
+ * letsencrypt-lego: 4.20.4 -> 4.27.0
+ * prometheus-blackbox-exporter: 0.25.0 -> 0.27.0
+ * prometheus-cadvisor: 0.49.2 -> 0.53.0
+ * prometheus-elasticsearch-exporter: 1.8.0 -> 1.9.0
+ * prometheus-memcached-exporter: 0.15.0 -> 0.15.3
+ * prometheus-mysqld-exporter: 0.16.0 -> 0.17.2
+ * prometheus-node-exporter: 1.8.2 -> 1.9.1
+ * prometheus-server: 3.2.1 -> 3.5.0 (LTS)
+
+ Additionally, ``prometheus-server`` now tracks the Long-Term Support (LTS)
+ channel to provide longer maintenance windows.
diff --git a/releasenotes/notes/update-prometheus-server-3.5.1-e23a9826b25573a8.yaml b/releasenotes/notes/update-prometheus-server-3.5.1-e23a9826b25573a8.yaml
new file mode 100644
index 000000000..7404ee0b3
--- /dev/null
+++ b/releasenotes/notes/update-prometheus-server-3.5.1-e23a9826b25573a8.yaml
@@ -0,0 +1,4 @@
+---
+features:
+ - |
+ Updates Prometheus to version 3.5.1.
diff --git a/releasenotes/notes/update-prometheus-services-98085e2ccf13d1fb.yaml b/releasenotes/notes/update-prometheus-services-98085e2ccf13d1fb.yaml
new file mode 100644
index 000000000..f894ffef7
--- /dev/null
+++ b/releasenotes/notes/update-prometheus-services-98085e2ccf13d1fb.yaml
@@ -0,0 +1,16 @@
+---
+upgrade:
+ - |
+ Update Prometheus Alertmanager and exporters to the latest releases:
+
+ * prometheus-alertmanager: 0.28.1 -> 0.31.1
+ * prometheus-blackbox-exporter: 0.27.0 -> 0.28.0
+ * prometheus-cadvisor: 0.53.0 -> 0.56.2
+ * prometheus-elasticsearch-exporter: 1.9.0 -> 1.10.0
+ * prometheus-libvirt-exporter: 2.2.0 -> 2.3.1
+ * prometheus-memcached-exporter: 0.15.3 -> 0.15.5
+ * prometheus-mysqld-exporter: 0.17.2 -> 0.18.0
+ * prometheus-node-exporter: 1.9.1 -> 1.10.2
+
+ prometheus-mtail and prometheus-openstack-exporter were not updated as
+ there are no later stable releases.
diff --git a/releasenotes/source/2024.1.rst b/releasenotes/source/2024.1.rst
index 4977a4f1a..6896656be 100644
--- a/releasenotes/source/2024.1.rst
+++ b/releasenotes/source/2024.1.rst
@@ -3,4 +3,4 @@
===========================
.. release-notes::
- :branch: stable/2024.1
+ :branch: unmaintained/2024.1
diff --git a/releasenotes/source/2025.2.rst b/releasenotes/source/2025.2.rst
new file mode 100644
index 000000000..4dae18d86
--- /dev/null
+++ b/releasenotes/source/2025.2.rst
@@ -0,0 +1,6 @@
+===========================
+2025.2 Series Release Notes
+===========================
+
+.. release-notes::
+ :branch: stable/2025.2
diff --git a/releasenotes/source/index.rst b/releasenotes/source/index.rst
index 30aeae854..690c29a49 100644
--- a/releasenotes/source/index.rst
+++ b/releasenotes/source/index.rst
@@ -9,6 +9,7 @@ Contents
:maxdepth: 2
unreleased
+ 2025.2
2025.1
2024.2
2024.1
diff --git a/roles/kolla-build-config/defaults/main.yml b/roles/kolla-build-config/defaults/main.yml
index 780ac07c8..81313edaf 100644
--- a/roles/kolla-build-config/defaults/main.yml
+++ b/roles/kolla-build-config/defaults/main.yml
@@ -26,7 +26,6 @@ kolla_build_sources:
openstack/gnocchi: gnocchi-base
openstack/heat: heat-base
openstack/ironic: ironic-base
- openstack/ironic-inspector: ironic-inspector
openstack/keystone: keystone-base
openstack/kuryr: kuryr-base
openstack/kuryr-libnetwork: kuryr-libnetwork
@@ -59,7 +58,6 @@ kolla_build_sources:
- tacker-base
- mistral-base-plugin-tacker
openstack/trove: trove-base
- openstack/venus: venus-base
openstack/watcher: watcher-base
openstack/zun: zun-base
@@ -78,6 +76,5 @@ kolla_build_sources:
openstack/octavia-dashboard: horizon-plugin-octavia-dashboard
openstack/tacker-horizon: horizon-plugin-tacker-dashboard
openstack/trove-dashboard: horizon-plugin-trove-dashboard
- openstack/venus-dashboard: horizon-plugin-venus-dashboard
openstack/watcher-dashboard: horizon-plugin-watcher-dashboard
openstack/zun-ui: horizon-plugin-zun-ui
diff --git a/roles/kolla-build-deps/tasks/main.yml b/roles/kolla-build-deps/tasks/main.yml
index a3fcd1473..490f13edf 100644
--- a/roles/kolla-build-deps/tasks/main.yml
+++ b/roles/kolla-build-deps/tasks/main.yml
@@ -7,12 +7,6 @@
owner: zuul
group: zuul
-- name: Dump host info to logs
- ansible.builtin.command: "{{ ansible_user_dir }}/{{ zuul.project.src_dir }}/tools/dump_info.sh"
- args:
- chdir: "{{ kolla_logs_dir }}"
- changed_when: true
-
- name: Create dir for kolla build logs
ansible.builtin.file:
path: "{{ kolla_build_logs_dir }}"
diff --git a/setup.cfg b/setup.cfg
index 1ee28f601..2634ee512 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -6,7 +6,7 @@ description_file =
author = OpenStack
author_email = openstack-discuss@lists.openstack.org
home_page = https://docs.openstack.org/kolla/latest/
-python_requires = >=3.8
+python_requires = >=3.10
license = Apache License, Version 2.0
classifier =
Environment :: OpenStack
@@ -18,11 +18,10 @@ classifier =
Programming Language :: Python :: Implementation :: CPython
Programming Language :: Python :: 3 :: Only
Programming Language :: Python :: 3
- Programming Language :: Python :: 3.8
- Programming Language :: Python :: 3.9
Programming Language :: Python :: 3.10
Programming Language :: Python :: 3.11
Programming Language :: Python :: 3.12
+ Programming Language :: Python :: 3.13
[files]
packages =
diff --git a/test-requirements.txt b/test-requirements.txt
index e9fa093f7..7e3178bd6 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -1,4 +1,7 @@
-ansible-lint<25 # MIT
+# NOTE(mnasiadka): Keeping 2.17 to satisfy py310 job
+ansible-core>=2.17; python_version < '3.11' # GPLv3
+ansible-core>=2.18,<2.20; python_version >= '3.11' # GPLv3
+ansible-lint<26 # MIT
bandit!=1.6.0,>=1.1.0 # Apache-2.0
bashate>=0.5.1 # Apache-2.0
coverage!=4.4,>=4.0 # Apache-2.0
diff --git a/tests/playbooks/copr-erlang-update.yml b/tests/playbooks/copr-erlang-update.yml
new file mode 100644
index 000000000..f3b230231
--- /dev/null
+++ b/tests/playbooks/copr-erlang-update.yml
@@ -0,0 +1,18 @@
+---
+- name: COPR Erlang update
+ hosts: all
+ tasks:
+ - name: Ensure webhook URLs are defined
+ no_log: true
+ ansible.builtin.assert:
+ that:
+ - kolla_copr_webhooks.urls is defined
+ - kolla_copr_webhooks.urls | length > 0
+ fail_msg: "Missing Zuul secret 'kolla_copr_webhooks.urls' (list of webhook URLs)."
+
+ - name: Trigger COPR builds via webhooks
+ no_log: true
+ ansible.builtin.uri:
+ url: "{{ item | trim }}"
+ method: POST
+ loop: "{{ kolla_copr_webhooks.urls }}"
diff --git a/tests/playbooks/post.yml b/tests/playbooks/post.yml
index 030663810..a5998468b 100644
--- a/tests/playbooks/post.yml
+++ b/tests/playbooks/post.yml
@@ -2,12 +2,6 @@
- name: Zuul post
hosts: all
tasks:
- - name: Dump host info to logs
- ansible.builtin.command: "{{ ansible_user_dir }}/{{ zuul.project.src_dir }}/tools/dump_info.sh"
- args:
- chdir: "{{ kolla_logs_dir }}"
- changed_when: true
-
- name: Collect various info to logs
changed_when: true
ansible.builtin.shell:
diff --git a/tests/playbooks/publish.yml b/tests/playbooks/publish.yml
index fd9124cd5..7c217fa37 100644
--- a/tests/playbooks/publish.yml
+++ b/tests/playbooks/publish.yml
@@ -12,24 +12,6 @@
reference: "{{ kolla_namespace }}/*"
register: docker_host_info
- - name: Publish to Dockerhub
- when: kolla_registry == 'dockerhub'
- block:
- - name: Login to Dockerhub
- community.docker.docker_login:
- username: "{{ kolla_dockerhub_credentials.username | trim }}"
- password: "{{ kolla_dockerhub_credentials.password | trim }}"
-
- - name: Push built container images
- community.docker.docker_image:
- name: "{{ item.RepoTags.0 }}"
- push: true
- source: local
- loop: "{{ docker_host_info.images }}"
- register: push_status
- until: push_status.failed is false
- retries: 5
-
- name: Publish to quay.io
when: kolla_registry == 'quay.io'
block:
diff --git a/tests/playbooks/run.yml b/tests/playbooks/run.yml
index c946343a5..ad3c80075 100644
--- a/tests/playbooks/run.yml
+++ b/tests/playbooks/run.yml
@@ -29,7 +29,7 @@
vars:
kolla_mirror_config:
DEFAULT:
- base_image: "quay.io/openstack.kolla/{{ base_distro }}"
+ base_image: "quay.io/opendevmirror/{{ base_distro }}"
ansible.builtin.set_fact:
kolla_build_config: "{{ kolla_build_config | combine(kolla_mirror_config, recursive=True) }}"
when: base_distro in ['debian', 'ubuntu']
diff --git a/tests/templates/template_overrides.j2 b/tests/templates/template_overrides.j2
index cc968e290..481795cd6 100644
--- a/tests/templates/template_overrides.j2
+++ b/tests/templates/template_overrides.j2
@@ -18,54 +18,15 @@ RUN echo registry={{ nodepool_npmjs_proxy }} > /etc/npmrc \
{% endblock %}
{% endraw %}
-{% if base_distro in ['centos', 'rocky'] %}
- {% if base_distro == 'centos' %}
-
-{% raw %}
-{% block base_centos_repo_overrides_post_copy %}
-{% endraw %}
-
-COPY ci-centos.repo /etc/yum.repos.d/
-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 %}
-{% endblock %}
-{% endraw %}
- {% elif base_distro == 'rocky' %}
-{#
-NOTE(hrw): Rocky is not mirrored but it uses CentOS repos which are
- #}
+{% if base_distro == 'rocky' %}
{% raw %}
{% block base_centos_repo_overrides_post_copy %}
{% endraw %}
-
-COPY ci-rocky.repo /etc/yum.repos.d/
-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
-
+RUN sed -i -e "s/^mirrorlist/#mirrorlist/g" -e "s/^#baseurl/baseurl/g" \
+ /etc/yum.repos.d/rocky.repo
{% raw %}
{% endblock %}
{% endraw %}
- {% endif %} {# if centos/rocky #}
-
-{% raw %}
-{% block base_centos_repo_overrides_post_rpm %}
-{% endraw %}
-
-RUN sed -i \
- -e "s|https://trunk.rdoproject.org|{{ nodepool_rdo_proxy }}|g" \
- /etc/yum.repos.d/delorean*.repo
-
-{% raw %}
-{% endblock %}
-
-{% block base_centos_repo_overrides_post_yum -%}
-{%- endraw -%}
- && cd /etc/yum.repos.d/ && mv CentOS*.repo epel*.repo not-for-ci/
-{%- raw -%}
-{% endblock %}
-{% endraw %}
{% endif %}
{% raw %}
@@ -73,15 +34,19 @@ RUN sed -i \
{% endraw %}
{% if base_distro == "debian" %}
-RUN sed -i -e "s|http://deb.debian.org|[trusted=yes] http://{{ nodepool_mirror_host }}|" \
- -e "s|http://security.debian.org|[trusted=yes] http://{{ nodepool_mirror_host }}|" \
- /etc/apt/sources.list
+RUN cp /etc/apt/sources.list.d/debian.sources /tmp/ && \
+ sed -i -e "s|^URIs: http://deb.debian.org/debian$|URIs: http://{{ nodepool_mirror_host }}/debian\nTrusted: yes|" \
+ -e "s|^URIs: http://deb.debian.org/debian-security|URIs: http://{{ nodepool_mirror_host }}/debian-security\nTrusted: yes|" \
+ /etc/apt/sources.list.d/debian.sources
{% elif base_distro == "ubuntu" %}
-RUN sed -i -e "s|mirror://mirrors.ubuntu.com/mirrors.txt|[trusted=yes] http://{{ nodepool_mirror_host }}/ubuntu/|" \
- -e "s|http://ports.ubuntu.com|[trusted=yes] http://{{ nodepool_mirror_host }}/ubuntu-ports|" \
- /etc/apt/sources.list
+RUN cp /etc/apt/sources.list.d/ubuntu.sources /tmp/ && \
+ sed -i -e "s|^URIs: http://archive.ubuntu.com/ubuntu/$|URIs: http://{{ nodepool_mirror_host }}/ubuntu/\nTrusted: yes|" \
+ -e "s|^URIs: http://security.ubuntu.com/ubuntu/$|URIs: http://{{ nodepool_mirror_host }}/ubuntu/\nTrusted: yes|" \
+ -e "s|^URIs: http://ports.ubuntu.com/ubuntu-ports/$|URIs: http://{{ nodepool_mirror_host }}/ubuntu-ports/\nTrusted: yes|" \
+ -e "s|^URIs: http://ubuntu-cloud.archive.canonical.com/ubuntu$|URIs: http://{{ nodepool_mirror_host }}/ubuntu-cloud-archive\nTrusted: yes|" \
+ /etc/apt/sources.list.d/ubuntu.sources
{% endif %}
{% raw %}
@@ -97,35 +62,19 @@ ENV PIP_TRUSTED_HOST=
{% if use_infra_wheels_mirror | default(true) %}
ENV PIP_EXTRA_INDEX_URL=
{% endif %}
-
RUN if [ -f /usr/etc/npmrc ]; then \
unlink /usr/etc/npmrc; \
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; \
- sed -i \
- -e "s|{{ nodepool_rdo_proxy }}|https://trunk.rdoproject.org|g" \
- /etc/yum.repos.d/delorean*.repo
-{% elif 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
+{% if base_distro == "debian" %}
+RUN if [ -f /tmp/debian.sources ]; then \
+ mv -f /tmp/debian.sources /etc/apt/sources.list.d/debian.sources; \
+ fi
{% elif base_distro == "ubuntu" %}
-RUN sed -i -e "s|\[trusted=yes\] http://{{ nodepool_mirror_host }}/ubuntu/|mirror://mirrors.ubuntu.com/mirrors.txt|" \
- -e "s|\[trusted=yes\] http://{{ nodepool_mirror_host }}/ubuntu-cloud-archive|http://ubuntu-cloud.archive.canonical.com/ubuntu|" \
- -e "s|\[trusted=yes\] http://{{ nodepool_mirror_host }}/ubuntu-ports|http://ports.ubuntu.com|" \
- /etc/apt/sources.list
+RUN if [ -f /tmp/ubuntu.sources ]; then \
+ mv -f /tmp/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources; \
+ fi
{% endif %}
{% raw %}
{% endblock %}
diff --git a/tests/test_set_config.py b/tests/test_set_config.py
index 3d4fc5a45..f29650504 100644
--- a/tests/test_set_config.py
+++ b/tests/test_set_config.py
@@ -892,3 +892,47 @@ class ConfigFileTest(base.BaseTestCase):
# Verify that the updated state was saved
mock_set_defaults_state.assert_called_once_with(expected_state)
+
+
+class ExecuteConfigCheckStateMismatchTest(base.BaseTestCase):
+
+ @mock.patch.object(set_configs, 'get_defaults_state')
+ def test_execute_config_check_raises_state_mismatch(
+ self, mock_get_defaults_state
+ ):
+ """Test execute_config_check() when state has extra config file.
+
+ This test simulates the scenario where the state file contains
+ a destination that no longer exists in config.json. It verifies:
+ - get_defaults_state() returns a state with an extra entry.
+ - execute_config_check() raises StateMismatch when config.json
+ omits a tracked destination.
+ """
+ config = {
+ "command": "/bin/true",
+ "config_files": [
+ {
+ "source": "/etc/foo/foo.conf",
+ "dest": "/etc/foo/foo.conf",
+ "owner": "user1",
+ "perm": "0644"
+ }
+ ]
+ }
+
+ mock_get_defaults_state.return_value = {
+ "/etc/foo/foo.conf": {
+ "source": "/etc/foo/foo.conf",
+ "preserve_properties": True,
+ "dest": "/etc/kolla/defaults/etc/foo/foo.conf"
+ },
+ "/etc/old/obsolete.conf": {
+ "source": "/etc/old/obsolete.conf",
+ "preserve_properties": True,
+ "dest": "/etc/kolla/defaults/etc/old/obsolete.conf"
+ }
+ }
+
+ self.assertRaises(set_configs.StateMismatch,
+ set_configs.execute_config_check,
+ config)
diff --git a/tools/dump_info.sh b/tools/dump_info.sh
deleted file mode 100755
index 26158653b..000000000
--- a/tools/dump_info.sh
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/bash
-
-set -o xtrace
-
-function dump_node_info {
- # NOTE(SamYaple): function for debugging gate
- set +o errexit
- local OLD_PATH="${PATH}"
- PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
- sudo parted -l
-
- sudo mount
-
- df -h
-
- uname -a
-
- cat /etc/*release*
-
- cat /proc/meminfo
-
- PATH="${OLD_PATH}"
- set -o errexit
-}
-
-(dump_node_info 2>&1) > node_info_$(date +%s)
diff --git a/tox.ini b/tox.ini
index 4289657a2..30e5fe85b 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,10 +1,8 @@
[tox]
minversion = 3.18
envlist = pep8,py310-{docker,podman}
-ignore_basepython_conflict = True
[testenv]
-basepython = python3
usedevelop = True
allowlist_externals = find
rm
diff --git a/zuul.d/base.yaml b/zuul.d/base.yaml
new file mode 100644
index 000000000..e071fd589
--- /dev/null
+++ b/zuul.d/base.yaml
@@ -0,0 +1,50 @@
+---
+- job:
+ name: kolla-base
+ parent: base
+ timeout: 10800
+ post-timeout: 10800
+ pre-run: tests/playbooks/pre.yml
+ run: tests/playbooks/run.yml
+ post-run: tests/playbooks/post.yml
+ attempts: 5
+ roles:
+ - zuul: openstack/ansible-collection-kolla
+ irrelevant-files:
+ - ^.*\.rst$
+ - ^doc/.*
+ - ^etc/.*
+ - ^releasenotes/.*$
+ - ^specs/.*$
+ - ^test-requirements.txt$
+ - ^zuul\.d/
+ - ^\..+
+ - ^contrib/
+ - ^LICENSE$
+ - ^tox\.ini$
+ vars:
+ base_arch: "{{ 'aarch64' if 'arm64' in zuul.job else 'x86_64' }}"
+ base_distro: "{{ zuul.job.split('-').2 }}"
+ base_distro_version: "{{ zuul.job.split('-').3 }}"
+ publisher: false
+ container_engine: "docker"
+ extra-vars:
+ kolla_logs_dir: "{{ zuul_output_dir }}/logs/kolla"
+ kolla_build_logs_dir: "{{ kolla_logs_dir }}/build"
+ virtualenv_path: "/tmp/kolla-virtualenv"
+ kolla_build_template_overrides_path: "{{ zuul.executor.work_root }}/\
+ {{ zuul.projects['opendev.org/openstack/kolla'].src_dir }}\
+ /tests/templates/template_overrides.j2"
+
+- job:
+ name: kolla-base-podman
+ parent: kolla-base
+ vars:
+ container_engine: "podman"
+ configure_ephemeral_mountpoint: "/var/lib/containers"
+
+- job:
+ name: kolla-build-no-infra-wheels-base
+ parent: kolla-base
+ vars:
+ use_infra_wheels_mirror: false
diff --git a/zuul.d/centos.yaml b/zuul.d/centos.yaml
new file mode 100644
index 000000000..3c48f9e0c
--- /dev/null
+++ b/zuul.d/centos.yaml
@@ -0,0 +1,31 @@
+---
+- job:
+ name: kolla-build-centos-10s
+ parent: kolla-base
+ nodeset: kolla-centos-10s-8GB
+ voting: false
+
+- job:
+ name: kolla-build-centos-10s-arm64
+ parent: kolla-build-centos-10s
+ nodeset: kolla-centos-10s-arm64-8GB
+ voting: false
+
+- job:
+ name: kolla-build-centos-10s-no-infra-wheels
+ parent: kolla-build-no-infra-wheels-base
+ nodeset: kolla-centos-10s-8GB
+
+- project-template:
+ name: kolla-build-centos
+ description: |
+ Runs Kolla CentOS build jobs.
+ check:
+ jobs:
+ - kolla-build-centos-10s
+ check-arm64:
+ jobs:
+ - kolla-build-centos-10s-arm64
+ experimental:
+ jobs:
+ - kolla-build-centos-10s-no-infra-wheels
diff --git a/zuul.d/debian.yaml b/zuul.d/debian.yaml
new file mode 100644
index 000000000..bebea13b7
--- /dev/null
+++ b/zuul.d/debian.yaml
@@ -0,0 +1,72 @@
+---
+- job:
+ name: kolla-build-debian-trixie
+ parent: kolla-base
+ nodeset: kolla-debian-trixie-8GB
+
+- job:
+ name: kolla-build-debian-trixie-podman
+ parent: kolla-base-podman
+ nodeset: kolla-debian-trixie-8GB
+
+- job:
+ name: kolla-build-debian-trixie-arm64
+ parent: kolla-build-debian-trixie
+ nodeset: kolla-debian-trixie-arm64-8GB
+ voting: false
+
+- job:
+ name: kolla-publish-debian-trixie-quay
+ parent: kolla-build-debian-trixie
+ post-run: tests/playbooks/publish.yml
+ vars:
+ publisher: true
+ kolla_registry: quay.io
+ kolla_namespace: openstack.kolla
+ secrets:
+ - name: kolla_quay_io_creds
+ secret: kolla_quay_io_creds_jan_2026
+ - name: kolla_quay_io_api
+ secret: kolla_quay_io_api_jan_2026
+
+- job:
+ name: kolla-publish-debian-trixie-arm64-quay
+ parent: kolla-build-debian-trixie-arm64
+ post-run: tests/playbooks/publish.yml
+ vars:
+ publisher: true
+ kolla_registry: quay.io
+ kolla_namespace: openstack.kolla
+ secrets:
+ - name: kolla_quay_io_creds
+ secret: kolla_quay_io_creds_jan_2026
+ - name: kolla_quay_io_api
+ secret: kolla_quay_io_api_jan_2026
+
+- job:
+ name: kolla-build-debian-trixie-no-infra-wheels
+ parent: kolla-build-no-infra-wheels-base
+ nodeset: kolla-debian-trixie-8GB
+
+- project-template:
+ name: kolla-build-debian
+ description: |
+ Runs Kolla Debian build jobs.
+ check:
+ jobs:
+ - kolla-build-debian-trixie
+ - kolla-build-debian-trixie-podman
+ check-arm64:
+ jobs:
+ - kolla-build-debian-trixie-arm64
+ gate:
+ jobs:
+ - kolla-build-debian-trixie
+ - kolla-build-debian-trixie-podman
+ experimental:
+ jobs:
+ - kolla-build-debian-trixie-no-infra-wheels
+ periodic:
+ jobs:
+ - kolla-publish-debian-trixie-quay
+ - kolla-publish-debian-trixie-arm64-quay
diff --git a/zuul.d/nodesets.yaml b/zuul.d/nodesets.yaml
new file mode 100644
index 000000000..1c85b45fb
--- /dev/null
+++ b/zuul.d/nodesets.yaml
@@ -0,0 +1,59 @@
+---
+- nodeset:
+ name: kolla-centos-10s-8GB
+ nodes:
+ - name: primary
+ label: centos-10-stream-8GB
+
+- nodeset:
+ name: kolla-centos-10s-arm64-8GB
+ nodes:
+ - name: primary
+ label: centos-10-stream-arm64-8GB
+
+- nodeset:
+ name: kolla-debian-bookworm-8GB
+ nodes:
+ - name: primary
+ label: debian-bookworm-8GB
+- nodeset:
+ name: kolla-debian-bookworm-arm64-8GB
+ nodes:
+ - name: primary
+ label: debian-bookworm-arm64-8GB
+
+- nodeset:
+ name: kolla-debian-trixie-8GB
+ nodes:
+ - name: primary
+ label: debian-trixie-8GB
+
+- nodeset:
+ name: kolla-debian-trixie-arm64-8GB
+ nodes:
+ - name: primary
+ label: debian-trixie-arm64-8GB
+
+- nodeset:
+ name: kolla-rocky-10-8GB
+ nodes:
+ - name: primary
+ label: rockylinux-10-8GB
+
+- nodeset:
+ name: kolla-rocky-10-arm64-8GB
+ nodes:
+ - name: primary
+ label: rockylinux-10-arm64-8GB
+
+- nodeset:
+ name: kolla-ubuntu-noble-8GB
+ nodes:
+ - name: primary
+ label: ubuntu-noble-8GB
+
+- nodeset:
+ name: kolla-ubuntu-noble-arm64-8GB
+ nodes:
+ - name: primary
+ label: ubuntu-noble-arm64-8GB
diff --git a/zuul.d/periodics/copr.yaml b/zuul.d/periodics/copr.yaml
new file mode 100644
index 000000000..5b0f9f644
--- /dev/null
+++ b/zuul.d/periodics/copr.yaml
@@ -0,0 +1,18 @@
+---
+- job:
+ name: kolla-copr-erlang-update
+ parent: base
+ nodeset: kolla-ubuntu-noble-8GB
+ timeout: 3600
+ run: tests/playbooks/copr-erlang-update.yml
+ secrets:
+ - name: kolla_copr_webhooks
+ secret: kolla_copr_webhooks_jan_2026
+
+- project-template:
+ name: kolla-periodic-copr
+ description: |
+ Runs Kolla COPR repository refresh periodic jobs.
+ periodic-weekly:
+ jobs:
+ - kolla-copr-erlang-update
diff --git a/zuul.d/project.yaml b/zuul.d/project.yaml
new file mode 100644
index 000000000..f8652aaf7
--- /dev/null
+++ b/zuul.d/project.yaml
@@ -0,0 +1,28 @@
+---
+- project:
+ queue: kolla
+
+- project:
+ templates:
+ - check-requirements
+ - kolla-build-centos
+ - kolla-build-debian
+ - kolla-build-rocky
+ - kolla-build-ubuntu
+ - kolla-periodic-copr
+ - kolla-scenario-aio
+ - kolla-scenario-bifrost
+ - kolla-scenario-cells
+ - kolla-scenario-cephadm
+ - kolla-scenario-ironic
+ - kolla-scenario-mariadb
+ - kolla-scenario-masakari
+ - kolla-scenario-octavia
+ - kolla-scenario-ovn
+ - kolla-tox-genconfig
+ - openstack-python3-jobs
+ - openstack-python3-jobs-arm64
+ - openstack-cover-jobs
+ - periodic-stable-jobs
+ - publish-openstack-docs-pti
+ - release-notes-jobs-python3
diff --git a/zuul.d/rocky.yaml b/zuul.d/rocky.yaml
new file mode 100644
index 000000000..52dedb8dd
--- /dev/null
+++ b/zuul.d/rocky.yaml
@@ -0,0 +1,57 @@
+---
+- job:
+ name: kolla-build-rocky-10
+ parent: kolla-base
+ nodeset: kolla-rocky-10-8GB
+
+- job:
+ name: kolla-build-rocky-10-podman
+ parent: kolla-base-podman
+ nodeset: kolla-rocky-10-8GB
+
+- job:
+ name: kolla-build-rocky-10-arm64
+ parent: kolla-build-rocky-10
+ nodeset: kolla-rocky-10-arm64-8GB
+ voting: false
+
+- job:
+ name: kolla-build-rocky-10-no-infra-wheels
+ parent: kolla-build-no-infra-wheels-base
+ nodeset: kolla-rocky-10-8GB
+
+- job:
+ name: kolla-publish-rocky-10-quay
+ parent: kolla-build-rocky-10
+ post-run: tests/playbooks/publish.yml
+ vars:
+ publisher: true
+ kolla_registry: quay.io
+ kolla_namespace: openstack.kolla
+ secrets:
+ - name: kolla_quay_io_creds
+ secret: kolla_quay_io_creds_jan_2026
+ - name: kolla_quay_io_api
+ secret: kolla_quay_io_api_jan_2026
+
+- project-template:
+ name: kolla-build-rocky
+ description: |
+ Runs Kolla Rocky Linux build jobs.
+ check:
+ jobs:
+ - kolla-build-rocky-10
+ - kolla-build-rocky-10-podman
+ check-arm64:
+ jobs:
+ - kolla-build-rocky-10-arm64
+ experimental:
+ jobs:
+ - kolla-build-rocky-10-no-infra-wheels
+ gate:
+ jobs:
+ - kolla-build-rocky-10
+ - kolla-build-rocky-10-podman
+ periodic:
+ jobs:
+ - kolla-publish-rocky-10-quay
diff --git a/zuul.d/scenarios/aio.yaml b/zuul.d/scenarios/aio.yaml
new file mode 100644
index 000000000..392ea7b22
--- /dev/null
+++ b/zuul.d/scenarios/aio.yaml
@@ -0,0 +1,41 @@
+---
+- project-template:
+ name: kolla-scenario-aio
+ description: |
+ Runs Kolla-Ansible AIO jobs on all Kolla changes.
+ check:
+ jobs:
+ - kolla-ansible-centos-10s:
+ files: ^docker/
+ - kolla-ansible-debian-trixie:
+ files: ^docker/
+ - kolla-ansible-debian-bookworm-upgrade:
+ files: ^docker/
+ - kolla-ansible-rocky-10:
+ files: ^docker/
+ - kolla-ansible-rocky-10-upgrade:
+ files: ^docker/
+ - kolla-ansible-ubuntu-noble:
+ files: ^docker/
+ - kolla-ansible-ubuntu-noble-upgrade:
+ files: ^docker/
+ check-arm64:
+ jobs:
+ - kolla-ansible-centos-10s-aarch64:
+ files: ^docker/
+ - kolla-ansible-debian-bookworm-aarch64:
+ files: ^docker/
+ gate:
+ jobs:
+ - kolla-ansible-debian-trixie:
+ files: ^docker/
+ - kolla-ansible-debian-bookworm-upgrade:
+ files: ^docker/
+ - kolla-ansible-rocky-10:
+ files: ^docker/
+ - kolla-ansible-rocky-10-upgrade:
+ files: ^docker/
+ - kolla-ansible-ubuntu-noble:
+ files: ^docker/
+ - kolla-ansible-ubuntu-noble-upgrade:
+ files: ^docker/
diff --git a/zuul.d/scenarios/bifrost.yaml b/zuul.d/scenarios/bifrost.yaml
new file mode 100644
index 000000000..e72f5b406
--- /dev/null
+++ b/zuul.d/scenarios/bifrost.yaml
@@ -0,0 +1,13 @@
+---
+- project-template:
+ name: kolla-scenario-bifrost
+ description: |
+ Runs Kolla-Ansible Bifrost scenario jobs on particular Kolla changes.
+ check:
+ jobs:
+ - kolla-ansible-debian-bookworm-bifrost:
+ files: ^docker/bifrost/
+ - kolla-ansible-rocky-10-bifrost:
+ files: ^docker/bifrost/
+ - kolla-ansible-ubuntu-noble-bifrost:
+ files: ^docker/bifrost/
diff --git a/zuul.d/scenarios/cells.yaml b/zuul.d/scenarios/cells.yaml
new file mode 100644
index 000000000..474bd3ec6
--- /dev/null
+++ b/zuul.d/scenarios/cells.yaml
@@ -0,0 +1,13 @@
+---
+- project-template:
+ name: kolla-scenario-cells
+ description: |
+ Runs Kolla-Ansible Nova Cells scenario jobs on particular Kolla changes.
+ check:
+ jobs:
+ - kolla-ansible-debian-bookworm-cells:
+ files: ^docker/proxysql/
+ - kolla-ansible-rocky-10-cells:
+ files: ^docker/proxysql/
+ - kolla-ansible-ubuntu-noble-cells:
+ files: ^docker/proxysql/
diff --git a/zuul.d/scenarios/cephadm.yaml b/zuul.d/scenarios/cephadm.yaml
new file mode 100644
index 000000000..c41162ee8
--- /dev/null
+++ b/zuul.d/scenarios/cephadm.yaml
@@ -0,0 +1,19 @@
+---
+- project-template:
+ name: kolla-scenario-cephadm
+ description: |
+ Runs Kolla-Ansible CephAdm scenario jobs on particular Kolla changes.
+ check:
+ jobs:
+ - kolla-ansible-debian-bookworm-cephadm:
+ files: ^docker\/(base|cinder|glance|mariadb-server|openstack-base|rabbitmq)\/.*
+ - kolla-ansible-debian-bookworm-cephadm-upgrade:
+ files: ^docker\/(base|cinder|glance|mariadb-server|openstack-base|rabbitmq)\/.*
+ - kolla-ansible-rocky-10-cephadm:
+ files: ^docker\/(base|cinder|glance|mariadb-server|openstack-base|rabbitmq)\/.*
+ - kolla-ansible-rocky-10-cephadm-upgrade:
+ files: ^docker\/(base|cinder|glance|mariadb-server|openstack-base|rabbitmq)\/.*
+ - kolla-ansible-ubuntu-noble-cephadm:
+ files: ^docker\/(base|cinder|glance|mariadb-server|openstack-base|rabbitmq)\/.*
+ - kolla-ansible-ubuntu-noble-cephadm-upgrade:
+ files: ^docker\/(base|cinder|glance|mariadb-server|openstack-base|rabbitmq)\/.*
diff --git a/zuul.d/scenarios/ironic.yaml b/zuul.d/scenarios/ironic.yaml
new file mode 100644
index 000000000..4c501ad32
--- /dev/null
+++ b/zuul.d/scenarios/ironic.yaml
@@ -0,0 +1,13 @@
+---
+- project-template:
+ name: kolla-scenario-ironic
+ description: |
+ Runs Kolla-Ansible Ironic scenario jobs on particular Kolla changes.
+ check:
+ jobs:
+ - kolla-ansible-debian-bookworm-ironic:
+ files: ^docker\/(base|dnsmasq|ironic|ironic-inspector|iscsid|openstack-base)\/.*
+ - kolla-ansible-rocky-10-ironic:
+ files: ^docker\/(base|dnsmasq|ironic|ironic-inspector|iscsid|openstack-base)\/.*
+ - kolla-ansible-ubuntu-noble-ironic:
+ files: ^docker\/(base|dnsmasq|ironic|ironic-inspector|iscsid|openstack-base)\/.*
diff --git a/zuul.d/scenarios/mariadb.yaml b/zuul.d/scenarios/mariadb.yaml
new file mode 100644
index 000000000..f89e8f087
--- /dev/null
+++ b/zuul.d/scenarios/mariadb.yaml
@@ -0,0 +1,13 @@
+---
+- project-template:
+ name: kolla-scenario-mariadb
+ description: |
+ Runs Kolla-Ansible MariaDB scenario jobs on particular Kolla changes.
+ check:
+ jobs:
+ - kolla-ansible-debian-bookworm-mariadb:
+ files: ^docker/(base|mariadb-server)/
+ - kolla-ansible-rocky-10-mariadb:
+ files: ^docker/(base|mariadb-server)/
+ - kolla-ansible-ubuntu-noble-mariadb:
+ files: ^docker/(base|mariadb-server)/
diff --git a/zuul.d/scenarios/masakari.yaml b/zuul.d/scenarios/masakari.yaml
new file mode 100644
index 000000000..0974a2aff
--- /dev/null
+++ b/zuul.d/scenarios/masakari.yaml
@@ -0,0 +1,13 @@
+---
+- project-template:
+ name: kolla-scenario-masakari
+ description: |
+ Runs Kolla-Ansible Masakari scenario jobs on particular Kolla changes.
+ check:
+ jobs:
+ - kolla-ansible-debian-bookworm-masakari:
+ files: ^docker/(base|masakari|openstack-base)/
+ - kolla-ansible-rocky-10-masakari:
+ files: ^docker/(base|masakari|openstack-base)/
+ - kolla-ansible-ubuntu-noble-masakari:
+ files: ^docker/(base|masakari|openstack-base)/
diff --git a/zuul.d/scenarios/octavia.yaml b/zuul.d/scenarios/octavia.yaml
new file mode 100644
index 000000000..e708090f2
--- /dev/null
+++ b/zuul.d/scenarios/octavia.yaml
@@ -0,0 +1,11 @@
+---
+- project-template:
+ name: kolla-scenario-octavia
+ description: |
+ Runs Kolla-Ansible Octavia scenario jobs on particular Kolla changes.
+ check:
+ jobs:
+ - kolla-ansible-debian-bookworm-octavia:
+ files: ^docker/(base|neutron|octavia|openstack-base|openvswitch|ovn)/
+ - kolla-ansible-ubuntu-noble-octavia:
+ files: ^docker/(base|neutron|octavia|openstack-base|openvswitch|ovn)/
diff --git a/zuul.d/scenarios/ovn.yaml b/zuul.d/scenarios/ovn.yaml
new file mode 100644
index 000000000..a531a02b4
--- /dev/null
+++ b/zuul.d/scenarios/ovn.yaml
@@ -0,0 +1,13 @@
+---
+- project-template:
+ name: kolla-scenario-ovn
+ description: |
+ Runs Kolla-Ansible OVN scenario jobs on particular Kolla changes.
+ check:
+ jobs:
+ - kolla-ansible-debian-bookworm-ovn:
+ files: ^docker/(base|neutron|openstack-base|openvswitch|ovn)/
+ - kolla-ansible-rocky-10-ovn:
+ files: ^docker/(base|neutron|openstack-base|openvswitch|ovn)/
+ - kolla-ansible-ubuntu-noble-ovn:
+ files: ^docker/(base|neutron|openstack-base|openvswitch|ovn)/
diff --git a/zuul.d/secrets.yaml b/zuul.d/secrets.yaml
new file mode 100644
index 000000000..973350100
--- /dev/null
+++ b/zuul.d/secrets.yaml
@@ -0,0 +1,68 @@
+---
+- secret:
+ name: kolla_quay_io_creds_jan_2026
+ data:
+ username: !encrypted/pkcs1-oaep
+ - ErjFWydLer2Pxmg9lZi+Ru2y26IT1BtfdKtueWwNM6UFb52vlbN0KTlDLMqBT9gb60KHw
+ pp+bUnlj0mG+LNVH9Sa93Ux7+g2j+2sh7JovPYLf4N67U+J6DgYeEqavU8KVYo/5eSr5x
+ ZP+YtfEg/pjhROJQW+I7FA+q3YkOHCcvX9GdiszjWhgQdGAXxPhzFsfrwZ2p7yXWoY6If
+ uro0SyPAFvfs9aq8s5rU4YFhCk2ToUwXz2UyJpOI6OmJCNYFZkRwi7Ot0uBBJXnKl2uSl
+ mq5PmliG5qWkjGCB5W+IJrlnHBQGJFuIL2mbWSASL8HdCg/X/sc6DcVjFYylAYm/nfHr8
+ mM2wz9fs7mFGNcpdYnHmcJXkDV7iIOO1zNJASykR2TTSEljGI5ImlgSD2t/3ZfNExtw8o
+ bOZYcnHjfTjmwAymQ0mBerc8d5SaHgm3JOZ/YKrQJllR7SDRMIMnIwTzMNGbqoJ3Or9ir
+ v6J3u3h6AWSZhkdOYc5dnTic5VBiFgbhmyVv0j3W9CpORZMrnzpbFMaCVbgvyMZ3OYBGa
+ 112khOQOA7xazMTfoTOB+MSl5QeHvHJKbHYsphmPYPtjVCBAAs4PxaSAAFGLoGvG268rx
+ rXb2FFYk1Yb4PdYzxOByEL/1PwWTFPtjSHhYSlKQfGF45T8LvWJmgYlqTgK1c8=
+ password: !encrypted/pkcs1-oaep
+ - bDvuushT06Xz//YFxAaIM1AWRm8oPNGTm12kRhmuXnpvb7cANH7IjO/z5C2OvSpvNEOhl
+ 5IkBNcnWMI5hhS/uI41l4dBmue5QI9/SlLIIQ9XJrZFqGwbYmbvTioIBkBcvwCDU23dy6
+ pr8n8xBoO6eNvRUDjN0wnFyiq5+vgD+fdsXtQAUHdh67q6WwYIkIbKSSVJAc8C9b1Fx52
+ JhTGlhMFLP+8KwufwBUs1udHuGxIKdqQ2nj+3S+a7codZg20rtEqImmhecSHZ3XzxlNSE
+ hSMwfgrAULHtWX3lqn09n841wejnSx6R6gG2tJ3QrUr8NuZMMMlffwc/95imPtYliIvOC
+ MmYcBO5jDz5mvbZpl4DAGzs3Q8LcBVrsIhoVeMXW5Z/DH4cDldcXzagUR8TbWB16My9GR
+ jm54zuxDX0tIO1tHa+s3SftQf32fEbJSqjEszQYw81DQEoqpNauOugfP+j/5YfWTEv7im
+ Z8WKIkgxv7dnxOxpu6d5DfmarUHIIDyA7Pd3UprQWVPXnTpff9x8zcGhiRYfBWefhCFIM
+ D+ujFoYgbSO9PguPuGFMwHtt2GHSd/gkqoypz/9mLYeY83dcW6YsrpnEQRIJYyeGr54ko
+ 0obnRaoKKlJ9O6am06D01lNhiiG8NhreNONZTbY7h8nvJXyMfYTo0zqHTJhHiY=
+
+- secret:
+ name: kolla_quay_io_api_jan_2026
+ data:
+ token: !encrypted/pkcs1-oaep
+ - I11kiXYFewlPo2Wujs/t8dcMMuqS52rb30WizTQBuJOi4sghsHASzgY3k5li/dwW/EYos
+ TmdyEfWyjrgv5y9Wi7TVYtXrXVpE5ya9ggdgMhOz1HXr3GybePlvzTqJo4kVcza3dMpIC
+ 6UchgV88d2DwTbCY+iropdEfh+DEZPA3nf8WQigoJM5ENTS2Fq017WjBQ5WEBDCUMkp2d
+ ZbNn4M1yJnfusxFKjY5BuZazVN2DNrnLA+JiaCu9+jitr1QumGN1N/6DPv4c3dr/JiBuT
+ 3Dd68CRJKlavfHllkGhOnzoSz9Kabo36QAyxuHd9MC2DBdIaXq2sopAv8adPq8J1uoGJ6
+ GaTrlVUMhUMZIXtnO3PwvrFp10K0pia9IM7II6CdKFi9BHfiNI0G8DWqnG2JqvYBEiQWs
+ f22IDPoqAPGdx02U1j3DxjYJzjOl+7KDOFlRXoGs5b3Fhy8sRtpXI6vCs9oCMXZYPq8kg
+ aj9/tCe/QulQ6v5MQpsweaUkDVThE8oki3vhN1BQg6Ft74l+MuDMTJdDSSObXJThbmLEg
+ Pe47ijg8lK5Vo14pLBqUVr2lKlv4H4DgBtz8h76Cr5S2CJ7n0VoYLojWgB/KoI+A/w/7u
+ Eck+aULrPnRwIMaA7PU8y0vigUgP62tQh/osB9TmGpi5jDFB/mB00YUnHtJBp4=
+
+- secret:
+ name: kolla_copr_webhooks_jan_2026
+ data:
+ urls:
+ - !encrypted/pkcs1-oaep |
+ bDxYK2BjxCkgskAeAHZyxXEJkomgp5k9rNEjmR2QA3ddSiI2j2C/o3FZii369X4pfH2Y6
+ QAW5vieKURmkXjVbiHMjxUGlezXpiUYA0TVdpGOmVfmzz2vy42BdQZArO5Xt1TIg+aPao
+ aGGxF355LIGIAr1RMrD3f3ex3oLROxsmgivKGJPpetHZNOFxIfJT+54tCSL/DvEJJYORp
+ S1UeSB9R9MR7Dpp0WSy1FZLrzwPvMx9Tx3HY0QTrK2+T1ooFplMo7HJnvpL3Km5XykK77
+ GaPmu3Irz5IGOyLZLdqaFepblMU0Xj/3/EvsaQsUA1VfR0mGoAIZTJmbdljtiBZ0nSLMn
+ /RrHoCk8JPM+qHtrCXglnQxzGbSzrMGbAxxIsy4CRpl2qjElxqh+nW0eimO3PVHsQfdc1
+ OULS6F37G9WuTZ2jt5kiQp+aDcDlANSSUcLppvaKvlvXTUicFWF/rZZtK8/HaefaAfSwB
+ OWxEdC1zJnFMs5puzpvCUfJt4AaP17UCPyDdTcHwCSOdM2gaX18JgKrLoV7YXX6SEGNMX
+ 6nq8hNKvICsW3DHG6HEVhLZuCRhZNWEpRLv4ihuweuFAxXUcGyvysbT/3XFMEyYJ8Smvn
+ 3ZPd5Zk5hZKZD0V0pQocHs5d/uIfwKAb/QCZ8qtsVs+bERjSFhf9fJFguVJKFg=
+ - !encrypted/pkcs1-oaep |
+ FagelGYHE9xesRXrYBbLWwlBcM0I1NoQEPoLQ/DS4+c8aJoc//uJaW8/e/37djcYs5f8r
+ SU4KvyzZrQpKGA7aHEfvM6jwODF79nNwbFjfC1mQtiVJcCsYGG7KbQLrBZp9QtFdbpHvF
+ l5dBeE+mW7HeO+T8UifbGupgORcOPHNti/yhC8ApV8tqKZh89y7+ziKMbluvAVbCwraau
+ tE5NquigzMDqqAqJHUtNSIouBGE2kWIFV8Uo6gks/XGDxab49z6wY20o2BfGr/biYHCOF
+ F4nQ8r061T6I57GhInSNlYeS2kz1TEdT37k7u1w7WwJlRgQvqJVp802AARbiPeYEC64W+
+ bK/rNOqBd+iVjEK8xKn4VsDGsU/QYMBSK6euo0Ki0G4L5ZUw8CmFiz902nS+WW1UsR9Re
+ 6v1T+Ir1UMiI1KQ5lJg52uzCKZpJ92UshMBxmRoRVXPrudYR+p1Fq3z22pw8vMkmWmLuk
+ lw2vQsUg39UwROimyApTHsXRS/pbyEvZNcuBgD3L95YofiONHYWraYJPfcuBbOrqESCjd
+ sHzJOC+DBHjgMUnEQs40KxaIVvSA9lIyRYTSKReUHzsJz8t6m9CARVTNrzt2OJjHignpI
+ lX7v5sXi1ZgUTeWaWYyzdTU71YYL5SBcCma2TJDrWo2B1JKvDRzBrIzaVewpVM=
diff --git a/zuul.d/tox.yaml b/zuul.d/tox.yaml
new file mode 100644
index 000000000..a818ff411
--- /dev/null
+++ b/zuul.d/tox.yaml
@@ -0,0 +1,23 @@
+---
+- job:
+ name: kolla-tox-genconfig
+ parent: openstack-tox
+ timeout: 2400
+ description: |
+
+ Run genconfig
+
+ Uses tox with the ``genconfig`` environment.
+ vars:
+ tox_envlist: genconfig
+
+- project-template:
+ name: kolla-tox-genconfig
+ description: |
+ Runs tox with ``genconfig`` environment.
+ check:
+ jobs:
+ - kolla-tox-genconfig
+ gate:
+ jobs:
+ - kolla-tox-genconfig
diff --git a/zuul.d/ubuntu.yaml b/zuul.d/ubuntu.yaml
new file mode 100644
index 000000000..824789287
--- /dev/null
+++ b/zuul.d/ubuntu.yaml
@@ -0,0 +1,72 @@
+---
+- job:
+ name: kolla-build-ubuntu-noble
+ parent: kolla-base
+ nodeset: kolla-ubuntu-noble-8GB
+
+- job:
+ name: kolla-build-ubuntu-noble-podman
+ parent: kolla-base-podman
+ nodeset: kolla-ubuntu-noble-8GB
+
+- job:
+ name: kolla-build-ubuntu-noble-arm64
+ parent: kolla-build-ubuntu-noble
+ nodeset: kolla-ubuntu-noble-arm64-8GB
+ voting: false
+
+- job:
+ name: kolla-publish-ubuntu-noble-quay
+ parent: kolla-build-ubuntu-noble
+ post-run: tests/playbooks/publish.yml
+ vars:
+ publisher: true
+ kolla_registry: quay.io
+ kolla_namespace: openstack.kolla
+ secrets:
+ - name: kolla_quay_io_creds
+ secret: kolla_quay_io_creds_jan_2026
+ - name: kolla_quay_io_api
+ secret: kolla_quay_io_api_jan_2026
+
+- job:
+ name: kolla-publish-ubuntu-noble-arm64-quay
+ parent: kolla-build-ubuntu-noble-arm64
+ post-run: tests/playbooks/publish.yml
+ vars:
+ publisher: true
+ kolla_registry: quay.io
+ kolla_namespace: openstack.kolla
+ secrets:
+ - name: kolla_quay_io_creds
+ secret: kolla_quay_io_creds_jan_2026
+ - name: kolla_quay_io_api
+ secret: kolla_quay_io_api_jan_2026
+
+- job:
+ name: kolla-build-ubuntu-noble-no-infra-wheels
+ parent: kolla-build-no-infra-wheels-base
+ nodeset: kolla-ubuntu-noble-8GB
+
+- project-template:
+ name: kolla-build-ubuntu
+ description: |
+ Runs Kolla Ubuntu build jobs.
+ check:
+ jobs:
+ - kolla-build-ubuntu-noble
+ - kolla-build-ubuntu-noble-podman
+ check-arm64:
+ jobs:
+ - kolla-build-ubuntu-noble-arm64
+ gate:
+ jobs:
+ - kolla-build-ubuntu-noble
+ - kolla-build-ubuntu-noble-podman
+ experimental:
+ jobs:
+ - kolla-build-ubuntu-noble-no-infra-wheels
+ periodic:
+ jobs:
+ - kolla-publish-ubuntu-noble-quay
+ - kolla-publish-ubuntu-noble-arm64-quay