Currently the neutron lbaas plugin will create a neutron port for a VIP and then pass that information to the driver to continue creation of a load balancer. There are some situations in which a driver will require control of how the VIP is created. Work on Octavia has brought the realization that this feature is needed to allow deployments from different providers.
Since the neutron lbaas plugin creates a neutron port as the VIP for drivers to use, drivers that need to do more complex VIP allocation or drivers that require the VIP allocation to be delayed further in the workflow will have to do some untenable workarounds to make work.
Some examples from a deployers point of view are:
A non-abstract method will be added in the driver interface. This way existing drivers will not need to be changed unless they want to take advantage of this new ability. Before the plugin creates the neutron port for the VIP, it will query the driver and determine whether that new method has been implemented. If it has been implemented, the driver will call that method and will not create the neutron port for the VIP. If it has not been implemented then the normal port creation and driver call will take place. Implementing it this way will not leak implementation details to the user or the deployer as it becomes just a decision for the driver implementer.
One minor issue this may cause is if the driver implements the new method asynchronously. The method will return without any information of the VIP as it probably has not been allocated. This will probably require a thread to run in the background checking for the allocation and then updating the neutron lbaas database. The end user will not see an IP for the VIP immediately upon return of the create load balancer call. The population of that field will end up being delayed, much like how a nova instance does not immediately have an IP assigned.
I do think this is an acceptable change to the API behavior because when the IP is immediately returned, its still not a usable IP until the load balancer has completed provisioning.