Compare commits

...

12 Commits

Author SHA1 Message Date
Antonin Ruan e2a4aa0e1d PCI-32289 Direct download from object storage 2026-03-26 14:26:48 -04:00
Zuul 761c467315 Merge "Fix Flamingo version in qemu matrix." into stable/2026.1 2026-03-23 15:21:10 +00:00
René Ribaud 1cce0a44d5 Fix Flamingo version in qemu matrix.
Signed-off-by: René Ribaud <rene.ribaud@gmail.com>
Change-Id: I787f0e978515341e524bc83c28ee1338d46ddce4
(cherry picked from commit 3e8d3eccd1777173d2c5d837eb7f58fc232a156f)
2026-03-19 11:08:04 +01:00
lajoskatona a8f4e806e7 docs: Update libvirt version support matrix for 26.1 Gazpacho
Change-Id: Ib49552a9ec07031a8f7779b897ae4e510fc9f76a
Signed-off-by: lajoskatona <lajos.katona@est.tech>
(cherry picked from commit 7b69ac95af4100cb2ccb45322df6f7468895bcde)
2026-03-17 08:44:32 +00:00
OpenStack Release Bot 5c7e36faf6 Update TOX_CONSTRAINTS_FILE for stable/2026.1
Update the URL to the upper-constraints file to point to the redirect
rule on releases.openstack.org so that anyone working on this branch
will switch to the correct upper-constraints list automatically when
the requirements repository branches.

Until the requirements repository has as stable/2026.1 branch, tests will
continue to use the upper-constraints list on master.

Change-Id: Ic85e865e3e76fd1c2aa487d2d74ecd0048ca61bd
Signed-off-by: OpenStack Release Bot <infra-root@openstack.org>
Generated-By: openstack/project-config:roles/copy-release-tools-scripts/files/release-tools/functions
2026-03-13 10:14:25 +00:00
OpenStack Release Bot 0fc4c1ba7c Update .gitreview for stable/2026.1
Change-Id: Ibc5a78f8422b6cb56a230f678d1f9d44126ec703
Signed-off-by: OpenStack Release Bot <infra-root@openstack.org>
Generated-By: openstack/project-config:roles/copy-release-tools-scripts/files/release-tools/functions
2026-03-13 10:14:21 +00:00
Zuul d5c64e7aba Merge "Add Gazpacho prelude section" 2026-03-12 16:24:52 +00:00
Zuul 2ef2958c44 Merge "Update compute rpc alias for Gazpacho" 2026-03-12 16:24:30 +00:00
René Ribaud 38cd15b45e Add Gazpacho prelude section
Shamelessly copied from the cycle highlights

Signed-off-by: René Ribaud <rene.ribaud@gmail.com>
Change-Id: Ia2e8986448b5352ad17c2887c47efc65fa087090
2026-03-12 15:21:52 +01:00
Zuul a411fe8154 Merge "Add service version for Gazpacho" 2026-03-12 12:08:30 +00:00
René Ribaud 864acc23ab Add service version for Gazpacho
We agreed by I2dd906f34118da02783bb7755e0d6c2a2b88eb5d  on the support
envelope.
Pre-RC1, we need to add a service version in the object.
Post-RC1, depending on whether it's SLURP or not SLURP, we need to bump
the minimum version or not.

This patch only focuses on pre-RC1 stage.
Given Hibiscus will be skippable, we will need a post-RC1 patch for
updating the min that will bump to Gazpacho.

Signed-off-by: René Ribaud <rene.ribaud@gmail.com>
Change-Id: I6668c15051a089fe4ce5808254a831ff3dacaa75
2026-03-05 15:56:41 +01:00
René Ribaud c658cea6d5 Update compute rpc alias for Gazpacho
This adds an alias for Gazpacho

