From fddde6d846cae224736ba58bf54308ff729e0af1 Mon Sep 17 00:00:00 2001 From: "Claude Sonnet 4.6" Date: Wed, 13 May 2026 17:29:15 +0000 Subject: [PATCH] manager: use pinned kolla-ansible tag for latest When manager_version=latest, environments/manager/images.yml had an unconditional branch that set kolla_ansible_tag to {{ openstack_version|default('2024.2') }}, bypassing the {% if 'kolla_ansible' in versions %} lookup used by all pinned releases. This resolved kolla_ansible_tag to an OpenStack cycle name (e.g. 2025.1) at deploy time. The kolla/release/2025.1/ registry namespace carries only date- stamped tags such as 5.0.9.20260328. The floating 2025.1 tag exists only in the bare kolla/ namespace, not in the release namespace. Any upgrade run using the rendered tag therefore received a 500 from the registry when pulling per-service images (e.g. fluentd), failing the Restart handler on all targeted hosts. Remove the latest branch so the versions lookup path fires for all manager versions. With release/latest/base.yml now carrying docker_images.kolla_ansible (added in the companion release repo change), the pinned tag 0.20260328.0 is used for manager_version=latest, matching the stable kolla/release/2025.1/ namespace. Add pytest==9.0.3 to requirements.txt and a unit test that renders the template with a mock versions dict, verifying that the pinned tag is used when kolla_ansible is present in versions for both manager_version=latest and pinned releases. AI-assisted: Claude Code Signed-off-by: Roger Luethi --- environments/manager/images.yml | 4 ---- requirements.txt | 1 + tests/test_render_images_template.py | 29 ++++++++++++++++++++++++++++ tox.ini | 1 + 4 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 tests/test_render_images_template.py diff --git a/environments/manager/images.yml b/environments/manager/images.yml index 121605a..d2e349e 100644 --- a/environments/manager/images.yml +++ b/environments/manager/images.yml @@ -93,14 +93,10 @@ ceph_ansible_tag: "{{ '{{' }} ceph_version|default(manager_version) {{ '}}' }}" {% endif -%} ceph_ansible_image: "{{ '{{' }} docker_registry_ansible|default('registry.osism.tech') {{ '}}' }}/{{ images['ceph_ansible'] }}:{{ '{{' }} ceph_ansible_tag {{ '}}' }}" -{% if manager_version == 'latest' -%} -kolla_ansible_tag: "{{ '{{' }} openstack_version|default('2024.2') {{ '}}' }}" -{% else -%} {% if 'kolla_ansible' in versions -%} kolla_ansible_tag: "{{ versions['kolla_ansible'] }}" {% else -%} kolla_ansible_tag: "{{ '{{' }} openstack_version|default(manager_version) {{ '}}' }}" {% endif -%} -{% endif -%} kolla_ansible_image: "{{ '{{' }} docker_registry_ansible|default('registry.osism.tech') {{ '}}' }}/{{ images['kolla_ansible'] }}:{{ '{{' }} kolla_ansible_tag {{ '}}' }}" diff --git a/requirements.txt b/requirements.txt index cc46116..7d9d879 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,6 +3,7 @@ PyYAML==6.0.3 ansible==11.13.0 packaging==26.1 pwgen==0.8.2.post0 +pytest==9.0.3 python-gilt==1.2.3 requests==2.33.1 tabulate==0.10.0 diff --git a/tests/test_render_images_template.py b/tests/test_render_images_template.py new file mode 100644 index 0000000..42af385 --- /dev/null +++ b/tests/test_render_images_template.py @@ -0,0 +1,29 @@ +from collections import defaultdict +import os +import jinja2 + +REPO_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +TEMPLATE = "environments/manager/images.yml" + + +def render(manager_version, versions_extra=None): + versions = defaultdict(str, versions_extra or {}) + images = defaultdict(str) + env = jinja2.Environment(loader=jinja2.FileSystemLoader(REPO_ROOT)) + return env.get_template(TEMPLATE).render( + images=images, manager_version=manager_version, versions=versions + ) + + +def test_latest_with_pinned_kolla_ansible_uses_pinned_tag(): + # When manager_version=latest and kolla_ansible is present in versions + # (as it is once release/latest/base.yml is updated), the rendered + # tag must be the pinned value, not openstack_version. + result = render("latest", {"kolla_ansible": "0.20260328.0"}) + assert 'kolla_ansible_tag: "0.20260328.0"' in result + + +def test_pinned_release_with_kolla_ansible_uses_pinned_tag(): + # Regression: pinned manager_version must continue to use the pinned tag. + result = render("10.0.0", {"kolla_ansible": "0.20260328.0"}) + assert 'kolla_ansible_tag: "0.20260328.0"' in result diff --git a/tox.ini b/tox.ini index 5d6c4c7..988a92b 100644 --- a/tox.ini +++ b/tox.ini @@ -30,3 +30,4 @@ setenv = commands = python3 src/render-images.py cat images.yml + python3 -m pytest tests