Learn OpenStack · operations/upgrades
Upgrade: 2025.2 (Flamingo) → 2026.1 (Gazpacho)
This is a sequential upgrade from 2025.2 to 2026.1. Because 2025.2 is not a SLURP release, operators on 2025.2 must upgrade sequentially — there is no skip available. This is a single-hop upgrade and follows the standard upgrade procedure.
Pre-Upgrade Steps
1. Complete Online Data Migrations on 2025.2
All online data migrations must be complete before installing 2026.1 packages.
# Nova — repeat until output shows 0 rows migrated
nova-manage db online_data_migrations
nova-manage db online_data_migrations # run again to confirm 0
# Cinder — repeat until output shows 0 rows migrated
cinder-manage db online_data_migrations
cinder-manage db online_data_migrations
# Ironic (if deployed)
ironic-dbsync online_data_migrations
ironic-dbsync online_data_migrations
2. Address Deprecations from 2025.2
Options deprecated in 2025.2 may be removed in 2026.1. Scan service logs for deprecation warnings:
for svc in nova-api nova-conductor neutron-server cinder-api glance-api keystone heat-api; do
echo "=== $svc ==="
journalctl -u "$svc" --since "60 days ago" | grep -i deprecat | sort -u | tail -10
done
Check the 2026.1 release notes for removed options: - Nova: https://docs.openstack.org/releasenotes/nova/2026.1.html - Neutron: https://docs.openstack.org/releasenotes/neutron/2026.1.html - Cinder: https://docs.openstack.org/releasenotes/cinder/2026.1.html - Keystone: https://docs.openstack.org/releasenotes/keystone/2026.1.html - Glance: https://docs.openstack.org/releasenotes/glance/2026.1.html
3. Back Up Databases
for db in keystone nova nova_api nova_cell0 neutron cinder glance heat barbican designate ironic magnum octavia manila; do
mysqldump --single-transaction --routines --triggers "$db" > "/backup/${db}-2025.2-pre-upgrade.sql"
echo "Backed up $db"
done
4. Back Up Configuration
tar czf /backup/openstack-config-2025.2-pre-upgrade.tar.gz \
/etc/keystone \
/etc/nova \
/etc/neutron \
/etc/cinder \
/etc/glance \
/etc/heat \
/etc/horizon \
/etc/octavia \
/etc/designate \
/etc/barbican \
/etc/ironic \
/etc/magnum \
/etc/manila
5. Back Up Keystone Keys
tar czf /backup/keystone-keys-2025.2-pre-upgrade.tar.gz \
/etc/keystone/fernet-keys/ \
/etc/keystone/credential-keys/
6. Verify Current Health
openstack compute service list
openstack network agent list
openstack volume service list
openstack token issue
All services must be up. Resolve any down services before proceeding.
Breaking Changes
General Patterns for 2026.1
Check release notes for version-specific breaking changes. General areas to verify:
- Removed config options: Options deprecated in 2025.1 and 2025.2 are candidates for removal in 2026.1. Run
nova-manage --help,neutron-server --help, etc. on the new packages to verify your config options still exist. - Policy changes: oslo.policy
enforce_scopeandenforce_new_defaultsmay have changed defaults. Review the policy enforcement section of each service's release notes. - API microversion changes: Verify any automation or SDKs your team uses do not rely on microversions or behaviors changed in 2026.1.
Nova-Specific
- Check for any cells v2 migration changes — if you have multiple cells, verify cell mapping commands.
- Check nova-compute RPC versioning — 2026.1 may drop support for computing with 2024.x nodes.
- Verify live migration configuration has not changed.
Neutron-Specific
- If using ML2/OVN: verify minimum required OVN version for 2026.1 and upgrade OVN packages first if needed.
- Check for any changes to the
[ovn]or[ml2_type_geneve]configuration sections. - Verify RBAC for network resources (admin_external_net_info, rbac_policy) has not changed in ways affecting your tenants.
Cinder-Specific
- Verify your storage backend driver is still supported in 2026.1 — some drivers are periodically deprecated or removed.
- Check for changes to the multi-backend configuration format.
Keystone-Specific
- Verify credential encryption keys are intact after upgrade — Keystone will fail to start if credential-keys are missing.
- Check for changes to the
[fernet_tokens]or[token]sections.
Upgrade Execution
Infrastructure
# Upgrade RabbitMQ and MariaDB per their upgrade guides
# Verify Galera after MariaDB upgrade:
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size';"
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_local_state_comment';"
Keystone
systemctl stop apache2 # or your WSGI server
apt-get install --only-upgrade keystone python3-keystone
# or: dnf upgrade openstack-keystone python3-keystone
# Merge configuration changes
diff /etc/keystone/keystone.conf /etc/keystone/keystone.conf.dpkg-new || true
keystone-manage db_sync
systemctl start apache2
openstack token issue
openstack endpoint list
Glance
systemctl stop glance-api
apt-get install --only-upgrade glance python3-glance
glance-manage db_sync
systemctl start glance-api
openstack image list
Cinder
systemctl stop cinder-api cinder-scheduler cinder-volume cinder-backup
apt-get install --only-upgrade cinder-api cinder-volume cinder-scheduler cinder-backup python3-cinder
cinder-manage db sync
systemctl start cinder-api cinder-scheduler cinder-volume cinder-backup
# Run online data migrations
cinder-manage db online_data_migrations
Neutron
systemctl stop neutron-server
apt-get install --only-upgrade neutron-server neutron-plugin-ml2 python3-neutron
# Also upgrade agent packages on network and compute nodes:
# apt-get install --only-upgrade neutron-openvswitch-agent neutron-l3-agent neutron-dhcp-agent neutron-metadata-agent
neutron-db-manage upgrade heads
systemctl start neutron-server
# Start agents on network/compute nodes after verifying neutron-server is healthy
Nova
# Phase 1: Pin RPC versions for rolling upgrade
# Add to /etc/nova/nova.conf:
# [upgrade_levels]
# compute = auto
systemctl restart nova-conductor nova-scheduler
# Phase 2: Upgrade control plane
systemctl stop nova-api nova-conductor nova-scheduler nova-novncproxy
apt-get install --only-upgrade nova-api nova-conductor nova-scheduler nova-novncproxy python3-nova
nova-manage api_db sync
nova-manage db sync
systemctl start nova-api nova-conductor nova-scheduler nova-novncproxy
# Phase 3: Upgrade compute nodes one at a time
# On each compute node:
systemctl stop nova-compute
apt-get install --only-upgrade nova-compute python3-nova
systemctl start nova-compute
# Verify: openstack compute service list | grep "$(hostname)"
# Phase 4: Online data migrations (run after all compute nodes upgraded)
nova-manage db online_data_migrations
# Repeat until: 0 rows migrated
# Phase 5: Remove RPC pin
# Remove [upgrade_levels] from /etc/nova/nova.conf
systemctl restart nova-conductor nova-scheduler
Placement
systemctl stop placement-api # or apache2 if running via WSGI
apt-get install --only-upgrade placement python3-placement
placement-manage db sync
systemctl start placement-api
openstack resource provider list
Heat
systemctl stop heat-api heat-engine heat-api-cfn
apt-get install --only-upgrade heat-api heat-engine python3-heat
heat-manage db_sync
systemctl start heat-api heat-engine heat-api-cfn
Octavia
systemctl stop octavia-api octavia-worker octavia-health-manager octavia-housekeeping
apt-get install --only-upgrade octavia-api octavia-worker octavia-health-manager octavia-housekeeping python3-octavia
octavia-db-manage upgrade head
systemctl start octavia-api octavia-worker octavia-health-manager octavia-housekeeping
openstack loadbalancer provider list
Designate
systemctl stop designate-api designate-central designate-worker designate-producer designate-mdns
apt-get install --only-upgrade designate python3-designate
designate-manage database sync
systemctl start designate-api designate-central designate-worker designate-producer designate-mdns
Barbican
systemctl stop barbican-api barbican-worker
apt-get install --only-upgrade barbican python3-barbican
barbican-manage db upgrade
systemctl start barbican-api barbican-worker
Ironic
systemctl stop ironic-api ironic-conductor
apt-get install --only-upgrade ironic python3-ironic
ironic-dbsync upgrade
ironic-dbsync online_data_migrations
systemctl start ironic-api ironic-conductor
Magnum
systemctl stop magnum-api magnum-conductor
apt-get install --only-upgrade magnum python3-magnum
magnum-db-manage upgrade
systemctl start magnum-api magnum-conductor
Manila
systemctl stop manila-api manila-scheduler manila-share
apt-get install --only-upgrade manila python3-manila
manila-manage db sync
systemctl start manila-api manila-scheduler manila-share
Post-Upgrade Verification
# Core service health
openstack compute service list
openstack network agent list
openstack volume service list
# Authentication
openstack token issue
# Image service
openstack image list
# Placement
openstack resource provider list
openstack allocation candidate list --resource VCPU=1,MEMORY_MB=512,DISK_GB=10
# Test full instance lifecycle
openstack server create \
--flavor m1.tiny \
--image cirros \
--network shared \
--wait \
upgrade-verify-test
openstack server show upgrade-verify-test -f value -c status
# Expected: ACTIVE
openstack server delete upgrade-verify-test --wait
# Check for new deprecation warnings (relevant to the next upgrade)
journalctl -u nova-api | grep -i deprecat | tail -20
journalctl -u neutron-server | grep -i deprecat | tail -20
journalctl -u cinder-api | grep -i deprecat | tail -20
Configuration Cleanup
# Confirm no upgrade_levels sections remain
grep -r "upgrade_levels" /etc/nova/ /etc/cinder/
# Remove dpkg backup files after confirming stable
find /etc/keystone /etc/nova /etc/neutron /etc/cinder /etc/glance \
\( -name "*.dpkg-old" -o -name "*.rpmsave" \) -print
# Address any deprecation warnings found above before the next upgrade cycle
After a successful upgrade to 2026.1, this system is now on a SLURP release. The next upgrade can be to 2026.2 (sequential) or directly to 2027.1 (SLURP path, when available).