Bug 2081478

Summary: [RFE] Multi vendor ML2 plugin for BMaaS usecase
Product: Red Hat OpenStack Reporter: Harald Jensås <hjensas>
Component: python-networking-baremetalAssignee: OSP Team <rhos-maint>
Status: NEW --- QA Contact: mlammon
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: 18.0 (Zed)CC: bfournie, dtantsur, hjensas, jkreger, rpittau
Target Milestone: ---Keywords: FutureFeature
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: Enhancement
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Harald Jensås 2022-05-03 20:49:47 UTC
Description of problem:

For multi-tenant BMaaS there is a need to configure the ToR network devices (Access/Edge Switches).
Many vendors have abandoned their ML2 mechanism plug-ins which operator rely on to support this. Users are left with few options.

Alternatives:
 - Networking Generic switch is available, it supports a lot of switching hardware but has limited features.
 - networking-ansible - this effort is no longer developed, the last patch was > 6-months ago.

How can we solve this?

This RFE proposes adding device configuration capabilities to networking-baremetal. Utilizing standards Netconf (rfc6242)[1] and YANG (rfc8040)[2] models.

Netconf is a protocol defined by the IETF to “install, manipulate, and delete the configuration of network devices”, the standard is implemented by many vendors.
YANG is a data modeling language used to model configuration, state data, and administrative actions manipulated by the NETCONF protocol.
There are both vendor and open YANG models[3].

I am proposing to start with an opensource model OpenConfig[4][5] which has been implemented by multiple vendors.
The YANG language maps easily to python, and only a small subset of what is defined in OpenConfig models is required to provide a good feature-set for the BMaaS use case.
The patches below implements: create/delete/update VLAN tenant network, create/update/delete port, create/update/delete LACP link-aggregate and neutron Trunk port bind/unbind.

The POC has been tested on Cisco Nexus and Arista vEOS virtual appliance switch emulators.

    https://review.opendev.org/835157 (OpenConfig classes for iface vlan plugging)
    https://review.opendev.org/835158 (OpenConfig classes for switch vlans)
    https://review.opendev.org/835159 (OpenConfig classes for network-instance)
    https://review.opendev.org/835160 (OpenConfig classes for interface aggregate)
    https://review.opendev.org/835161 (OpenConfig classes for LACP)
    https://review.opendev.org/835170 (Device management driver iface)
    https://review.opendev.org/835324 (netconf-openconfig device driver)
    https://review.opendev.org/835378 (LACP support to Netconf OpenConfig driver)
    https://review.opendev.org/c/openstack/networking-baremetal/+/836286 (Trunk support)

Note:
  The PoC implements OpenConfig and Netconf, but the driver interface opens up to add other YANG models, and other configuration protocols such as Restconf and gNMI.

[1] https://datatracker.ietf.org/doc/html/rfc6242 (Netconf)
[2] https://datatracker.ietf.org/doc/html/rfc8040 (RESTConf)
[3] https://github.com/YangModels/yang
[4] https://www.openconfig.net/projects/models/
[5] https://github.com/openconfig/public

Comment 1 Harald Jensås 2022-05-03 20:59:42 UTC
POC - Demo recording - https://asciinema.org/a/VbcTN2VZGC1lwiWX4daGfNdXT