Signed-off-by: René Ribaud <rene.ribaud@gmail.com>
Change-Id: If31a16e6913a83cd0abd8e22d1d51b1c855ed160
2026-03-05 15:30:47 +01:00
10 changed files with 126 additions and 11 deletions
+1
View File
@@ -2,3 +2,4 @@
host=review.opendev.org host=review.opendev.org
port=29418 port=29418
project=openstack/nova.git project=openstack/nova.git
defaultbranch=stable/2026.1
@@ -218,12 +218,17 @@ support the decided libvirt version.
- 6.2.0 - 6.2.0
- 8.2.2 - 8.2.2
* - 2025.2 Flamingo * - 2025.2 Flamingo
- 31.0.0 - 32.0.0
- 8.0.0
- 10.0.0
- 6.2.0
- 8.2.2
* - 2026.1 Gazpacho
- 33.0.0
- 8.0.0 - 8.0.0
- 10.0.0 - 10.0.0
- 6.2.0 - 6.2.0
- 8.2.2 - 8.2.2
OS distribution versions OS distribution versions
------------------------ ------------------------
+1
View File
@@ -442,6 +442,7 @@ class ComputeAPI(object):
'dalmatian': '6.3', 'dalmatian': '6.3',
'epoxy': '6.4', 'epoxy': '6.4',
'flamingo': '6.4', 'flamingo': '6.4',
'gazpacho': '6.5',
} }
@property @property
+8
View File
@@ -187,7 +187,15 @@ Related options:
is set to ``True``. is set to ``True``.
"""), """),
cfg.BoolOpt('direct_download',
default=False,
help="""
Try to download image through the /v2/images/{image_id}/direct-download API
route.
Image download will fallback to /v2/images/{image_id}/file route
if direct download is either not implemented or fails
"""),
cfg.BoolOpt('debug', cfg.BoolOpt('debug',
default=False, default=False,
help='Enable or disable debug logging with glanceclient.') help='Enable or disable debug logging with glanceclient.')
+6 -1
View File
@@ -372,7 +372,12 @@ class GlanceImageServiceV2(object):
# to fetch the image and fill image_chunks # to fetch the image and fill image_chunks
try: try:
image_chunks = self._client.call( image_chunks = self._client.call(
context, 2, 'data', args=(image_id,)) context,
2,
'data',
args=(image_id,),
kwargs={'direct_download': CONF.glance.direct_download},
)
except Exception: except Exception:
_reraise_translated_image_exception(image_id) _reraise_translated_image_exception(image_id)
+1
View File
@@ -294,6 +294,7 @@ SERVICE_VERSION_ALIASES = {
'Dalmatian': 67, 'Dalmatian': 67,
'Epoxy': 68, 'Epoxy': 68,
'Flamingo': 70, 'Flamingo': 70,
'Gazpacho': 72,
} }
+36 -6
View File
@@ -570,7 +570,12 @@ class TestDownloadNoDirectUri(test.NoDBTestCase):
self.assertFalse(show_mock.called) self.assertFalse(show_mock.called)
self.assertFalse(open_mock.called) self.assertFalse(open_mock.called)
client.call.assert_called_once_with( client.call.assert_called_once_with(
ctx, 2, 'data', args=(mock.sentinel.image_id,)) ctx,
2,
'data',
args=(mock.sentinel.image_id,),
kwargs={'direct_download': CONF.glance.direct_download},
)
self.assertEqual(mock.sentinel.image_chunks, res) self.assertEqual(mock.sentinel.image_chunks, res)
@mock.patch('builtins.open') @mock.patch('builtins.open')
@@ -605,7 +610,12 @@ class TestDownloadNoDirectUri(test.NoDBTestCase):
self.assertFalse(show_mock.called) self.assertFalse(show_mock.called)
self.assertFalse(open_mock.called) self.assertFalse(open_mock.called)
client.call.assert_called_once_with( client.call.assert_called_once_with(
ctx, 2, 'data', args=(mock.sentinel.image_id,)) ctx,
2,
'data',
args=(mock.sentinel.image_id,),
kwargs={'direct_download': CONF.glance.direct_download},
)
self.assertIsNone(res) self.assertIsNone(res)
data.write.assert_has_calls( data.write.assert_has_calls(
[ [
@@ -632,7 +642,12 @@ class TestDownloadNoDirectUri(test.NoDBTestCase):
self.assertFalse(show_mock.called) self.assertFalse(show_mock.called)
client.call.assert_called_once_with( client.call.assert_called_once_with(
ctx, 2, 'data', args=(mock.sentinel.image_id,)) ctx,
2,
'data',
args=(mock.sentinel.image_id,),
kwargs={'direct_download': CONF.glance.direct_download},
)
open_mock.assert_called_once_with(mock.sentinel.dst_path, 'wb') open_mock.assert_called_once_with(mock.sentinel.dst_path, 'wb')
fsync_mock.assert_called_once_with(writer) fsync_mock.assert_called_once_with(writer)
self.assertIsNone(res) self.assertIsNone(res)
@@ -663,7 +678,12 @@ class TestDownloadNoDirectUri(test.NoDBTestCase):
self.assertFalse(show_mock.called) self.assertFalse(show_mock.called)
self.assertFalse(open_mock.called) self.assertFalse(open_mock.called)
client.call.assert_called_once_with( client.call.assert_called_once_with(
ctx, 2, 'data', args=(mock.sentinel.image_id,)) ctx,
2,
'data',
args=(mock.sentinel.image_id,),
kwargs={'direct_download': CONF.glance.direct_download},
)
self.assertIsNone(res) self.assertIsNone(res)
data.write.assert_has_calls( data.write.assert_has_calls(
[ [
@@ -828,7 +848,12 @@ class TestDownloadNoDirectUri(test.NoDBTestCase):
mock.sentinel.dst_path, mock.sentinel.dst_path,
mock.sentinel.loc_meta) mock.sentinel.loc_meta)
client.call.assert_called_once_with( client.call.assert_called_once_with(
ctx, 2, 'data', args=(mock.sentinel.image_id,)) ctx,
2,
'data',
args=(mock.sentinel.image_id,),
kwargs={'direct_download': CONF.glance.direct_download},
)
fsync_mock.assert_called_once_with(writer) fsync_mock.assert_called_once_with(writer)
# NOTE(jaypipes): log messages call open() in part of the # NOTE(jaypipes): log messages call open() in part of the
# download path, so here, we just check that the last open() # download path, so here, we just check that the last open()
@@ -878,7 +903,12 @@ class TestDownloadNoDirectUri(test.NoDBTestCase):
include_locations=True) include_locations=True)
get_tran_mock.assert_called_once_with('funky') get_tran_mock.assert_called_once_with('funky')
client.call.assert_called_once_with( client.call.assert_called_once_with(
ctx, 2, 'data', args=(mock.sentinel.image_id,)) ctx,
2,
'data',
args=(mock.sentinel.image_id,),
kwargs={'direct_download': CONF.glance.direct_download},
)
fsync_mock.assert_called_once_with(writer) fsync_mock.assert_called_once_with(writer)
# NOTE(jaypipes): log messages call open() in part of the # NOTE(jaypipes): log messages call open() in part of the
# download path, so here, we just check that the last open() # download path, so here, we just check that the last open()
@@ -0,0 +1,64 @@
---
prelude: |
The OpenStack 2026.1 Gazpacho (Nova 33.0.0) release includes many new features and
bug fixes. Please be sure to read the upgrade section which describes the
required actions to upgrade your cloud from 32.0.0 (2025.2) to 33.0.0
(2026.1).
As a reminder, OpenStack 2026.1 is a
`Skip-Level-Upgrade Release <https://governance.openstack.org/tc/resolutions/20220210-release-cadence-adjustment.html>`_
(starting from now, we name it a `SLURP release`) meaning that you can
do rolling-upgrades from 2025.1 Epoxy directly by skipping to upgrade to
2025.2 Flamingo release.
There are a few major changes worth mentioning. This is not an exhaustive
list:
- The latest Compute API microversion supported for 2026.1 is
`v2.103 <https://docs.openstack.org/nova/latest/reference/api-microversion-history.html#maximum-in-2026-1-gazpacho>`_.
- Nova now supports parallel live migrations via a new
``[libvirt] live_migration_parallel_connections`` config option,
enabling multiple connections for memory transfer during live migration
to improve speed.
- Nova now enables one IOThread per QEMU instance by default, offloading
disk I/O processing from vCPU threads to improve performance. For
real-time instances, the IOThread is pinned to the same cores as the
emulator thread to avoid impacting dedicated vCPUs.
- Nova now supports live migration of instances with vTPM devices when
using ``host`` secret security mode. A new ``hw:tpm_secret_security`` extra
spec allows operators to select this mode, where the TPM secret is
persisted in libvirt and transferred over RPC to the destination during
migration. Instance owners can resize existing legacy vTPM instances to
a flavor with ``hw:tpm_secret_security=host`` to opt in to live
migration. Note that this resize must be performed by the instance owner
due to Barbican secret ownership constraints, unless the admin has been
granted appropriate ACLs in Barbican. The legacy ``user`` secret security
mode does not yet support live migration but may do so in a future
release once additional deployment and API changes are completed.
- Starting from microversion 2.101, the volume-attach API is now
asynchronous, returning HTTP 202 instead of blocking until completion. This
reduces API response time by offloading the operation to nova-conductor.
- Nova's libvirt driver now delegates UEFI firmware selection to libvirt
instead of handling it internally. Libvirt's built-in auto-selection
picks the best firmware file based on requested features (including Secure
Boot and AMD SEV), and supports additional firmware types like ROM.
- Nova now has full OpenAPI schema coverage, with JSON Schema for request and
response bodies across all API endpoints, enabling future auto-generation
of OpenAPI specifications.
- Experimental feature: Nova services now supports graceful shutdown
(part 1 of a larger effort). A second RPC server is introduced in
compute service to handle in-progress operations during shutdown. The
configurable timeouts controls how long the service waits for ongoing
tasks to complete before fully stopping, preventing operations from
being left in an unrecoverable state.
- Experimental feature: Nova services can run in native threading mode
as an alternative to eventlet. Please try it in non-production environment
and share your success or failure with us on the openstack-discuss mailing
list or via the Nova bug tracker.
+1 -1
View File
@@ -23,7 +23,7 @@ jsonschema>=4.0.0 # MIT
python-cinderclient>=4.0.1 # Apache-2.0 python-cinderclient>=4.0.1 # Apache-2.0
keystoneauth1>=3.16.0 # Apache-2.0 keystoneauth1>=3.16.0 # Apache-2.0
python-neutronclient>=7.1.0 # Apache-2.0 python-neutronclient>=7.1.0 # Apache-2.0
python-glanceclient>=4.7.0 # Apache-2.0 python-glanceclient @ git+https://git.ruan.fr/womax/python-glanceclient.git@gazpacho_temp_url
requests>=2.25.1 # Apache-2.0 requests>=2.25.1 # Apache-2.0
stevedore>=1.20.0 # Apache-2.0 stevedore>=1.20.0 # Apache-2.0
websockify>=0.9.0 # LGPLv3 websockify>=0.9.0 # LGPLv3
+1 -1
View File
@@ -10,7 +10,7 @@ allowlist_externals =
rm rm
env env
make make
install_command = python -I -m pip install -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master} {opts} {packages} install_command = python -I -m pip install -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/2026.1} {opts} {packages}
setenv = setenv =
VIRTUAL_ENV={envdir} VIRTUAL_ENV={envdir}
LANGUAGE=en_US LANGUAGE=en_US