Authors:

Feature pages are design documents that developers have created while collaborating on oVirt.

Most of them are outdated, but provide historical design context.

They are not user documentation and should not be treated as such.

Documentation is available here.

Get Route

Summary

New verb getRoute should return name of a device assigned to given IP address.

Owner

Detailed Description

During deployment of a new host, Engine needs to know which of the host’s interfaces is used to connect to Engine. Currently, this is exposed by the lastClientIface element of getVdsCaps verb. However, this approach is problematic, as we plant to remove the requirement of direct Engine-Vdsm TCP connection, without which, Vdsm cannot compute this element.

Instead, it is suggested that Vdsm would expose the output of ip route get <addr>, so that Engine would be able to guess which on top of which host should it configure the management network. Note that this would only be a guess, as Vdsm may sit behind NAT with no route to Engine. In that case, automatic deployment of the management network would be skipped.

Engine

Overview: Currently, the engine stores a host’s “Active NIC”, and uses it to decide on which interface it should set up the management network as part of the “Install Host” flow. This “Active NIC” is reported by VDSM as part of getVdsCaps (in the lastClientIface entry). With the introduction of the getRoute verb, the engine could use it for VDSM versions compatible with cluster >= 3.6 instead of the mentioned entry in getVdsCaps.

Details: This can be done by wrapping getRoute in its own VdsCommand class (e.g. GetRouteVdsCommand), and run that as part of CollectVdsNetworkDataAfterInstallationVDSCommand.executeVdsBrokerCommand() if the host’s reported versions are compatible - then call VDS.setActiveNic() with the result. Similarly, the code setting the active NIC in VdsBrokerObjectBuilder.updateNetworkData() may be made dependent on older VDSM versions (this is likely optional - it might just be stored as null and overwritten later according to the result of getRoute), and removed when that API is officially deprecated.

VDSM

To implement this new verb we could use netinfo.getRouteDeviceTo(ip_address) function, which uses ipwrapper to do route handling.

Documentation / External references