Use the "connectivity" property of "MechanismDriver"

The base class "MechanismDriver" now has a property called
"connectivity". This patch overrides the default value in the
in-tree drivers.

The method "_check_drivers_connectivity" now uses this property
that is available in all drivers.

Depends-On: https://review.opendev.org/c/openstack/neutron-lib/+/826501

Closes-Bug: #1959125
bp boot-vm-with-unaddressed-port
Related-Bug: #1821058

Change-Id: I91734835b07d804365b46adfb26e984557107d80
This commit is contained in:
Rodolfo Alonso Hernandez 2022-01-26 17:37:07 +00:00
parent 9acaaf636e
commit 0fe6c0b8ca
8 changed files with 36 additions and 12 deletions

View File

@ -35,13 +35,17 @@ class LinuxbridgeMechanismDriver(mech_agent.SimpleAgentMechanismDriverBase):
sg_enabled = securitygroups_rpc.is_firewall_enabled()
vif_details = {portbindings.CAP_PORT_FILTER: sg_enabled,
portbindings.VIF_DETAILS_CONNECTIVITY:
portbindings.CONNECTIVITY_L2}
self.connectivity}
super(LinuxbridgeMechanismDriver, self).__init__(
constants.AGENT_TYPE_LINUXBRIDGE,
portbindings.VIF_TYPE_BRIDGE,
vif_details)
lb_qos_driver.register()
@property
def connectivity(self):
return portbindings.CONNECTIVITY_L2
def get_allowed_network_types(self, agent):
return (agent['configurations'].get('tunnel_types', []) +
[constants.TYPE_LOCAL, constants.TYPE_FLAT,

View File

@ -40,12 +40,16 @@ class MacvtapMechanismDriver(mech_agent.SimpleAgentMechanismDriverBase):
def __init__(self):
vif_details = {portbindings.CAP_PORT_FILTER: False,
portbindings.VIF_DETAILS_CONNECTIVITY:
portbindings.CONNECTIVITY_L2}
self.connectivity}
super(MacvtapMechanismDriver, self).__init__(
constants.AGENT_TYPE_MACVTAP,
portbindings.VIF_TYPE_MACVTAP,
vif_details)
@property
def connectivity(self):
return portbindings.CONNECTIVITY_L2
def get_allowed_network_types(self, agent):
return [constants.TYPE_FLAT, constants.TYPE_VLAN]

View File

@ -296,7 +296,7 @@ class SimpleAgentMechanismDriverBase(AgentMechanismDriverBase,
self.supported_vnic_types, vnic_type_prohibit_list)
self.vif_type = vif_type
self.vif_details = {portbindings.VIF_DETAILS_CONNECTIVITY:
portbindings.CONNECTIVITY_LEGACY}
self.connectivity}
self.vif_details.update(vif_details)
def try_to_bind_segment_for_agent(self, context, segment, agent):

View File

@ -69,7 +69,7 @@ class SriovNicSwitchMechanismDriver(mech_agent.SimpleAgentMechanismDriverBase):
agent_type = constants.AGENT_TYPE_NIC_SWITCH
vif_details = {portbindings.CAP_PORT_FILTER: False,
portbindings.VIF_DETAILS_CONNECTIVITY:
portbindings.CONNECTIVITY_L2}
self.connectivity}
supported_vnic_types = SRIOV_SUPPORTED_VNIC_TYPES
prohibit_list = cfg.CONF.SRIOV_DRIVER.vnic_type_prohibit_list
super().__init__(agent_type, None, vif_details,
@ -85,6 +85,10 @@ class SriovNicSwitchMechanismDriver(mech_agent.SimpleAgentMechanismDriverBase):
self.vif_details = vif_details
sriov_qos_driver.register()
@property
def connectivity(self):
return portbindings.CONNECTIVITY_L2
def get_allowed_network_types(self, agent):
return (constants.TYPE_FLAT, constants.TYPE_VLAN)

View File

@ -58,7 +58,7 @@ class OpenvswitchMechanismDriver(mech_agent.SimpleAgentMechanismDriverBase):
sg_enabled = securitygroups_rpc.is_firewall_enabled()
vif_details = {portbindings.CAP_PORT_FILTER: sg_enabled,
portbindings.VIF_DETAILS_CONNECTIVITY:
portbindings.CONNECTIVITY_L2}
self.connectivity}
# NOTE(moshele): Bind DIRECT (SR-IOV) port allows
# to offload the OVS flows using tc to the SR-IOV NIC.
# We are using OVS mechanism driver because the openvswitch (>=2.8.0)
@ -80,6 +80,10 @@ class OpenvswitchMechanismDriver(mech_agent.SimpleAgentMechanismDriverBase):
ovs_qos_driver.register()
log_driver.register()
@property
def connectivity(self):
return portbindings.CONNECTIVITY_L2
def get_allowed_network_types(self, agent):
return (agent['configurations'].get('tunnel_types', []) +
[constants.TYPE_LOCAL, constants.TYPE_FLAT,

View File

@ -194,19 +194,21 @@ class OVNMechanismDriver(api.MechanismDriver):
self.vif_details = {
portbindings.VIF_TYPE_OVS: {
portbindings.CAP_PORT_FILTER: self.sg_enabled,
portbindings.VIF_DETAILS_CONNECTIVITY:
portbindings.CONNECTIVITY_L2,
portbindings.VIF_DETAILS_CONNECTIVITY: self.connectivity,
},
portbindings.VIF_TYPE_VHOST_USER: {
portbindings.CAP_PORT_FILTER: False,
portbindings.VHOST_USER_MODE:
portbindings.VHOST_USER_MODE_SERVER,
portbindings.VHOST_USER_OVS_PLUG: True,
portbindings.VIF_DETAILS_CONNECTIVITY:
portbindings.CONNECTIVITY_L2,
portbindings.VIF_DETAILS_CONNECTIVITY: self.connectivity,
},
}
@property
def connectivity(self):
return portbindings.CONNECTIVITY_L2
def supported_extensions(self, extensions):
return set(ovn_extensions.ML2_SUPPORTED_API_EXTENSIONS) & extensions

View File

@ -1055,9 +1055,7 @@ class MechanismManager(stevedore.named.NamedExtensionManager):
return drivers
return [d for d in drivers if
getattr(d.obj, 'vif_details', {}).get(
portbindings.VIF_DETAILS_CONNECTIVITY) ==
portbindings.CONNECTIVITY_L2]
d.obj.connectivity == portbindings.CONNECTIVITY_L2]
def get_workers(self):
workers = []

View File

@ -64,6 +64,10 @@ class FakeAgentMechanismDriver(mech_agent.SimpleAgentMechanismDriverBase):
def get_mappings(self, agent):
return dict(agent['configurations'].get('interface_mappings', {}))
@property
def connectivity(self):
return portbindings.CONNECTIVITY_L2
class AnotherFakeAgentMechanismDriver(FakeAgentMechanismDriver):
pass
@ -76,3 +80,7 @@ class FakeAgentMechanismDriverL3(FakeAgentMechanismDriver):
super(FakeAgentMechanismDriverL3, self).__init__()
self.vif_details[portbindings.VIF_DETAILS_CONNECTIVITY] = (
portbindings.CONNECTIVITY_L3)
@property
def connectivity(self):
return portbindings.CONNECTIVITY_L3