mirror of
https://opendev.org/openstack/ironic.git
synced 2026-01-11 19:57:20 +00:00
Merge "Remove ovn vtep support"
This commit is contained in:
commit
3b4e3801a1
8 changed files with 48 additions and 50 deletions
|
|
@ -169,19 +169,6 @@ above and beyond a dedicated interface, you will need to make the attachment
|
|||
on the ``br-ex`` integration bridge, as opposed to ``br-int`` as one would
|
||||
have done with OVS.
|
||||
|
||||
VTEP Switch Support
|
||||
===================
|
||||
|
||||
Alpha-quality support was added to Ironic for OVN VTEP switches in API version
|
||||
1.90. When the keys ``vtep-logical-switch``, ``vtep-physical-switch``, and
|
||||
``port_id`` are set in ``port.local_link_connection``, Ironic will pass them on
|
||||
to Neutron to be included in the binding profile to enable OVN support.
|
||||
|
||||
There `are reports of this approach working <https://bugs.launchpad.net/ironic/+bug/2034953>`_,
|
||||
but Ironic developers do not have access to physical hardware to fully test
|
||||
this feature. If you have any feedback for this feature, please reach out
|
||||
to the Ironic community.
|
||||
|
||||
Unknowns
|
||||
========
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,14 @@
|
|||
REST API Version History
|
||||
========================
|
||||
|
||||
1.105 (Gazpacho)
|
||||
----------------------
|
||||
|
||||
Removes support to set an OVN VTEP endpoint for ``local_link_information``.
|
||||
Investigation by multiple contributors and maintainers realized that
|
||||
this experiemntal feature was not scalable and relies upon a manual
|
||||
ovn vtep endpoint service, and as such has been removed.
|
||||
|
||||
1.104 (Gazpacho)
|
||||
------------------------
|
||||
|
||||
|
|
|
|||
|
|
@ -405,7 +405,8 @@ class PortsController(rest.RestController):
|
|||
if (not api_utils.allow_local_link_connection_network_type()
|
||||
and 'network_type' in fields['local_link_connection']):
|
||||
raise exception.NotAcceptable()
|
||||
if (not api_utils.allow_ovn_vtep_version()
|
||||
if ((not api_utils.allow_ovn_vtep_version()
|
||||
or api_utils.upper_ovn_vtep_version())
|
||||
and 'vtep-logical-switch'
|
||||
in fields['local_link_connection']):
|
||||
raise exception.NotAcceptable()
|
||||
|
|
|
|||
|
|
@ -96,6 +96,10 @@ TRAITS_SCHEMA = {
|
|||
]
|
||||
}
|
||||
|
||||
# NOTE(TheJulia): Support for vtep-physical-switch and
|
||||
# vtep-logical-switch has been removed as of API version 1.104,
|
||||
# but is still permitted on the API surface in the version range
|
||||
# so we don't break overall API interaction compatibility.
|
||||
LOCAL_LINK_BASE_SCHEMA = {
|
||||
'type': 'object',
|
||||
'properties': {
|
||||
|
|
@ -2095,6 +2099,15 @@ def allow_ovn_vtep_version():
|
|||
return api.request.version.minor >= versions.MINOR_90_OVN_VTEP
|
||||
|
||||
|
||||
def upper_ovn_vtep_version():
|
||||
"""Check if the ovn vtep version is at or beyond the removal.
|
||||
|
||||
Version 1.105 removed VTEP support logic, but we need to keep
|
||||
the underlying api compatabity for now.
|
||||
"""
|
||||
return api.request.version.minor <= versions.MINOR_105_REMOVE_OVN_VTEP
|
||||
|
||||
|
||||
def allow_build_configdrive():
|
||||
"""Check if building configdrive is allowed.
|
||||
|
||||
|
|
|
|||
|
|
@ -142,7 +142,8 @@ BASE_VERSION = 1
|
|||
# v1.102: Add physical_network field to portgroup.
|
||||
# v1.103: Add category field to portgroup
|
||||
# v1.104: Add instance_name to node
|
||||
|
||||
# v1.103: Add category field to portgroup.
|
||||
# v1.105: Remove broken ovn vtep metadata support
|
||||
|
||||
MINOR_0_JUNO = 0
|
||||
MINOR_1_INITIAL_VERSION = 1
|
||||
|
|
@ -249,7 +250,7 @@ MINOR_101_PORT_CATEGORY = 101
|
|||
MINOR_102_PORTGROUP_PHYSICAL_NETWORK = 102
|
||||
MINOR_103_PORTGROUP_CATEGORY = 103
|
||||
MINOR_104_NODE_INSTANCE_NAME = 104
|
||||
|
||||
MINOR_105_REMOVE_OVN_VTEP = 105
|
||||
|
||||
# When adding another version, update:
|
||||
# - MINOR_MAX_VERSION
|
||||
|
|
@ -259,7 +260,7 @@ MINOR_104_NODE_INSTANCE_NAME = 104
|
|||
# - Add a comment describing the change above the list of consts
|
||||
|
||||
|
||||
MINOR_MAX_VERSION = MINOR_104_NODE_INSTANCE_NAME
|
||||
MINOR_MAX_VERSION = MINOR_105_REMOVE_OVN_VTEP
|
||||
|
||||
# String representations of the minor and maximum versions
|
||||
_MIN_VERSION_STRING = '{}.{}'.format(BASE_VERSION, MINOR_1_INITIAL_VERSION)
|
||||
|
|
|
|||
|
|
@ -362,16 +362,6 @@ def add_ports_to_network(task, network_uuid, security_groups=None):
|
|||
binding_profile = {'local_link_information':
|
||||
[portmap[ironic_port.uuid]]}
|
||||
|
||||
# Determine if network type is OVN
|
||||
if is_ovn_vtep_port(ironic_port):
|
||||
vtep_logical_switch = \
|
||||
portmap[ironic_port.uuid]['vtep-logical-switch']
|
||||
vtep_physical_switch = \
|
||||
portmap[ironic_port.uuid]['vtep-physical-switch']
|
||||
binding_profile['vtep-logical-switch'] = vtep_logical_switch
|
||||
binding_profile['vtep-physical-switch'] = vtep_physical_switch
|
||||
|
||||
# Include physical_network if available
|
||||
if ironic_port.physical_network:
|
||||
binding_profile['physical_network'] = ironic_port.physical_network
|
||||
|
||||
|
|
@ -460,28 +450,6 @@ def add_ports_to_network(task, network_uuid, security_groups=None):
|
|||
return ports
|
||||
|
||||
|
||||
def is_ovn_vtep_port(port_info):
|
||||
"""Check if the current port is an OVN VTEP port
|
||||
|
||||
:param port_info: an instance of ironic.objects.port.Port
|
||||
or port data as a port like object
|
||||
:returns: Boolean indicating if the port is an OVN VTEP port
|
||||
"""
|
||||
|
||||
local_link_connection = {}
|
||||
|
||||
if isinstance(port_info, objects.Port):
|
||||
local_link_connection = port_info.local_link_connection
|
||||
elif isinstance(port_info, dict):
|
||||
local_link_connection = port_info['local_link_connection']
|
||||
|
||||
if all(k in local_link_connection.keys()
|
||||
for k in ['vtep-logical-switch', 'vtep-physical-switch']):
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
|
||||
def remove_ports_from_network(task, network_uuid):
|
||||
"""Deletes the neutron ports created for booting the ramdisk.
|
||||
|
||||
|
|
|
|||
|
|
@ -944,7 +944,7 @@ RELEASE_MAPPING = {
|
|||
# make it below. To release, we will preserve a version matching
|
||||
# the release as a separate block of text, like above.
|
||||
'master': {
|
||||
'api': '1.104',
|
||||
'api': '1.105',
|
||||
'rpc': '1.62',
|
||||
'networking_rpc': '1.0',
|
||||
'objects': {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,20 @@
|
|||
---
|
||||
deprecations:
|
||||
- |
|
||||
Ironic is deprecating and immediately removing the capability to pass
|
||||
OVN VTEP connection information across through to Neutron. Over the
|
||||
past year, multiple contributors have looked into this alpha level
|
||||
functionality which was merged into Ironic and it was realized that
|
||||
the functionality was geared for the OVN VTEP port service which is
|
||||
a separate service one must launch on a OVN networking node to make
|
||||
an attachment.
|
||||
|
||||
Since the functionality which was merged into ironic is unsuitable for
|
||||
scaled and automated operations it must be removed. API field
|
||||
validation is being kept, and the API version has bee incremented to
|
||||
``1.104`` to signify this change, however the passing on Neutron
|
||||
Port Binding has been removed.
|
||||
|
||||
Ironic developers are actively working on a performant solution
|
||||
in the short term. We hope to have something else usable before the
|
||||
2026.1 release.
|
||||
Loading…
Add table
Reference in a new issue