Ironic virt driver: static portgroups support

https://blueprints.launchpad.net/nova/+spec/ironic-portgroups-support

To allow the utilization of NIC aggregation when instance is spawned on hardware server. Bonded NICs should be picked with higher preference than single NICs. It will allow user to increase performance or provide higher reliability of network connection.

Problem description

To guarantee high reliability/increase performance of network connection to an instance when it is spawned on a hardware server, link aggregation should be used.

Use Cases

The operators want to use different bonding strategies to increase reliability or performance of network connection to instance.

Proposed change

Nova will call into ironic to get the list of ports of each portgroup that has a VIF associated with it along with portgroup parameters, and update network metadata with the needed information.

  • Bump the ironic API version to get ironic support for portgroups.

  • Generate network metadata in ironic virt driver and add all the additional info there (such as bond mode, transmit hash policy, MII link monitoring interval, and of which links the bond consists). Pass it into InstanceMetadata that will be used afterwards to generate the config drive.

Alternatives

  • Always use single NICs, do not care about bonding.

Data model impact

None

REST API impact

None

Security impact

None

Notifications impact

None

Other end user impact

None

Performance Impact

Instance network performance or reliability is increased, depending on bonding model that is used.

Other deployer impact

None

Developer impact

None

Implementation

Assignee(s)

Primary assignee:

<vsaienko>

Other contributors:

<vdrok>

Work Items

  • Bump the ironic client API version to give us something that can use portgroups.

  • Generate network metadata in ironic virt driver and add all the additional info there (such as bond mode, transmit hash policy, MII link monitoring interval, and of which links the bond consists). Pass it into InstanceMetadata that will be used afterwards to generate the config drive.

Testing

Add bonding module to cirros. The ironic team has manually tested a cirros image re-built with bonding modules enabled, and it works as expected. Update ironic CI to use portgroups to test them.

Documentation Impact

None

References

None