Dynamic port groups¶
https://bugs.launchpad.net/ironic/+bug/1652630
In the Ocata release, Ironic added support for grouping ports into port groups.
The administrator also has the ability to specify mode and properties
of a port group by using appropriate port group fields. However
the administrator is still required to pre-create a port group on the
ToR (Top of Rack) switch manually. Or find some other way to sync
portgroup settings between Ironic and the ML2 driver.
Problem description¶
While Ironic provides the ability to create port groups with different
configurations (mode and properties), port groups still have to be pre-created
on ToR manually as we do not pass port group details to ML2 drivers.
To make port groups creation dynamic Ironic should pass port group settings
to Neutron ML2 drivers. The ML2 driver is responsible for port group
configuration (creation/deletion) on ToR switch during deployment.
This spec does not cover end-user interface for specifying port group
configuration when doing nova boot at this moment. It can be extended
when community has some agreement on it.
Proposed change¶
Start passing port group information to Neutron ML2 drivers via the Neutron
port binding:profile field. Appropriate Neutron ML2 drivers will use that
information to create port group dynamically on the ToR switch.
Note
We cannot use existing
binding:profilelocal_link_informationkey as it is a list with port details, whereswitch_idandport_idare mandatory keys. For portgroup object those keys are not required as portgroup is virtual interface and might be spread across different switches. For example MLAG configuration.
Binding profile data structure¶
Introduce new
local_group_informationdictionary that stores portgroups information.Reuse existing
local_link_informationfor port objects only
A JSON example of binding:profile with local_link_information reuse:
"binding:profile": { 'local_link_information': [ { 'switch_info': 'tor-switch0', 'port_id': 'Gig0/1' 'switch_id': 'aa:bb:cc:dd:ee:ff' }, { 'switch_info': 'tor-switch0', 'port_id': 'Gig0/2', 'switch_id': 'aa:bb:cc:dd:ee:ff' } ], 'local_group_information': { 'id': '51a9642b-1414-4bd6-9a92-1320ddc55a63', 'name': 'PortGroup0', 'bond_mode': 'active-backup', 'bond_properties': { 'bond_xmit_hash_policy': 'layer3+4', 'bond_miimon': 100, } }, }
The data types:
Field Name |
Description |
|---|---|
id |
The UUID of Ironic portgroup object |
name |
The name of the ironic port group |
bond_mode |
Ironic portgroup mode |
bond_properties |
Ironic portgroup properties |
switch_info |
The hostname of the switch |
port_id |
The identifier of the port on the switch |
switch_id |
The identifier of the switch, ie mac address |
Note
It is recommended to pick bond_mode and keys/values for
bond_properties from the [1] as they will be used by
user OS.
Alternatives¶
Use port groups in the static fashion when administrator pre-creates port group on ToR switch.
If ML2 driver supports port group creation, make sure that port group properties in Ironic and ML2 are the same.
Data model impact¶
None.
State Machine Impact¶
None.
REST API impact¶
None.
Client (CLI) impact¶
None.
RPC API impact¶
None.
Driver API impact¶
None.
Nova driver impact¶
None.
Ramdisk impact¶
None.
Security impact¶
None.
Other end user impact¶
None.
Scalability impact¶
None.
Performance Impact¶
None.
Other deployer impact¶
No need to pre-create port group at the ToR switch. Only need to specify port group configuration at the Ironic portgroup object.
Developer impact¶
Out of tree network interfaces should be updated to pass portgroup.mode
and portgroup.properties with links array in Neutron port
binding:profile field.
Vendors are responsible to deal with links to support dynamic port groups.
Implementation¶
Assignee(s)¶
- Primary assignee:
vsaienko <vsaienko@mirantis.com>
Work Items¶
Update
neutronnetwork interface to pass data structure described in Binding profile data structure to Neutron.Add dynamic port group support to networking-generic-switch
Update tempest with appropriate tests.
Dependencies¶
Dynamic portgroup support is dependent on Neutron ML2 driver functionality
being developed to deal with links array in binding:profile field.
Testing¶
Add dynamic port group support to networking-generic-switch
Update tempest with appropriate tests.
Upgrades and Backwards Compatibility¶
Backward compatibility is retained as Ironic will still pass
local_link_information in Neutron port binding:profile field.
Documentation Impact¶
This feature will be fully documented.