)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":37855,"name":"Amir Hossein Ahmadi","display_name":"Amir Hossein","email":"sahahmadi96@gmail.com","username":"amir58118"},"change_message_id":"096769a5796f82aa4051a505aa4af4095ab3edef","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"f0143fe9_b7475e80","updated":"2025-12-20 14:20:49.000000000","message":"Nice Idea!","commit_id":"31cbe7d454f3e3146421770e796854a345cdf1a4"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"61b2e4837590b5d71143adf02f009bced4ba4d59","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"67896ae8_b96fa507","updated":"2025-12-22 13:32:31.000000000","message":"\"Labels\": {\n                \"build-date\": \"20251222\",\n                \"kolla_version\": \"21.1.0\",\n                \"maintainer\": \"Kolla Project (https://launchpad.net/kolla)\",\n                \"name\": \"keystone-ssh\",\n                \"org.opencontainers.image.authors\": \"Kolla Project (https://launchpad.net/kolla)\",\n                \"org.opencontainers.image.created\": \"2025-12-22T14:02:47.015819\",\n                \"org.opencontainers.image.description\": \"OpenStack Kolla keystone-ssh image\",\n                \"org.opencontainers.image.licenses\": \"Apache-2.0\",\n                \"org.opencontainers.image.ref.name\": \"ubuntu\",\n                \"org.opencontainers.image.revision\": \"96b54022857ccef8dc6bb11789abe32119827109\",\n                \"org.opencontainers.image.source\": \"https://opendev.org/openstack/kolla\",\n                \"org.opencontainers.image.title\": \"keystone-ssh\",\n                \"org.opencontainers.image.url\": \"https://opendev.org/openstack/kolla\",\n                \"org.opencontainers.image.version\": \"master-ubuntu-noble\"","commit_id":"7a8030ca33c0cd7c004aad16bf86d80c34c17200"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"ed9185acc491029ae4f43b10aa277f00bd58a3bc","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":23,"id":"a29baf43_7293833f","updated":"2025-12-23 08:03:58.000000000","message":"Haven’t reviewed yet, but please break out the OCI labels feature into a separate patch","commit_id":"82c9f4ff8da056984980bf481b92f9b3eaa9ba34"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"c1dde24e2b5c74e7872304d44b0fc139daaad05a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"7e2a45d0_68443bb6","in_reply_to":"a29baf43_7293833f","updated":"2026-06-19 05:35:07.000000000","message":"Done","commit_id":"82c9f4ff8da056984980bf481b92f9b3eaa9ba34"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"9247e61636a8379d00059b9d739202707bd85489","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"2bcfac91_010961b5","updated":"2025-12-29 15:56:04.000000000","message":"recheck - gpg error","commit_id":"71f28d2f3ec1e86bd02eaf679e71ec1076abd158"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"508e0873abf9a6d83acdca4190f60c07d372298c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":61,"id":"f1d8ab83_f39e8cdb","updated":"2026-06-24 11:15:44.000000000","message":"not a full review yet, but this seems to be a moving target anyway ...","commit_id":"450d420498e011388c5cf323d65f00d70420e9e6"}],"docker/barbican/barbican-base/Dockerfile.j2":[{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"963828ccafdaccef880238b9b0b026678272bdff","unresolved":true,"context_lines":[{"line_number":33,"context_line":"{{ macros.install_packages(barbican_base_packages | customizable(\"packages\")) }}"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"COPY --from\u003dbuilder /wheels /wheels"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"RUN mkdir -p /etc/barbican \\"},{"line_number":38,"context_line":"    \u0026\u0026 cp -r /wheels/etc/* /etc/barbican/ \\"},{"line_number":39,"context_line":"    \u0026\u0026 {{ macros.install_pip_packages_stage2(barbican_base_pip_packages, chain\u003dTrue) }}"}],"source_content_type":"text/x-jinja2","patch_set":59,"id":"8b8ffa5a_5015f015","line":36,"updated":"2026-06-23 11:56:56.000000000","message":"Transfer /wheels/etc/ via copy, no file duplication in the final image\nIs it the same for other services?\n\n\n\u0026\u0026 cp -r /wheels/etc/* /etc/barbican/\n\nCOPY --from\u003dbuilder /wheels/etc/ /etc/barbican/","commit_id":"49c1740e3ef0338a2a773d2a1c5933e780a9bc59"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"98165d4f6caf5a6e5d8df6b7d56f4b7eeabbf787","unresolved":true,"context_lines":[{"line_number":33,"context_line":"{{ macros.install_packages(barbican_base_packages | customizable(\"packages\")) }}"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"COPY --from\u003dbuilder /wheels /wheels"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"RUN mkdir -p /etc/barbican \\"},{"line_number":38,"context_line":"    \u0026\u0026 cp -r /wheels/etc/* /etc/barbican/ \\"},{"line_number":39,"context_line":"    \u0026\u0026 {{ macros.install_pip_packages_stage2(barbican_base_pip_packages, chain\u003dTrue) }}"}],"source_content_type":"text/x-jinja2","patch_set":59,"id":"940fcd7b_fd65fe7a","line":36,"in_reply_to":"8b8ffa5a_5015f015","updated":"2026-06-23 12:06:10.000000000","message":"the same for other services*","commit_id":"49c1740e3ef0338a2a773d2a1c5933e780a9bc59"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"237dbc2fb0c957abc88fe119479a7fe6a093c2e0","unresolved":false,"context_lines":[{"line_number":33,"context_line":"{{ macros.install_packages(barbican_base_packages | customizable(\"packages\")) }}"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"COPY --from\u003dbuilder /wheels /wheels"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"RUN mkdir -p /etc/barbican \\"},{"line_number":38,"context_line":"    \u0026\u0026 cp -r /wheels/etc/* /etc/barbican/ \\"},{"line_number":39,"context_line":"    \u0026\u0026 {{ macros.install_pip_packages_stage2(barbican_base_pip_packages, chain\u003dTrue) }}"}],"source_content_type":"text/x-jinja2","patch_set":59,"id":"fd0932ea_5439fc26","line":36,"in_reply_to":"940fcd7b_fd65fe7a","updated":"2026-06-24 10:31:18.000000000","message":"Done","commit_id":"49c1740e3ef0338a2a773d2a1c5933e780a9bc59"}],"docker/keystone/keystone-base/Dockerfile.j2":[{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"132fc209a62eccc89403fa21e742817cc0190b6d","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# --- STAGE 1: BUILDER ---"},{"line_number":2,"context_line":"FROM {{ namespace }}/{{ image_prefix }}openstack-base:{{ tag }} AS builder"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"{% import \"macros.j2\" as macros with context %}"}],"source_content_type":"text/x-jinja2","patch_set":1,"id":"27391b7e_7ceb40fb","line":1,"updated":"2025-12-05 16:41:08.000000000","message":"In my ENV\nNEW:\nkolla/keystone-fernet                                                                        2025.1-ubuntu-noble    74c1a29ac534   25 minutes ago   657MB\nkolla/keystone                                                                               2025.1-ubuntu-noble    307c4cf14253   25 minutes ago   652MB\nkolla/keystone-ssh                                                                           2025.1-ubuntu-noble    5c0b5cc5d078   25 minutes ago   660MB\nkolla/keystone-base                                                                          2025.1-ubuntu-noble    d9e13f5c1f9c   26 minutes ago   650MB\nkolla/barbican-keystone-listener                                                             2025.1-ubuntu-noble    d3c0c5cd96e7   27 minutes ago   854MB\nOLD:\nlocalhost:4000/openstack.kolla/keystone                                                      \u003cnone\u003e                 3993d5314da2   5 months ago     1.09GB\nlocalhost:4000/openstack.kolla/keystone-fernet                                               \u003cnone\u003e                 5942529a96c2   5 months ago     1.06GB\nlocalhost:4000/openstack.kolla/keystone-ssh                                                  \u003cnone\u003e                 93b440835ce8   5 months ago     1.07GB\n\nI think this is a good start to slimming down images","commit_id":"390ac7f293a94f9e8613953bbf8969535ea2d6c9"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"c1dde24e2b5c74e7872304d44b0fc139daaad05a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# --- STAGE 1: BUILDER ---"},{"line_number":2,"context_line":"FROM {{ namespace }}/{{ image_prefix }}openstack-base:{{ tag }} AS builder"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"{% import \"macros.j2\" as macros with context %}"}],"source_content_type":"text/x-jinja2","patch_set":1,"id":"c6d6c88a_6b319478","line":1,"in_reply_to":"27391b7e_7ceb40fb","updated":"2026-06-19 05:35:07.000000000","message":"Acknowledged","commit_id":"390ac7f293a94f9e8613953bbf8969535ea2d6c9"}],"docker/kolla-toolbox/Dockerfile.j2":[{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"996cd3e2d7800a5ff156abfffbd4a11d9f954e29","unresolved":true,"context_lines":[{"line_number":8,"context_line":"{% if base_package_type \u003d\u003d \u0027rpm\u0027 %}"},{"line_number":9,"context_line":"    {{ macros.enable_extra_repos([\u0027crb\u0027, \u0027epel\u0027, \u0027openvswitch\u0027, \u0027rabbitmq\u0027]) }}"},{"line_number":10,"context_line":"    {% set kolla_toolbox_builder_packages \u003d ["},{"line_number":11,"context_line":"        \u0027gcc\u0027,"},{"line_number":12,"context_line":"        \u0027git\u0027,"},{"line_number":13,"context_line":"        \u0027libffi-devel\u0027,"},{"line_number":14,"context_line":"        \u0027libxml2-devel\u0027,"}],"source_content_type":"text/x-jinja2","patch_set":60,"id":"d37760da_668cc72e","line":11,"range":{"start_line":11,"start_character":9,"end_line":11,"end_character":12},"updated":"2026-06-24 10:56:06.000000000","message":"do we really need it?","commit_id":"f8bf34e3d345bf91e3d12543c6fb956020d72391"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"01581b43c6fa7e2bcbf885a4882182d676b119ac","unresolved":false,"context_lines":[{"line_number":8,"context_line":"{% if base_package_type \u003d\u003d \u0027rpm\u0027 %}"},{"line_number":9,"context_line":"    {{ macros.enable_extra_repos([\u0027crb\u0027, \u0027epel\u0027, \u0027openvswitch\u0027, \u0027rabbitmq\u0027]) }}"},{"line_number":10,"context_line":"    {% set kolla_toolbox_builder_packages \u003d ["},{"line_number":11,"context_line":"        \u0027gcc\u0027,"},{"line_number":12,"context_line":"        \u0027git\u0027,"},{"line_number":13,"context_line":"        \u0027libffi-devel\u0027,"},{"line_number":14,"context_line":"        \u0027libxml2-devel\u0027,"}],"source_content_type":"text/x-jinja2","patch_set":60,"id":"842871ff_82cf40ce","line":11,"range":{"start_line":11,"start_character":9,"end_line":11,"end_character":12},"in_reply_to":"d37760da_668cc72e","updated":"2026-06-24 11:28:07.000000000","message":"Done","commit_id":"f8bf34e3d345bf91e3d12543c6fb956020d72391"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"996cd3e2d7800a5ff156abfffbd4a11d9f954e29","unresolved":true,"context_lines":[{"line_number":16,"context_line":"        \u0027make\u0027,"},{"line_number":17,"context_line":"        \u0027openssl-devel\u0027,"},{"line_number":18,"context_line":"        \u0027python3-devel\u0027,"},{"line_number":19,"context_line":"        \u0027rabbitmq-server-4.2.*\u0027"},{"line_number":20,"context_line":"    ] %}"},{"line_number":21,"context_line":"{% elif base_package_type \u003d\u003d \u0027deb\u0027 %}"},{"line_number":22,"context_line":"    {% set kolla_toolbox_builder_packages \u003d ["}],"source_content_type":"text/x-jinja2","patch_set":60,"id":"759267eb_22dc5bbf","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":31},"updated":"2026-06-24 10:56:06.000000000","message":"I don\u0027t think we need it in stage 1","commit_id":"f8bf34e3d345bf91e3d12543c6fb956020d72391"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"01581b43c6fa7e2bcbf885a4882182d676b119ac","unresolved":false,"context_lines":[{"line_number":16,"context_line":"        \u0027make\u0027,"},{"line_number":17,"context_line":"        \u0027openssl-devel\u0027,"},{"line_number":18,"context_line":"        \u0027python3-devel\u0027,"},{"line_number":19,"context_line":"        \u0027rabbitmq-server-4.2.*\u0027"},{"line_number":20,"context_line":"    ] %}"},{"line_number":21,"context_line":"{% elif base_package_type \u003d\u003d \u0027deb\u0027 %}"},{"line_number":22,"context_line":"    {% set kolla_toolbox_builder_packages \u003d ["}],"source_content_type":"text/x-jinja2","patch_set":60,"id":"c4493414_61bc65b2","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":31},"in_reply_to":"759267eb_22dc5bbf","updated":"2026-06-24 11:28:07.000000000","message":"Done","commit_id":"f8bf34e3d345bf91e3d12543c6fb956020d72391"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"996cd3e2d7800a5ff156abfffbd4a11d9f954e29","unresolved":true,"context_lines":[{"line_number":148,"context_line":"  [1] https://review.opendev.org/c/openstack/kolla/+/924245"},{"line_number":149,"context_line":"#}"},{"line_number":150,"context_line":"{% if base_package_type \u003d\u003d \u0027rpm\u0027 %}"},{"line_number":151,"context_line":"RUN cd /usr/bin \u0026\u0026 \\"},{"line_number":152,"context_line":"    rm -f python3 \u0026\u0026 \\"},{"line_number":153,"context_line":"    ln -s python3.12 python3"},{"line_number":154,"context_line":"{% endif %}"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"COPY --from\u003dbuilder {{ venv_path }} {{ venv_path }}"}],"source_content_type":"text/x-jinja2","patch_set":60,"id":"a9bf3b82_83c9a26a","line":153,"range":{"start_line":151,"start_character":0,"end_line":153,"end_character":28},"updated":"2026-06-24 10:56:06.000000000","message":"maybe dynamic?\n\n```suggestion\nRUN cd /usr/bin \u0026\u0026 \\\n    rm -f python3 \u0026\u0026 \\\n    KOLLA_PYTHON_VERSION\u003d$(ls python3.* | grep -E \u0027^python3\\.[0-9]+$\u0027 | sort -V | tail -n1) \u0026\u0026 \\\n    ln -s ${KOLLA_PYTHON_VERSION} python3\n```","commit_id":"f8bf34e3d345bf91e3d12543c6fb956020d72391"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"86d45cbf6673218eadc7091651faf17373efccbc","unresolved":true,"context_lines":[{"line_number":148,"context_line":"  [1] https://review.opendev.org/c/openstack/kolla/+/924245"},{"line_number":149,"context_line":"#}"},{"line_number":150,"context_line":"{% if base_package_type \u003d\u003d \u0027rpm\u0027 %}"},{"line_number":151,"context_line":"RUN cd /usr/bin \u0026\u0026 \\"},{"line_number":152,"context_line":"    rm -f python3 \u0026\u0026 \\"},{"line_number":153,"context_line":"    ln -s python3.12 python3"},{"line_number":154,"context_line":"{% endif %}"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"COPY --from\u003dbuilder {{ venv_path }} {{ venv_path }}"}],"source_content_type":"text/x-jinja2","patch_set":60,"id":"e985ceb6_ee737696","line":153,"range":{"start_line":151,"start_character":0,"end_line":153,"end_character":28},"in_reply_to":"a9bf3b82_83c9a26a","updated":"2026-06-24 10:58:20.000000000","message":"It\u0027s not required at all, but it\u0027s not related to this patch.","commit_id":"f8bf34e3d345bf91e3d12543c6fb956020d72391"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"01581b43c6fa7e2bcbf885a4882182d676b119ac","unresolved":false,"context_lines":[{"line_number":148,"context_line":"  [1] https://review.opendev.org/c/openstack/kolla/+/924245"},{"line_number":149,"context_line":"#}"},{"line_number":150,"context_line":"{% if base_package_type \u003d\u003d \u0027rpm\u0027 %}"},{"line_number":151,"context_line":"RUN cd /usr/bin \u0026\u0026 \\"},{"line_number":152,"context_line":"    rm -f python3 \u0026\u0026 \\"},{"line_number":153,"context_line":"    ln -s python3.12 python3"},{"line_number":154,"context_line":"{% endif %}"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"COPY --from\u003dbuilder {{ venv_path }} {{ venv_path }}"}],"source_content_type":"text/x-jinja2","patch_set":60,"id":"8e0a7778_e79071b3","line":153,"range":{"start_line":151,"start_character":0,"end_line":153,"end_character":28},"in_reply_to":"e985ceb6_ee737696","updated":"2026-06-24 11:28:07.000000000","message":"Done","commit_id":"f8bf34e3d345bf91e3d12543c6fb956020d72391"}],"docker/openstack-base-runtime/Dockerfile.j2":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"508e0873abf9a6d83acdca4190f60c07d372298c","unresolved":true,"context_lines":[{"line_number":19,"context_line":"        \u0027libxslt\u0027,"},{"line_number":20,"context_line":"        \u0027libyaml\u0027,"},{"line_number":21,"context_line":"        \u0027python3\u0027,"},{"line_number":22,"context_line":"        \u0027uwsgi-plugin-python3\u0027"},{"line_number":23,"context_line":"    ] %}"},{"line_number":24,"context_line":"{% elif base_package_type \u003d\u003d \u0027deb\u0027 %}"},{"line_number":25,"context_line":"    {% set openstack_runtime_packages \u003d ["}],"source_content_type":"text/x-jinja2","patch_set":60,"id":"bbd747f9_2ebe89ee","line":22,"updated":"2026-06-24 11:15:44.000000000","message":"can we still keep these lists sorted alphabetically, please?","commit_id":"f8bf34e3d345bf91e3d12543c6fb956020d72391"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"ad0afc0c921c5256f91c06f8e30b4450a8eb94a8","unresolved":false,"context_lines":[{"line_number":19,"context_line":"        \u0027libxslt\u0027,"},{"line_number":20,"context_line":"        \u0027libyaml\u0027,"},{"line_number":21,"context_line":"        \u0027python3\u0027,"},{"line_number":22,"context_line":"        \u0027uwsgi-plugin-python3\u0027"},{"line_number":23,"context_line":"    ] %}"},{"line_number":24,"context_line":"{% elif base_package_type \u003d\u003d \u0027deb\u0027 %}"},{"line_number":25,"context_line":"    {% set openstack_runtime_packages \u003d ["}],"source_content_type":"text/x-jinja2","patch_set":60,"id":"b45cb9b4_880c0281","line":22,"in_reply_to":"bbd747f9_2ebe89ee","updated":"2026-06-24 11:27:46.000000000","message":"Done","commit_id":"f8bf34e3d345bf91e3d12543c6fb956020d72391"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"508e0873abf9a6d83acdca4190f60c07d372298c","unresolved":true,"context_lines":[{"line_number":37,"context_line":"    ] %}"},{"line_number":38,"context_line":"{% endif %}"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"{{ macros.install_packages(openstack_runtime_packages | customizable(\"runtime_packages\")) }}"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"RUN mkdir -p /requirements"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-jinja2","patch_set":60,"id":"8e497c26_b4077890","line":40,"range":{"start_line":40,"start_character":70,"end_line":40,"end_character":86},"updated":"2026-06-24 11:15:44.000000000","message":"won\u0027t this new call type also be needed for depending images? and need to be mentioned in doc/source/admin/image-building.rst ?","commit_id":"f8bf34e3d345bf91e3d12543c6fb956020d72391"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"a11f62d0feafe522e556cbd888b1c353ecae1c34","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    ] %}"},{"line_number":38,"context_line":"{% endif %}"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"{{ macros.install_packages(openstack_runtime_packages | customizable(\"runtime_packages\")) }}"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"RUN mkdir -p /requirements"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-jinja2","patch_set":60,"id":"18523547_1ae530e6","line":40,"range":{"start_line":40,"start_character":70,"end_line":40,"end_character":86},"in_reply_to":"8e497c26_b4077890","updated":"2026-06-24 11:32:44.000000000","message":"I\u0027ll revert to packages, because in case of that image we\u0027ll end up with users having to set openstack_base_runtime_runtime_packages_append. Double \"runtime\" is at least confusing. But I\u0027ll also add a docs piece on how to override packages in the runtime layer.","commit_id":"f8bf34e3d345bf91e3d12543c6fb956020d72391"}],"docker/placement/placement-base/Dockerfile.j2":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"508e0873abf9a6d83acdca4190f60c07d372298c","unresolved":true,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"{% endif %}"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"{{ macros.install_packages(placement_base_packages | customizable(\"packages\")) }}"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"COPY --from\u003dbuilder /wheels /wheels"},{"line_number":46,"context_line":"COPY --from\u003dbuilder /wheels/etc/ /etc/placement/"}],"source_content_type":"text/x-jinja2","patch_set":60,"id":"10b94d73_61c3f983","line":43,"range":{"start_line":43,"start_character":67,"end_line":43,"end_character":75},"updated":"2026-06-24 11:15:44.000000000","message":"runtime_packages for consistency?","commit_id":"f8bf34e3d345bf91e3d12543c6fb956020d72391"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"a11f62d0feafe522e556cbd888b1c353ecae1c34","unresolved":true,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"{% endif %}"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"{{ macros.install_packages(placement_base_packages | customizable(\"packages\")) }}"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"COPY --from\u003dbuilder /wheels /wheels"},{"line_number":46,"context_line":"COPY --from\u003dbuilder /wheels/etc/ /etc/placement/"}],"source_content_type":"text/x-jinja2","patch_set":60,"id":"6960390d_5b469fa2","line":43,"range":{"start_line":43,"start_character":67,"end_line":43,"end_character":75},"in_reply_to":"10b94d73_61c3f983","updated":"2026-06-24 11:32:44.000000000","message":"No, let\u0027s stay with packages.","commit_id":"f8bf34e3d345bf91e3d12543c6fb956020d72391"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"16cf7e1e16d1c2f6e06026036a2cd53e26ce19a2","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"{% endif %}"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"{{ macros.install_packages(placement_base_packages | customizable(\"packages\")) }}"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"COPY --from\u003dbuilder /wheels /wheels"},{"line_number":46,"context_line":"COPY --from\u003dbuilder /wheels/etc/ /etc/placement/"}],"source_content_type":"text/x-jinja2","patch_set":60,"id":"77c571fa_ba4a5a53","line":43,"range":{"start_line":43,"start_character":67,"end_line":43,"end_character":75},"in_reply_to":"6960390d_5b469fa2","updated":"2026-06-24 11:33:57.000000000","message":"Done","commit_id":"f8bf34e3d345bf91e3d12543c6fb956020d72391"}],"docker/prometheus/prometheus-alertmanager/Dockerfile.j2":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"508e0873abf9a6d83acdca4190f60c07d372298c","unresolved":true,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"{% import \"macros.j2\" as macros with context %}"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"COPY --from\u003dbuilder /opt /opt"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"{{ macros.kolla_patch_sources() }}"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-jinja2","patch_set":60,"id":"ec4296f7_2d844a89","line":21,"updated":"2026-06-24 11:15:44.000000000","message":"I\u0027m sorry, but I don\u0027t see what this is trying to optimize. the separate builder stage doesn\u0027t make any sense at all to me in this case","commit_id":"f8bf34e3d345bf91e3d12543c6fb956020d72391"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"14191f967ab379614aa2f40c753105e9bc7ef16c","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"{% import \"macros.j2\" as macros with context %}"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"COPY --from\u003dbuilder /opt /opt"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"{{ macros.kolla_patch_sources() }}"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-jinja2","patch_set":60,"id":"65ae134c_52ea6e88","line":21,"in_reply_to":"ec4296f7_2d844a89","updated":"2026-06-24 11:24:49.000000000","message":"Done","commit_id":"f8bf34e3d345bf91e3d12543c6fb956020d72391"}],"kolla/image/kolla_worker.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"79a6de5ad2da33f6e777f9e868b7fb4199297797","unresolved":false,"context_lines":[{"line_number":750,"context_line":"            image_name \u003d os.path.basename(path)"},{"line_number":751,"context_line":"            canonical_name \u003d (self.namespace + \u0027/\u0027 + self.image_prefix +"},{"line_number":752,"context_line":"                              image_name + \u0027:\u0027 + self.tag)"},{"line_number":753,"context_line":"            parent_search_pattern \u003d re.compile(r\u0027^FROM\\s+([^\\s]+)\u0027, re.MULTILINE)"},{"line_number":754,"context_line":"            matches \u003d re.findall(parent_search_pattern, content)"},{"line_number":755,"context_line":"            if matches:"},{"line_number":756,"context_line":"                parent_name \u003d matches[-1]"}],"source_content_type":"text/x-python","patch_set":34,"id":"f4a90982_e83dd585","line":753,"updated":"2026-06-17 09:51:50.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"9aa4956aefe66324d960dfe42ba627ddde300c12"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d587d9ad8e01e1a421d065578bd82d17cbafb183","unresolved":false,"context_lines":[{"line_number":750,"context_line":"            image_name \u003d os.path.basename(path)"},{"line_number":751,"context_line":"            canonical_name \u003d (self.namespace + \u0027/\u0027 + self.image_prefix +"},{"line_number":752,"context_line":"                              image_name + \u0027:\u0027 + self.tag)"},{"line_number":753,"context_line":"            parent_search_pattern \u003d re.compile(r\u0027^FROM\\s+([^\\s]+)\u0027, re.MULTILINE)"},{"line_number":754,"context_line":"            matches \u003d re.findall(parent_search_pattern, content)"},{"line_number":755,"context_line":"            if matches:"},{"line_number":756,"context_line":"                parent_name \u003d matches[-1]"}],"source_content_type":"text/x-python","patch_set":35,"id":"5caeaff8_b9cae532","line":753,"updated":"2026-06-17 17:57:02.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"eddd575338a5b65e683ba145867c78b10c498055"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"01eca979478e684f1e0e8068ea6e4a56cdf0078d","unresolved":false,"context_lines":[{"line_number":750,"context_line":"            image_name \u003d os.path.basename(path)"},{"line_number":751,"context_line":"            canonical_name \u003d (self.namespace + \u0027/\u0027 + self.image_prefix +"},{"line_number":752,"context_line":"                              image_name + \u0027:\u0027 + self.tag)"},{"line_number":753,"context_line":"            parent_search_pattern \u003d re.compile(r\u0027^FROM\\s+([^\\s]+)\u0027, re.MULTILINE)"},{"line_number":754,"context_line":"            matches \u003d re.findall(parent_search_pattern, content)"},{"line_number":755,"context_line":"            if matches:"},{"line_number":756,"context_line":"                parent_name \u003d matches[-1]"}],"source_content_type":"text/x-python","patch_set":37,"id":"0ebbf853_324af759","line":753,"updated":"2026-06-18 08:55:59.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"0d6f3d15472967866f3b2bf835d24396e270e9b3"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"bac652a5d1c56087b596ac63960b0d9272270302","unresolved":false,"context_lines":[{"line_number":750,"context_line":"            image_name \u003d os.path.basename(path)"},{"line_number":751,"context_line":"            canonical_name \u003d (self.namespace + \u0027/\u0027 + self.image_prefix +"},{"line_number":752,"context_line":"                              image_name + \u0027:\u0027 + self.tag)"},{"line_number":753,"context_line":"            parent_search_pattern \u003d re.compile(r\u0027^FROM\\s+([^\\s]+)\u0027, re.MULTILINE)"},{"line_number":754,"context_line":"            matches \u003d re.findall(parent_search_pattern, content)"},{"line_number":755,"context_line":"            if matches:"},{"line_number":756,"context_line":"                parent_name \u003d matches[-1]"}],"source_content_type":"text/x-python","patch_set":40,"id":"a9f02de2_455f140a","line":753,"updated":"2026-06-18 13:58:35.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"fe340a90891515110058857eebe7eb3d05733cb9"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9d2fc45055101aaca1e5561baab2125e532b632c","unresolved":false,"context_lines":[{"line_number":750,"context_line":"            image_name \u003d os.path.basename(path)"},{"line_number":751,"context_line":"            canonical_name \u003d (self.namespace + \u0027/\u0027 + self.image_prefix +"},{"line_number":752,"context_line":"                              image_name + \u0027:\u0027 + self.tag)"},{"line_number":753,"context_line":"            parent_search_pattern \u003d re.compile(r\u0027^FROM\\s+([^\\s]+)\u0027, re.MULTILINE)"},{"line_number":754,"context_line":"            matches \u003d re.findall(parent_search_pattern, content)"},{"line_number":755,"context_line":"            if matches:"},{"line_number":756,"context_line":"                parent_name \u003d matches[-1]"}],"source_content_type":"text/x-python","patch_set":45,"id":"76797558_be2f4f31","line":753,"updated":"2026-06-18 16:14:41.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"d29dd59fcd313786e06f36c2932942ae0138ec64"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"34848a4ae28684fa9730ebd49ac455fcb12e2814","unresolved":false,"context_lines":[{"line_number":750,"context_line":"            image_name \u003d os.path.basename(path)"},{"line_number":751,"context_line":"            canonical_name \u003d (self.namespace + \u0027/\u0027 + self.image_prefix +"},{"line_number":752,"context_line":"                              image_name + \u0027:\u0027 + self.tag)"},{"line_number":753,"context_line":"            parent_search_pattern \u003d re.compile(r\u0027^FROM\\s+([^\\s]+)\u0027, re.MULTILINE)"},{"line_number":754,"context_line":"            matches \u003d re.findall(parent_search_pattern, content)"},{"line_number":755,"context_line":"            if matches:"},{"line_number":756,"context_line":"                parent_name \u003d matches[-1]"}],"source_content_type":"text/x-python","patch_set":47,"id":"303b2f9d_8e6e1834","line":753,"updated":"2026-06-18 18:46:31.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"e53e5ed478e8a47797e516a6b659e2306e61bf3e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"807717f1b4af33fb73a88e689c83740f90c57a68","unresolved":false,"context_lines":[{"line_number":750,"context_line":"            image_name \u003d os.path.basename(path)"},{"line_number":751,"context_line":"            canonical_name \u003d (self.namespace + \u0027/\u0027 + self.image_prefix +"},{"line_number":752,"context_line":"                              image_name + \u0027:\u0027 + self.tag)"},{"line_number":753,"context_line":"            parent_search_pattern \u003d re.compile(r\u0027^FROM\\s+([^\\s]+)\u0027, re.MULTILINE)"},{"line_number":754,"context_line":"            matches \u003d re.findall(parent_search_pattern, content)"},{"line_number":755,"context_line":"            if matches:"},{"line_number":756,"context_line":"                parent_name \u003d matches[-1]"}],"source_content_type":"text/x-python","patch_set":50,"id":"36c3900c_56455a13","line":753,"updated":"2026-06-19 08:28:30.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"1b79cf2d9b374da789c77e1ab51a18122f956448"}],"releasenotes/notes/multi-stage-builds-3d1c6748798e1f68.yaml":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"508e0873abf9a6d83acdca4190f60c07d372298c","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Implemented Docker multi-stage builds across OpenStack services and"},{"line_number":5,"context_line":"    infrastructure components to significantly reduce image sizes."}],"source_content_type":"text/x-yaml","patch_set":60,"id":"1ca62d9b_16f128f6","line":4,"range":{"start_line":4,"start_character":16,"end_line":4,"end_character":22},"updated":"2026-06-24 11:15:44.000000000","message":"iiuc this is also for podman? so something like\n\n\n```suggestion\n    Implemented multi-stage container builds across OpenStack services and\n```","commit_id":"f8bf34e3d345bf91e3d12543c6fb956020d72391"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"14191f967ab379614aa2f40c753105e9bc7ef16c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Implemented Docker multi-stage builds across OpenStack services and"},{"line_number":5,"context_line":"    infrastructure components to significantly reduce image sizes."}],"source_content_type":"text/x-yaml","patch_set":60,"id":"c0dd7311_1c4d957f","line":4,"range":{"start_line":4,"start_character":16,"end_line":4,"end_character":22},"in_reply_to":"1ca62d9b_16f128f6","updated":"2026-06-24 11:24:49.000000000","message":"Fix applied.","commit_id":"f8bf34e3d345bf91e3d12543c6fb956020d72391"}]}
