diff options
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 }}" @@ -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) @@ -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 |
