Switch to Antelope images (#1227)

diff --git a/images/barbican/Dockerfile b/images/barbican/Dockerfile
index e7f6f44..f98ead5 100644
--- a/images/barbican/Dockerfile
+++ b/images/barbican/Dockerfile
@@ -15,7 +15,7 @@
 ARG RELEASE
 
 FROM registry.atmosphere.dev/library/openstack-venv-builder:${RELEASE} AS build
-ARG BARBICAN_GIT_REF=ca57ef5436e20e90cf6cd6853efe3c89a9afd986
+ARG BARBICAN_GIT_REF=9c8fb8c3a9a47276868d38a86f098e54e5f05ea6
 ADD --keep-git-dir=true https://opendev.org/openstack/barbican.git#${BARBICAN_GIT_REF} /src/barbican
 RUN git -C /src/barbican fetch --unshallow
 RUN --mount=type=cache,mode=0755,target=/root/.cache/pip,sharing=private <<EOF bash -xe
diff --git a/images/cinder/Dockerfile b/images/cinder/Dockerfile
index 1487042..afa63cd 100644
--- a/images/cinder/Dockerfile
+++ b/images/cinder/Dockerfile
@@ -15,7 +15,7 @@
 ARG RELEASE
 
 FROM registry.atmosphere.dev/library/openstack-venv-builder:${RELEASE} AS build
-ARG CINDER_GIT_REF=b0f0b9015b9dfa228dff98eeee5116d8eca1c3cc
+ARG CINDER_GIT_REF=0cca8c2aaf20cea530278bc481e94d647de1793f
 ADD --keep-git-dir=true https://opendev.org/openstack/cinder.git#${CINDER_GIT_REF} /src/cinder
 RUN git -C /src/cinder fetch --unshallow
 COPY patches/cinder /patches/cinder
@@ -29,10 +29,10 @@
         storpool.spopenstack
 EOF
 ADD --chmod=644 \
-    https://github.com/storpool/storpool-openstack-integration/raw/master/drivers/cinder/openstack/bobcat/storpool.py \
+    https://github.com/storpool/storpool-openstack-integration/raw/master/drivers/cinder/openstack/antelope/storpool.py \
     /var/lib/openstack/lib/python3.10/site-packages/cinder/volume/drivers/storpool.py
 ADD --chmod=644 \
-    https://github.com/storpool/storpool-openstack-integration/raw/master/drivers/os_brick/openstack/bobcat/storpool.py \
+    https://github.com/storpool/storpool-openstack-integration/raw/master/drivers/os_brick/openstack/antelope/storpool.py \
     /var/lib/openstack/lib/python3.10/site-packages/os_brick/initiator/connectors/storpool.py
 
 FROM registry.atmosphere.dev/library/openstack-python-runtime:${RELEASE}
diff --git a/images/designate/Dockerfile b/images/designate/Dockerfile
index 4fc0b75..062b2cc 100644
--- a/images/designate/Dockerfile
+++ b/images/designate/Dockerfile
@@ -15,11 +15,9 @@
 ARG RELEASE
 
 FROM registry.atmosphere.dev/library/openstack-venv-builder:${RELEASE} AS build
-ARG DESIGNATE_GIT_REF=097ffc6df181290eba1bcd7c492b1b505bc15434
+ARG DESIGNATE_GIT_REF=ff1986cbb755f0d74a7db98623d6d17816d933a6
 ADD --keep-git-dir=true https://opendev.org/openstack/designate.git#${DESIGNATE_GIT_REF} /src/designate
 RUN git -C /src/designate fetch --unshallow
-COPY patches/designate /patches/designate
-RUN git -C /src/designate apply --verbose /patches/designate/*
 RUN --mount=type=cache,mode=0755,target=/root/.cache/pip,sharing=private <<EOF bash -xe
 pip3 install \
     --constraint /upper-constraints.txt \
diff --git a/images/designate/patches/designate/0000-Fix-Mysql-default-character-setting-utf8mb4.patch b/images/designate/patches/designate/0000-Fix-Mysql-default-character-setting-utf8mb4.patch
deleted file mode 100644
index 25ca089..0000000
--- a/images/designate/patches/designate/0000-Fix-Mysql-default-character-setting-utf8mb4.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From b807373aacf08470527340024b414afe5819d212 Mon Sep 17 00:00:00 2001
-From: ricolin <rlin@vexxhost.com>
-Date: Tue, 27 Feb 2024 15:42:31 +0800
-Subject: [PATCH] Fix Mysql default character setting (utf8mb4)
-
-Since 8.0 Mysql uses utf8mb4 as default.
-To use utf8, will change the new comming tables in DATABASE to use
-`utf8mb3`. And that makes new comming tables not compatible with rest
-tables within same database or tables from all other database that
-using default setting.
-We should make sure we uses utf8mb4 so no confusion or incompatible
-error will raise.
-
-Closes-bug: #2033635
-Change-Id: I7232b55300c8817a00e73e449e03ea6103f40701
----
- .../alembic/versions/15b34ff3ecb8_fix_service_charset.py    | 6 ++++--
- 1 file changed, 4 insertions(+), 2 deletions(-)
-
-diff --git a/designate/storage/sqlalchemy/alembic/versions/15b34ff3ecb8_fix_service_charset.py b/designate/storage/sqlalchemy/alembic/versions/15b34ff3ecb8_fix_service_charset.py
-index 07212b0c..0a6cfef7 100644
---- a/designate/storage/sqlalchemy/alembic/versions/15b34ff3ecb8_fix_service_charset.py
-+++ b/designate/storage/sqlalchemy/alembic/versions/15b34ff3ecb8_fix_service_charset.py
-@@ -43,6 +43,8 @@ def upgrade() -> None:
-         return
-
-     op.execute('SET foreign_key_checks = 0;')
--    op.execute('ALTER TABLE service_statuses CONVERT TO CHARACTER SET utf8;')
-+    op.execute(
-+        'ALTER TABLE service_statuses CONVERT TO CHARACTER SET utf8mb4;'
-+    )
-     op.execute('SET foreign_key_checks = 1;')
--    op.execute('ALTER DATABASE DEFAULT CHARACTER SET utf8;')
-+    op.execute('ALTER DATABASE DEFAULT CHARACTER SET utf8mb4;')
---
-2.25.1
-
diff --git a/images/glance/Dockerfile b/images/glance/Dockerfile
index 6aa4389..cb2e287 100644
--- a/images/glance/Dockerfile
+++ b/images/glance/Dockerfile
@@ -15,11 +15,13 @@
 ARG RELEASE
 
 FROM registry.atmosphere.dev/library/openstack-venv-builder:${RELEASE} AS build
-ARG GLANCE_GIT_REF=0bcd6cd71c09917c6734421374fd598d73e8d0cc
+ARG GLANCE_GIT_REF=70170d2a99f9d30bddcc55a9183133a16ed14c06
 ADD --keep-git-dir=true https://opendev.org/openstack/glance.git#${GLANCE_GIT_REF} /src/glance
 RUN git -C /src/glance fetch --unshallow
-ADD --keep-git-dir=true https://opendev.org/openstack/glance_store.git#master /src/glance_store
+ADD --keep-git-dir=true https://opendev.org/openstack/glance_store.git#stable/2023.1 /src/glance_store
 RUN git -C /src/glance_store fetch --unshallow
+COPY patches/glance_store /patches/glance_store
+RUN git -C /src/glance_store apply --verbose /patches/glance_store/*
 RUN --mount=type=cache,mode=0755,target=/root/.cache/pip,sharing=private <<EOF bash -xe
 pip3 install \
     --constraint /upper-constraints.txt \
@@ -29,7 +31,7 @@
         storpool.spopenstack
 EOF
 ADD --chmod=644 \
-    https://github.com/storpool/storpool-openstack-integration/raw/master/drivers/os_brick/openstack/bobcat/storpool.py \
+    https://github.com/storpool/storpool-openstack-integration/raw/master/drivers/os_brick/openstack/antelope/storpool.py \
     /var/lib/openstack/lib/python3.10/site-packages/os_brick/initiator/connectors/storpool.py
 
 FROM registry.atmosphere.dev/library/openstack-python-runtime:${RELEASE}
diff --git a/images/glance/patches/glance_store/0000-rbd-compute-appropriate-resize-amount-before-resizin.patch b/images/glance/patches/glance_store/0000-rbd-compute-appropriate-resize-amount-before-resizin.patch
new file mode 100644
index 0000000..3f482cb
--- /dev/null
+++ b/images/glance/patches/glance_store/0000-rbd-compute-appropriate-resize-amount-before-resizin.patch
@@ -0,0 +1,145 @@
+From fa43561078bbee531ccc8acf2e185b3fc6d98b2a Mon Sep 17 00:00:00 2001
+From: Andrew Bogott <abogott@wikimedia.org>
+Date: Thu, 8 Jun 2023 07:54:16 -0500
+Subject: [PATCH] rbd: compute appropriate resize amount before resizing image
+
+Resolves a bug introduced in
+
+https://opendev.org/openstack/glance_store/commit/c43f19e8456b9e20f03709773fb2ffdb94807a0a
+
+This issue is only in evidence when glance is behind a proxy where the
+client buffer size can be lower (for haproxy: bufsize = 16384) which
+can cause unaligned reads
+
+(https://github.com/openstack/glance/blob/master/glance/common/wsgi.py#L1028).
+
+The response length can be bigger than the store_chunk_size for the
+first time, so at the end the RBD write will fail because it wants
+to write more data than the actual RBD image size after the first
+resize.
+
+Thanks to Robert Varjasi for investigating this issue!
+
+Fixes-Bug: 1916482
+Change-Id: Ie03693c2cb8b096978fb156231c3b1cab695470f
+---
+ glance_store/_drivers/rbd.py              |  6 ++--
+ glance_store/tests/unit/test_rbd_store.py | 38 ++++++++++++++---------
+ 2 files changed, 26 insertions(+), 18 deletions(-)
+
+diff --git a/glance_store/_drivers/rbd.py b/glance_store/_drivers/rbd.py
+index ba2defa..e53baef 100644
+--- a/glance_store/_drivers/rbd.py
++++ b/glance_store/_drivers/rbd.py
+@@ -535,12 +535,12 @@ class Store(driver.Store):
+         """Handle the rbd resize when needed."""
+         if image_size != 0 or self.size >= bytes_written + chunk_length:
+             return self.size
+-        new_size = self.size + self.resize_amount
+-        LOG.debug("resizing image to %s KiB" % (new_size / units.Ki))
+-        image.resize(new_size)
+         # Note(jokke): We double how much we grow the image each time
+         # up to 8gigs to avoid resizing for each write on bigger images
+         self.resize_amount = min(self.resize_amount * 2, 8 * units.Gi)
++        new_size = self.size + self.resize_amount
++        LOG.debug("resizing image to %s KiB" % (new_size / units.Ki))
++        image.resize(new_size)
+         return new_size
+ 
+     @driver.back_compat_add
+diff --git a/glance_store/tests/unit/test_rbd_store.py b/glance_store/tests/unit/test_rbd_store.py
+index 4f24c26..fb6522a 100644
+--- a/glance_store/tests/unit/test_rbd_store.py
++++ b/glance_store/tests/unit/test_rbd_store.py
+@@ -213,10 +213,10 @@ class TestReSize(base.StoreBaseTest,
+                 data_len_temp = data_len
+                 resize_amount = self.store.WRITE_CHUNKSIZE
+                 while data_len_temp > 0:
++                    resize_amount *= 2
+                     expected_calls.append(resize_amount + (data_len -
+                                                            data_len_temp))
+                     data_len_temp -= resize_amount
+-                    resize_amount *= 2
+                     expected += 1
+                 self.assertEqual(expected, resize.call_count)
+                 resize.assert_has_calls([mock.call(call) for call in
+@@ -244,7 +244,7 @@ class TestReSize(base.StoreBaseTest,
+         # Current size is smaller than we need
+         self.store.size = 8
+         ret = self.store._resize_on_write(image, 0, 16, 16)
+-        self.assertEqual(8 + self.store.WRITE_CHUNKSIZE, ret)
++        self.assertEqual(8 + self.store.WRITE_CHUNKSIZE * 2, ret)
+         self.assertEqual(self.store.WRITE_CHUNKSIZE * 2,
+                          self.store.resize_amount)
+         image.resize.assert_called_once_with(ret)
+@@ -253,47 +253,55 @@ class TestReSize(base.StoreBaseTest,
+         image.resize.reset_mock()
+         self.store.size = ret
+         ret = self.store._resize_on_write(image, 0, 64, 16)
+-        self.assertEqual(8 + self.store.WRITE_CHUNKSIZE, ret)
++        self.assertEqual(8 + self.store.WRITE_CHUNKSIZE * 2, ret)
+         image.resize.assert_not_called()
+ 
+         # Read past the limit triggers another resize
+         ret = self.store._resize_on_write(image, 0, ret + 1, 16)
+-        self.assertEqual(8 + self.store.WRITE_CHUNKSIZE * 3, ret)
++        self.assertEqual(8 + self.store.WRITE_CHUNKSIZE * 6, ret)
+         image.resize.assert_called_once_with(ret)
+         self.assertEqual(self.store.WRITE_CHUNKSIZE * 4,
+                          self.store.resize_amount)
+ 
+         # Check that we do not resize past the 8G ceiling.
+ 
+-        # Start with resize_amount at 4G, 1G read so far
++        # Start with resize_amount at 2G, 1G read so far
+         image.resize.reset_mock()
+-        self.store.resize_amount = 4 * units.Gi
++        self.store.resize_amount = 2 * units.Gi
+         self.store.size = 1 * units.Gi
+ 
+-        # First resize happens and we get the 4G,
+-        # resize_amount goes to limit of 8G
++        # First resize happens and we get to 5G,
++        # resize_amount goes to limit of 4G
+         ret = self.store._resize_on_write(image, 0, 4097 * units.Mi, 16)
+-        self.assertEqual(5 * units.Gi, ret)
+-        self.assertEqual(8 * units.Gi, self.store.resize_amount)
++        self.assertEqual(4 * units.Gi, self.store.resize_amount)
++        self.assertEqual((1 + 4) * units.Gi, ret)
+         self.store.size = ret
+ 
+-        # Second resize happens and we get to 13G,
++        # Second resize happens and we stay at 13, no resize
+         # resize amount stays at limit of 8G
+         ret = self.store._resize_on_write(image, 0, 6144 * units.Mi, 16)
+-        self.assertEqual((5 + 8) * units.Gi, ret)
+         self.assertEqual(8 * units.Gi, self.store.resize_amount)
++        self.assertEqual((1 + 4 + 8) * units.Gi, ret)
+         self.store.size = ret
+ 
+-        # Third resize happens and we get to 21G,
++        # Third resize happens and we get to 21,
+         # resize amount stays at limit of 8G
+         ret = self.store._resize_on_write(image, 0, 14336 * units.Mi, 16)
+-        self.assertEqual((5 + 8 + 8) * units.Gi, ret)
+         self.assertEqual(8 * units.Gi, self.store.resize_amount)
++        self.assertEqual((1 + 4 + 8 + 8) * units.Gi, ret)
++        self.store.size = ret
++
++        # Fourth resize happens and we get to 29,
++        # resize amount stays at limit of 8G
++        ret = self.store._resize_on_write(image, 0, 22528 * units.Mi, 16)
++        self.assertEqual(8 * units.Gi, self.store.resize_amount)
++        self.assertEqual((1 + 4 + 8 + 8 + 8) * units.Gi, ret)
+ 
+         image.resize.assert_has_calls([
+             mock.call(5 * units.Gi),
+             mock.call(13 * units.Gi),
+-            mock.call(21 * units.Gi)])
++            mock.call(21 * units.Gi),
++            mock.call(29 * units.Gi)])
+ 
+ 
+ class TestStore(base.StoreBaseTest,
+-- 
+2.34.1
diff --git a/images/heat/Dockerfile b/images/heat/Dockerfile
index 5a13451..ea34a14 100644
--- a/images/heat/Dockerfile
+++ b/images/heat/Dockerfile
@@ -15,7 +15,7 @@
 ARG RELEASE
 
 FROM registry.atmosphere.dev/library/openstack-venv-builder:${RELEASE} AS build
-ARG HEAT_GIT_REF=80eea85194825773d1b60ecc4386b2d5ba52a066
+ARG HEAT_GIT_REF=362bd38d902e006b50caf86f46581dfd16f7adab
 ADD --keep-git-dir=true https://opendev.org/openstack/heat.git#${HEAT_GIT_REF} /src/heat
 RUN git -C /src/heat fetch --unshallow
 RUN --mount=type=cache,mode=0755,target=/root/.cache/pip,sharing=private <<EOF bash -xe
diff --git a/images/horizon/Dockerfile b/images/horizon/Dockerfile
index c2c63f2..1f2bcb0 100644
--- a/images/horizon/Dockerfile
+++ b/images/horizon/Dockerfile
@@ -15,24 +15,24 @@
 ARG RELEASE
 
 FROM registry.atmosphere.dev/library/openstack-venv-builder:${RELEASE} AS build
-ARG HORIZON_GIT_REF=3f1f1d46e6e47a3dbe46fb023fe69ff25d6a601b
+ARG HORIZON_GIT_REF=b467683b1ed2aab4e38fe2cb2ac7ae5500e5d5c0
 ADD --keep-git-dir=true https://opendev.org/openstack/horizon.git#${HORIZON_GIT_REF} /src/horizon
 RUN git -C /src/horizon fetch --unshallow
-ADD --keep-git-dir=true https://opendev.org/openstack/designate-dashboard.git#master /src/designate-dashboard
+ADD --keep-git-dir=true https://opendev.org/openstack/designate-dashboard.git#stable/2023.1 /src/designate-dashboard
 RUN git -C /src/designate-dashboard fetch --unshallow
-ADD --keep-git-dir=true https://opendev.org/openstack/heat-dashboard.git#master /src/heat-dashboard
+ADD --keep-git-dir=true https://opendev.org/openstack/heat-dashboard.git#stable/2023.1 /src/heat-dashboard
 RUN git -C /src/heat-dashboard fetch --unshallow
-ADD --keep-git-dir=true https://opendev.org/openstack/ironic-ui.git#master /src/ironic-ui
+ADD --keep-git-dir=true https://opendev.org/openstack/ironic-ui.git#stable/2023.1 /src/ironic-ui
 RUN git -C /src/ironic-ui fetch --unshallow
-ADD --keep-git-dir=true https://opendev.org/openstack/magnum-ui.git#master /src/magnum-ui
+ADD --keep-git-dir=true https://opendev.org/openstack/magnum-ui.git#stable/2023.1 /src/magnum-ui
 RUN git -C /src/magnum-ui fetch --unshallow
-ADD --keep-git-dir=true https://opendev.org/openstack/manila-ui.git#master /src/manila-ui
+ADD --keep-git-dir=true https://opendev.org/openstack/manila-ui.git#stable/2023.1 /src/manila-ui
 RUN git -C /src/manila-ui fetch --unshallow
-ADD --keep-git-dir=true https://opendev.org/openstack/neutron-vpnaas-dashboard.git#master /src/neutron-vpnaas-dashboard
+ADD --keep-git-dir=true https://opendev.org/openstack/neutron-vpnaas-dashboard.git#stable/2023.1 /src/neutron-vpnaas-dashboard
 RUN git -C /src/neutron-vpnaas-dashboard fetch --unshallow
-ADD --keep-git-dir=true https://opendev.org/openstack/octavia-dashboard.git#master /src/octavia-dashboard
+ADD --keep-git-dir=true https://opendev.org/openstack/octavia-dashboard.git#stable/2023.1 /src/octavia-dashboard
 RUN git -C /src/octavia-dashboard fetch --unshallow
-ADD --keep-git-dir=true https://opendev.org/openstack/senlin-dashboard.git#master /src/senlin-dashboard
+ADD --keep-git-dir=true https://opendev.org/openstack/senlin-dashboard.git#stable/2023.1 /src/senlin-dashboard
 RUN git -C /src/senlin-dashboard fetch --unshallow
 COPY patches/magnum-ui /patches/magnum-ui
 RUN git -C /src/magnum-ui apply --verbose /patches/magnum-ui/*
diff --git a/images/horizon/patches/horizon/0000-fix-ignore-errors-when-flavors-are-deleted.patch b/images/horizon/patches/horizon/0000-fix-ignore-errors-when-flavors-are-deleted.patch
new file mode 100644
index 0000000..93fbfcd
--- /dev/null
+++ b/images/horizon/patches/horizon/0000-fix-ignore-errors-when-flavors-are-deleted.patch
@@ -0,0 +1,108 @@
+From aa21f4baa38fc70549b1c7341361519de6362d9b Mon Sep 17 00:00:00 2001
+From: okozachenko <okozachenko1203@gmail.com>
+Date: Thu, 2 Nov 2023 01:27:20 +1100
+Subject: [PATCH] fix: ignore errors when flavors are deleted
+
+The code used to list flavors when in the admin
+or project side was not consistent and raised
+alerts if viewing in the admin side but not in the
+project side.
+
+This patch moves their behaviour to be consistent
+and refactors the code to use the same code-base.
+
+Closes-Bug: #2042362
+Change-Id: I37cc02102285b1e83ec1343b710a57fb5ac4ba15
+---
+ .../dashboards/admin/instances/tests.py         |  4 ----
+ .../dashboards/admin/instances/views.py         | 17 +++++------------
+ .../dashboards/project/instances/tests.py       |  1 +
+ .../dashboards/project/instances/views.py       | 11 +++--------
+ 4 files changed, 9 insertions(+), 24 deletions(-)
+
+diff --git a/openstack_dashboard/dashboards/admin/instances/tests.py b/openstack_dashboard/dashboards/admin/instances/tests.py
+index 3630cb79a..c6cf65e5d 100644
+--- a/openstack_dashboard/dashboards/admin/instances/tests.py
++++ b/openstack_dashboard/dashboards/admin/instances/tests.py
+@@ -133,10 +133,6 @@ class InstanceViewTest(test.BaseAdminViewTests):
+         res = self.client.get(INDEX_URL)
+         instances = res.context['table'].data
+         self.assertTemplateUsed(res, INDEX_TEMPLATE)
+-        # Since error messages produced for each instance are identical,
+-        # there will be only one error message for all instances
+-        # (messages de-duplication).
+-        self.assertMessageCount(res, error=1)
+         self.assertCountEqual(instances, servers)
+ 
+         self.assertEqual(self.mock_image_list_detailed.call_count, 4)
+diff --git a/openstack_dashboard/dashboards/admin/instances/views.py b/openstack_dashboard/dashboards/admin/instances/views.py
+index c35527fe4..efa28dd76 100644
+--- a/openstack_dashboard/dashboards/admin/instances/views.py
++++ b/openstack_dashboard/dashboards/admin/instances/views.py
+@@ -33,6 +33,8 @@ from openstack_dashboard.dashboards.admin.instances \
+ from openstack_dashboard.dashboards.admin.instances \
+     import tables as project_tables
+ from openstack_dashboard.dashboards.admin.instances import tabs
++from openstack_dashboard.dashboards.project.instances \
++    import utils as instance_utils
+ from openstack_dashboard.dashboards.project.instances import views
+ from openstack_dashboard.dashboards.project.instances.workflows \
+     import update_instance
+@@ -215,18 +217,9 @@ class AdminIndexView(tables.PagedTableMixin, tables.DataTableView):
+                 else:
+                     inst.image['name'] = _("-")
+ 
+-            flavor_id = inst.flavor["id"]
+-            try:
+-                if flavor_id in flavor_dict:
+-                    inst.full_flavor = flavor_dict[flavor_id]
+-                else:
+-                    # If the flavor_id is not in flavor_dict list,
+-                    # gets it via nova api.
+-                    inst.full_flavor = api.nova.flavor_get(
+-                        self.request, flavor_id)
+-            except Exception:
+-                msg = _('Unable to retrieve instance size information.')
+-                exceptions.handle(self.request, msg)
++            inst.full_flavor = instance_utils.resolve_flavor(self.request,
++                                                             inst, flavor_dict)
++
+             tenant = tenant_dict.get(inst.tenant_id, None)
+             inst.tenant_name = getattr(tenant, "name", None)
+         return instances
+diff --git a/openstack_dashboard/dashboards/project/instances/tests.py b/openstack_dashboard/dashboards/project/instances/tests.py
+index 5ab1b4a48..fe2f58c46 100644
+--- a/openstack_dashboard/dashboards/project/instances/tests.py
++++ b/openstack_dashboard/dashboards/project/instances/tests.py
+@@ -316,6 +316,7 @@ class InstanceTableTests(InstanceTestBase, InstanceTableTestMixin):
+         self.mock_is_feature_available.return_value = True
+         self.mock_server_list_paged.return_value = [servers, False, False]
+         self.mock_servers_update_addresses.return_value = None
++        self.mock_flavor_get.side_effect = self.exceptions.nova
+         self.mock_flavor_list.side_effect = self.exceptions.nova
+         self.mock_image_list_detailed.return_value = (self.images.list(),
+                                                       False, False)
+diff --git a/openstack_dashboard/dashboards/project/instances/views.py b/openstack_dashboard/dashboards/project/instances/views.py
+index badf540b8..b848f6fff 100644
+--- a/openstack_dashboard/dashboards/project/instances/views.py
++++ b/openstack_dashboard/dashboards/project/instances/views.py
+@@ -171,14 +171,9 @@ class IndexView(tables.PagedTableMixin, tables.DataTableView):
+         for instance in instances:
+             self._populate_image_info(instance, image_dict, volume_dict)
+ 
+-            flavor_id = instance.flavor["id"]
+-            if flavor_id in flavor_dict:
+-                instance.full_flavor = flavor_dict[flavor_id]
+-            else:
+-                # If the flavor_id is not in flavor_dict,
+-                # put info in the log file.
+-                LOG.info('Unable to retrieve flavor "%s" for instance "%s".',
+-                         flavor_id, instance.id)
++            instance.full_flavor = instance_utils.resolve_flavor(self.request,
++                                                                 instance,
++                                                                 flavor_dict)
+ 
+         return instances
+ 
+-- 
+2.34.1
diff --git a/images/horizon/patches/horizon/0001-Fixing-Incorrect-URL-when-browsing-Swift-containers.patch b/images/horizon/patches/horizon/0001-Fixing-Incorrect-URL-when-browsing-Swift-containers.patch
new file mode 100644
index 0000000..58eafd8
--- /dev/null
+++ b/images/horizon/patches/horizon/0001-Fixing-Incorrect-URL-when-browsing-Swift-containers.patch
@@ -0,0 +1,39 @@
+From 4aa347fe196b7b18ff0bf5f4d4f076a6c14cf12e Mon Sep 17 00:00:00 2001
+From: jeremy-boyle <jeremyboylet@gmail.com>
+Date: Sat, 24 Jun 2023 16:59:11 +0000
+Subject: [PATCH] Fixing Incorrect URL when browsing Swift containers
+
+This patch fixes a bug identified in the code that generates the URL for
+the Swift container object. The bug caused the forward slashes (/) in the
+folder parameter to be encoded as %2F instead of being included as '/' in the
+resulting URL.
+
+To resolve this issue, the code has been updated by adding a replace() method
+to replace the %2F sequences with forward slashes. The updated code ensures
+that the URL generated for the folder parameter contains the correct forward
+slash (/) representation.
+
+Closes-Bug: #2009724
+Signed-off-by: jeremy-boyle <jeremyboylet@gmail.com>
+
+Change-Id: I5837e74ddcc71cda6b4686e586dbb8b1386a9cd3
+---
+ .../static/dashboard/project/containers/objects.controller.js  | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/openstack_dashboard/dashboards/project/static/dashboard/project/containers/objects.controller.js b/openstack_dashboard/dashboards/project/static/dashboard/project/containers/objects.controller.js
+index 55262a1fa..c14128cbf 100644
+--- a/openstack_dashboard/dashboards/project/static/dashboard/project/containers/objects.controller.js
++++ b/openstack_dashboard/dashboards/project/static/dashboard/project/containers/objects.controller.js
+@@ -60,7 +60,8 @@
+     ctrl.containerURL = containerRoute + encodeURIComponent($routeParams.container) +
+       ctrl.model.DELIMETER;
+     if (angular.isDefined($routeParams.folder)) {
+-      ctrl.currentURL = ctrl.containerURL + encodeURIComponent($routeParams.folder) +
++      ctrl.currentURL = ctrl.containerURL +
++        encodeURIComponent($routeParams.folder).replace(/%2F/g, '/') +
+         ctrl.model.DELIMETER;
+     } else {
+       ctrl.currentURL = ctrl.containerURL;
+-- 
+2.34.1
diff --git a/images/ironic/Dockerfile b/images/ironic/Dockerfile
index a006e08..9a0016e 100644
--- a/images/ironic/Dockerfile
+++ b/images/ironic/Dockerfile
@@ -15,7 +15,7 @@
 ARG RELEASE
 
 FROM registry.atmosphere.dev/library/openstack-venv-builder:${RELEASE} AS build
-ARG IRONIC_GIT_REF=22aa29b864eecd00bfb7c67cc2075030da1eb1d0
+ARG IRONIC_GIT_REF=c51cf2859140884150422f423d2e91119972eaac
 ADD --keep-git-dir=true https://opendev.org/openstack/ironic.git#${IRONIC_GIT_REF} /src/ironic
 RUN git -C /src/ironic fetch --unshallow
 RUN --mount=type=cache,mode=0755,target=/root/.cache/pip,sharing=private <<EOF bash -xe
diff --git a/images/keystone/Dockerfile b/images/keystone/Dockerfile
index 29bd6fb..65d3669 100644
--- a/images/keystone/Dockerfile
+++ b/images/keystone/Dockerfile
@@ -15,9 +15,11 @@
 ARG RELEASE
 
 FROM registry.atmosphere.dev/library/openstack-venv-builder:${RELEASE} AS build
-ARG KEYSTONE_GIT_REF=8ca73f758bb613a57815fbe4ae78e3d2afa4af49
+ARG KEYSTONE_GIT_REF=084eeec60b259f2852002881cdb171a3f20584d4
 ADD --keep-git-dir=true https://opendev.org/openstack/keystone.git#${KEYSTONE_GIT_REF} /src/keystone
 RUN git -C /src/keystone fetch --unshallow
+COPY patches/keystone /patches/keystone
+RUN git -C /src/keystone apply --verbose /patches/keystone/*
 RUN --mount=type=cache,mode=0755,target=/root/.cache/pip,sharing=private <<EOF bash -xe
 pip3 install \
     --constraint /upper-constraints.txt \
diff --git a/images/keystone/patches/keystone/0000-Ensure-application-credentials-take-account-of-impli.patch b/images/keystone/patches/keystone/0000-Ensure-application-credentials-take-account-of-impli.patch
new file mode 100644
index 0000000..2d0841e
--- /dev/null
+++ b/images/keystone/patches/keystone/0000-Ensure-application-credentials-take-account-of-impli.patch
@@ -0,0 +1,46 @@
+From 6ee7ea0d63fed272beb3806d722c2dd3585e8212 Mon Sep 17 00:00:00 2001
+From: Andrew Bonney <andrew.bonney@bbc.co.uk>
+Date: Tue, 5 Sep 2023 14:56:51 +0100
+Subject: [PATCH] Ensure application credentials take account of implied roles
+
+Related-Bug: #2030061
+Change-Id: I2aea0b89987b24cf5ddaadeecbd06c32ad81a9bc
+---
+ keystone/models/token_model.py | 13 +++++++++++--
+ 1 file changed, 11 insertions(+), 2 deletions(-)
+
+diff --git a/keystone/models/token_model.py b/keystone/models/token_model.py
+index 78146295d..b152d97c2 100644
+--- a/keystone/models/token_model.py
++++ b/keystone/models/token_model.py
+@@ -429,7 +429,13 @@ class TokenModel(object):
+ 
+     def _get_application_credential_roles(self):
+         roles = []
++        roles_added = list()
+         app_cred_roles = self.application_credential['roles']
++        app_cred_roles = [{'role_id': r['id']} for r in app_cred_roles]
++        effective_app_cred_roles = (
++            PROVIDERS.assignment_api.add_implied_roles(app_cred_roles)
++        )
++
+         assignment_list = PROVIDERS.assignment_api.list_role_assignments(
+             user_id=self.user_id,
+             project_id=self.project_id,
+@@ -437,9 +443,12 @@ class TokenModel(object):
+             effective=True)
+         user_roles = list(set([x['role_id'] for x in assignment_list]))
+ 
+-        for role in app_cred_roles:
+-            if role['id'] in user_roles:
++        for role in effective_app_cred_roles:
++            if role['role_id'] in user_roles and \
++                    role['role_id'] not in roles_added:
++                role = PROVIDERS.role_api.get_role(role['role_id'])
+                 roles.append({'id': role['id'], 'name': role['name']})
++                roles_added.append(role['id'])
+ 
+         return roles
+ 
+-- 
+2.34.1
diff --git a/images/magnum/Dockerfile b/images/magnum/Dockerfile
index 6abfca0..81af79f 100644
--- a/images/magnum/Dockerfile
+++ b/images/magnum/Dockerfile
@@ -23,9 +23,11 @@
 RUN mv /${TARGETOS}-${TARGETARCH}/helm /usr/bin/helm
 
 FROM registry.atmosphere.dev/library/openstack-venv-builder:${RELEASE} AS build
-ARG MAGNUM_GIT_REF=c613ea4e419edc0086116da07e93cf19206746e1
+ARG MAGNUM_GIT_REF=30ab9c9f5c7d5787054560e0527314509e61a897
 ADD --keep-git-dir=true https://opendev.org/openstack/magnum.git#${MAGNUM_GIT_REF} /src/magnum
 RUN git -C /src/magnum fetch --unshallow
+COPY patches/magnum /patches/magnum
+RUN git -C /src/magnum apply --verbose /patches/magnum/*
 RUN --mount=type=cache,mode=0755,target=/root/.cache/pip,sharing=private <<EOF bash -xe
 pip3 install \
     --constraint /upper-constraints.txt \
diff --git a/images/magnum/patches/magnum/0001-Fix-Trust-token-scope-for-drivers.patch b/images/magnum/patches/magnum/0001-Fix-Trust-token-scope-for-drivers.patch
new file mode 100644
index 0000000..1a61a5c
--- /dev/null
+++ b/images/magnum/patches/magnum/0001-Fix-Trust-token-scope-for-drivers.patch
@@ -0,0 +1,100 @@
+From 258fbb75be8a004d2ab092502f58508c95de6e84 Mon Sep 17 00:00:00 2001
+From: ricolin <rlin@vexxhost.com>
+Date: Fri, 21 Jul 2023 10:54:23 +0800
+Subject: [PATCH] Fix Trust token scope for drivers
+
+This fix driver token scope to make sure we use correct token
+scope from Trust.
+
+Change-Id: If5b31951959c7a141dc1cae5fefcabe4ebf438b3
+(cherry picked from commit eca79453c0097b0f63019821d3c2e9ecacebf784)
+---
+
+diff --git a/magnum/drivers/common/templates/kubernetes/fragments/make-cert-client.sh b/magnum/drivers/common/templates/kubernetes/fragments/make-cert-client.sh
+index 1e4cf14..e7debbc 100644
+--- a/magnum/drivers/common/templates/kubernetes/fragments/make-cert-client.sh
++++ b/magnum/drivers/common/templates/kubernetes/fragments/make-cert-client.sh
+@@ -62,6 +62,11 @@
+                     "password": "$TRUSTEE_PASSWORD"
+                 }
+             }
++        },
++        "scope": {
++            "OS-TRUST:trust": {
++                "id": "$TRUST_ID"
++            }
+         }
+     }
+ }
+diff --git a/magnum/drivers/common/templates/kubernetes/fragments/make-cert.sh b/magnum/drivers/common/templates/kubernetes/fragments/make-cert.sh
+index 84bf839..d28149b 100644
+--- a/magnum/drivers/common/templates/kubernetes/fragments/make-cert.sh
++++ b/magnum/drivers/common/templates/kubernetes/fragments/make-cert.sh
+@@ -98,6 +98,11 @@
+                     "password": "$TRUSTEE_PASSWORD"
+                 }
+             }
++        },
++        "scope": {
++            "OS-TRUST:trust": {
++                "id": "$TRUST_ID"
++            }
+         }
+     }
+ }
+diff --git a/magnum/drivers/common/templates/swarm/fragments/make-cert.py b/magnum/drivers/common/templates/swarm/fragments/make-cert.py
+index bd8cbd7..258ae6a 100644
+--- a/magnum/drivers/common/templates/swarm/fragments/make-cert.py
++++ b/magnum/drivers/common/templates/swarm/fragments/make-cert.py
+@@ -161,6 +161,11 @@
+                     "password": "%(trustee_password)s"
+                 }
+             }
++        },
++        "scope": {
++            "OS-TRUST:trust": {
++                "id": "$(trust_id)s"
++            }
+         }
+     }
+ }
+@@ -168,6 +173,7 @@
+     params = {
+         'trustee_user_id': config['TRUSTEE_USER_ID'],
+         'trustee_password': config['TRUSTEE_PASSWORD'],
++        'trust_id': config['TRUST_ID'],
+     }
+     creds = creds_str % params
+     headers = {'Content-Type': 'application/json'}
+diff --git a/magnum/drivers/k8s_coreos_v1/templates/fragments/make-cert-client.yaml b/magnum/drivers/k8s_coreos_v1/templates/fragments/make-cert-client.yaml
+index dc910bf..846f49b 100644
+--- a/magnum/drivers/k8s_coreos_v1/templates/fragments/make-cert-client.yaml
++++ b/magnum/drivers/k8s_coreos_v1/templates/fragments/make-cert-client.yaml
+@@ -73,6 +73,11 @@
+                           "password": "$TRUSTEE_PASSWORD"
+                       }
+                   }
++              },
++              "scope": {
++                  "OS-TRUST:trust": {
++                      "id": "$TRUST_ID"
++                  }
+               }
+           }
+       }
+diff --git a/magnum/drivers/k8s_coreos_v1/templates/fragments/make-cert.yaml b/magnum/drivers/k8s_coreos_v1/templates/fragments/make-cert.yaml
+index 8ef1128..d9191bd 100644
+--- a/magnum/drivers/k8s_coreos_v1/templates/fragments/make-cert.yaml
++++ b/magnum/drivers/k8s_coreos_v1/templates/fragments/make-cert.yaml
+@@ -104,6 +104,11 @@
+                           "password": "$TRUSTEE_PASSWORD"
+                       }
+                   }
++              },
++              "scope": {
++                  "OS-TRUST:trust": {
++                      "id": "$TRUST_ID"
++                  }
+               }
+           }
+       }
diff --git a/images/manila/Dockerfile b/images/manila/Dockerfile
index f6c5784..4a4ceef 100644
--- a/images/manila/Dockerfile
+++ b/images/manila/Dockerfile
@@ -15,9 +15,11 @@
 ARG RELEASE
 
 FROM registry.atmosphere.dev/library/openstack-venv-builder:${RELEASE} AS build
-ARG MANILA_GIT_REF=d8987589ae88ae9b2769fbe6f26d5b6994098038
+ARG MANILA_GIT_REF=7dbba77f8559532f46db3be24f698dbd81846279
 ADD --keep-git-dir=true https://opendev.org/openstack/manila.git#${MANILA_GIT_REF} /src/manila
 RUN git -C /src/manila fetch --unshallow
+COPY patches/manila /patches/manila
+RUN git -C /src/manila apply --verbose /patches/manila/*
 RUN --mount=type=cache,mode=0755,target=/root/.cache/pip,sharing=private <<EOF bash -xe
 pip3 install \
     --constraint /upper-constraints.txt \
diff --git a/images/manila/patches/manila/0000-fix-stop-using-batch_op-for-rename_table.patch b/images/manila/patches/manila/0000-fix-stop-using-batch_op-for-rename_table.patch
new file mode 100644
index 0000000..c1f2306
--- /dev/null
+++ b/images/manila/patches/manila/0000-fix-stop-using-batch_op-for-rename_table.patch
@@ -0,0 +1,30 @@
+From eb7f03c667261557d7f809f7851bad6b3eea4646 Mon Sep 17 00:00:00 2001
+From: Mohammed Naser <mnaser@vexxhost.com>
+Date: Mon, 8 Jan 2024 14:00:37 -0500
+Subject: [PATCH] fix: Stop using batch_op for rename_table
+
+For migrations that rename tables, batch_op is not needed, which
+is also even causing issues with newer versions of Alembic.
+
+Change-Id: Ib43f5a24c497f7d97cb2d852b99489b0c3bd75fb
+---
+ .../alembic/versions/5077ffcc5f1c_add_share_instances.py      | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/manila/db/migrations/alembic/versions/5077ffcc5f1c_add_share_instances.py b/manila/db/migrations/alembic/versions/5077ffcc5f1c_add_share_instances.py
+index 42d26b75e..373e308d0 100644
+--- a/manila/db/migrations/alembic/versions/5077ffcc5f1c_add_share_instances.py
++++ b/manila/db/migrations/alembic/versions/5077ffcc5f1c_add_share_instances.py
+@@ -245,8 +245,8 @@ def upgrade_export_locations_table(connection):
+     with op.batch_alter_table("share_export_locations") as batch_op:
+         batch_op.drop_constraint('sel_id_fk', type_='foreignkey')
+         batch_op.drop_column('share_id')
+-        batch_op.rename_table('share_export_locations',
+-                              'share_instance_export_locations')
++    op.rename_table('share_export_locations',
++                            'share_instance_export_locations')
+ 
+ 
+ def downgrade_export_locations_table(connection):
+-- 
+2.34.1
diff --git a/images/neutron/Dockerfile b/images/neutron/Dockerfile
index d10ac94..dbb0ba6 100644
--- a/images/neutron/Dockerfile
+++ b/images/neutron/Dockerfile
@@ -15,11 +15,13 @@
 ARG RELEASE
 
 FROM registry.atmosphere.dev/library/openstack-venv-builder:${RELEASE} AS build
-ARG NEUTRON_GIT_REF=019294c71d94b788c14b23dc1da3c21f51bcdb0b
+ARG NEUTRON_GIT_REF=0fe6b7cec0e43c3048235ba1c05fd134e3413e1b
 ADD --keep-git-dir=true https://opendev.org/openstack/neutron.git#${NEUTRON_GIT_REF} /src/neutron
 RUN git -C /src/neutron fetch --unshallow
-ADD --keep-git-dir=true https://opendev.org/openstack/neutron-vpnaas.git#master /src/neutron-vpnaas
+ADD --keep-git-dir=true https://opendev.org/openstack/neutron-vpnaas.git#stable/2023.1 /src/neutron-vpnaas
 RUN git -C /src/neutron-vpnaas fetch --unshallow
+COPY patches/neutron /patches/neutron
+RUN git -C /src/neutron apply --verbose /patches/neutron/*
 RUN --mount=type=cache,mode=0755,target=/root/.cache/pip,sharing=private <<EOF bash -xe
 pip3 install \
     --constraint /upper-constraints.txt \
diff --git a/images/neutron/patches/neutron/0001-fix-ovn-set-mtu-in-external_ids-correctly.patch b/images/neutron/patches/neutron/0001-fix-ovn-set-mtu-in-external_ids-correctly.patch
new file mode 100644
index 0000000..a0ef434
--- /dev/null
+++ b/images/neutron/patches/neutron/0001-fix-ovn-set-mtu-in-external_ids-correctly.patch
@@ -0,0 +1,38 @@
+From f8ec437329510ef59c81084712dbfe49528ef56d Mon Sep 17 00:00:00 2001
+From: Mohammed Naser <mnaser@vexxhost.com>
+Date: Thu, 28 Mar 2024 14:38:43 -0400
+Subject: [PATCH] fix(ovn): set mtu in external_ids correctly
+
+In the previous patch, we did account for the MTU showing up
+in the external IDs however the code only sets it if it's using
+a remote managed port binding.  This code instead sets the binding
+for all the inerface types instead.
+
+Related-Change-Id: I7ff300e9634e5e3fc68d70540392109fd8b9babc
+Closes-Bug: 2053274
+Change-Id: I0653c83c5fb595847bb61182223db39b2f7e98c6
+---
+ .../plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py   | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py b/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py
+index 3e7bc5c01f..6f9e90afde 100644
+--- a/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py
++++ b/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py
+@@ -419,11 +419,11 @@ class OVNClient(object):
+         # HA Chassis Group will bind the port to the highest
+         # priority Chassis
+         if port_type != ovn_const.LSP_TYPE_EXTERNAL:
++            port_net = self._plugin.get_network(
++                context, port['network_id'])
++            mtu = str(port_net['mtu'])
+             if (bp_info.vnic_type == portbindings.VNIC_REMOTE_MANAGED and
+                     ovn_const.VIF_DETAILS_PF_MAC_ADDRESS in bp_info.bp_param):
+-                port_net = self._plugin.get_network(
+-                    context, port['network_id'])
+-                mtu = str(port_net['mtu'])
+                 options.update({
+                     ovn_const.LSP_OPTIONS_VIF_PLUG_TYPE_KEY: 'representor',
+                     ovn_const.LSP_OPTIONS_VIF_PLUG_MTU_REQUEST_KEY: mtu,
+-- 
+2.34.1
diff --git a/images/nova/Dockerfile b/images/nova/Dockerfile
index a36491d..cc9ed67 100644
--- a/images/nova/Dockerfile
+++ b/images/nova/Dockerfile
@@ -15,7 +15,7 @@
 ARG RELEASE
 
 FROM registry.atmosphere.dev/library/openstack-venv-builder:${RELEASE} AS build
-ARG NOVA_GIT_REF=c199becf52267ba37c5191f6f82e29bb5232b607
+ARG NOVA_GIT_REF=9cad74c51330ee952fe6c1897902533519739cef
 ADD --keep-git-dir=true https://opendev.org/openstack/nova.git#${NOVA_GIT_REF} /src/nova
 RUN git -C /src/nova fetch --unshallow
 RUN --mount=type=cache,mode=0755,target=/root/.cache/pip,sharing=private <<EOF bash -xe
@@ -27,7 +27,7 @@
         storpool.spopenstack
 EOF
 ADD --chmod=644 \
-    https://github.com/storpool/storpool-openstack-integration/raw/master/drivers/os_brick/openstack/bobcat/storpool.py \
+    https://github.com/storpool/storpool-openstack-integration/raw/master/drivers/os_brick/openstack/antelope/storpool.py \
     /var/lib/openstack/lib/python3.10/site-packages/os_brick/initiator/connectors/storpool.py
 
 FROM registry.atmosphere.dev/library/openstack-python-runtime:${RELEASE}
diff --git a/images/octavia/Dockerfile b/images/octavia/Dockerfile
index 53baf56..2aed975 100644
--- a/images/octavia/Dockerfile
+++ b/images/octavia/Dockerfile
@@ -15,10 +15,10 @@
 ARG RELEASE
 
 FROM registry.atmosphere.dev/library/openstack-venv-builder:${RELEASE} AS build
-ARG OCTAVIA_GIT_REF=824b51a1dad80292b7a8ad5d61bf3ce706b1fb29
+ARG OCTAVIA_GIT_REF=06251e9716719dd8f62144ecd41d26360a539f7d
 ADD --keep-git-dir=true https://opendev.org/openstack/octavia.git#${OCTAVIA_GIT_REF} /src/octavia
 RUN git -C /src/octavia fetch --unshallow
-ADD --keep-git-dir=true https://opendev.org/openstack/ovn-octavia-provider.git#master /src/ovn-octavia-provider
+ADD --keep-git-dir=true https://opendev.org/openstack/ovn-octavia-provider.git#stable/2023.1 /src/ovn-octavia-provider
 RUN git -C /src/ovn-octavia-provider fetch --unshallow
 RUN --mount=type=cache,mode=0755,target=/root/.cache/pip,sharing=private <<EOF bash -xe
 pip3 install \
diff --git a/images/openstack-venv-builder/Dockerfile b/images/openstack-venv-builder/Dockerfile
index a9b017c..077f430 100644
--- a/images/openstack-venv-builder/Dockerfile
+++ b/images/openstack-venv-builder/Dockerfile
@@ -15,7 +15,7 @@
 ARG RELEASE
 
 FROM registry.atmosphere.dev/library/ubuntu-cloud-archive:${RELEASE} AS requirements
-ADD https://releases.openstack.org/constraints/upper/master /upper-constraints.txt
+ADD https://releases.openstack.org/constraints/upper/2023.1 /upper-constraints.txt
 RUN <<EOF sh -xe
 sed -i '/glance-store/d' /upper-constraints.txt
 sed -i '/horizon/d' /upper-constraints.txt
diff --git a/images/placement/Dockerfile b/images/placement/Dockerfile
index be6c9f4..d8369ab 100644
--- a/images/placement/Dockerfile
+++ b/images/placement/Dockerfile
@@ -15,7 +15,7 @@
 ARG RELEASE
 
 FROM registry.atmosphere.dev/library/openstack-venv-builder:${RELEASE} AS build
-ARG PLACEMENT_GIT_REF=96a9aeb3b4a6ffff5bbf247b213409395239fc7a
+ARG PLACEMENT_GIT_REF=b3652feea1855c9481c9441976379d9851c0c62f
 ADD --keep-git-dir=true https://opendev.org/openstack/placement.git#${PLACEMENT_GIT_REF} /src/placement
 RUN git -C /src/placement fetch --unshallow
 RUN --mount=type=cache,mode=0755,target=/root/.cache/pip,sharing=private <<EOF bash -xe
diff --git a/images/senlin/Dockerfile b/images/senlin/Dockerfile
index 659e137..41d6590 100644
--- a/images/senlin/Dockerfile
+++ b/images/senlin/Dockerfile
@@ -15,7 +15,7 @@
 ARG RELEASE
 
 FROM registry.atmosphere.dev/library/openstack-venv-builder:${RELEASE} AS build
-ARG SENLIN_GIT_REF=ec5fae997686c64c3c1192b231b2434e6a6aeb1c
+ARG SENLIN_GIT_REF=22fd77946723e25e595676e61893c1f645709b2f
 ADD --keep-git-dir=true https://opendev.org/openstack/senlin.git#${SENLIN_GIT_REF} /src/senlin
 RUN git -C /src/senlin fetch --unshallow
 RUN --mount=type=cache,mode=0755,target=/root/.cache/pip,sharing=private <<EOF bash -xe
diff --git a/images/tempest/Dockerfile b/images/tempest/Dockerfile
index 95746a8..93da97f 100644
--- a/images/tempest/Dockerfile
+++ b/images/tempest/Dockerfile
@@ -37,7 +37,7 @@
 RUN git -C /src/neutron-tempest-plugin fetch --unshallow
 ADD --keep-git-dir=true https://opendev.org/openstack/octavia-tempest-plugin.git#master /src/octavia-tempest-plugin
 RUN git -C /src/octavia-tempest-plugin fetch --unshallow
-ADD https://releases.openstack.org/constraints/upper/master /upper-constraints.txt
+ADD https://releases.openstack.org/constraints/upper/2023.1 /upper-constraints.txt
 RUN --mount=type=cache,mode=0755,target=/root/.cache/pip,sharing=private <<EOF bash -xe
 pip3 install \
     --constraint /upper-constraints.txt \
diff --git a/roles/defaults/vars/main.yml b/roles/defaults/vars/main.yml
index ca37422..6d60ce3 100644
--- a/roles/defaults/vars/main.yml
+++ b/roles/defaults/vars/main.yml
@@ -12,7 +12,7 @@
 # License for the specific language governing permissions and limitations
 # under the License.
 
-atmosphere_release: main
+atmosphere_release: 2023.1
 
 _atmosphere_images:
   alertmanager: quay.io/prometheus/alertmanager:v0.27.0
diff --git a/zuul.d/container-images/base.yaml b/zuul.d/container-images/base.yaml
index 021dbfc..8a61a87 100644
--- a/zuul.d/container-images/base.yaml
+++ b/zuul.d/container-images/base.yaml
@@ -33,6 +33,7 @@
     irrelevant-files:
       - ^doc/
     vars: &image_vars
+      full_rebuild_date: 22-05-2024
       container_command: docker
       promote_container_image_method: intermediate-registry
       buildset_registry_namespaces:
diff --git a/zuul.d/playbooks/build-collection/run.yml b/zuul.d/playbooks/build-collection/run.yml
index 0560231..7e9ab79 100644
--- a/zuul.d/playbooks/build-collection/run.yml
+++ b/zuul.d/playbooks/build-collection/run.yml
@@ -20,6 +20,8 @@
         name: tox
       vars:
         tox_envlist: pin-digests
+      when:
+        - zuul.pipeline == 'publish'
 
     - name: Print out the new image manifest file
       ansible.builtin.command: |