Manila/design/manila-newton-hpb-support

Hierarchical port binding support for Manila
LP-BP: https://blueprints.launchpad.net/manila/+spec/manila-hpb-support

Problem Description
Manila with DHSS (driver handles share service) == True does basically two jobs:


 * Creates/manages shares within a share service
 * Creates networking from tenant VM to the share service / storage cluster



Some manila drivers are capable to support plain VLAN networking but this technology limits the number of actual networks in the cloud to 4096. With HPB (Hierarchical port binding) this barrier can be reduced by using VXLAN on top of VLAN within the networking fabric. In general this is transparent for the underlying storage since it's just a VLAN that will be visible.

With the current implementation of manila a neutron port is just created to receive a IP and a segmentation ID. The underlaying networking fabric simply ignores the port since no port binding is done at all:



How nova does port binding



 * 1) Nova indentifies the hosts it wants to place the VM
 * 2) Nova-compute creates a port with binding to compute host
 * 3) Neutron services searches the correct agent and sends a RPC call to bind the port
 * 4) Neutron-agent creates the port
 * 5) Neutron services send a RPC call to nova with the new port state "ACTIVE"

Proposed change

 * Enhance manila networking part to add binding_host, device_id and device_owner
 * Wait until port is "up" and start share service
 * Add a manila-network-bind-agent

Multi-segment networks



 * The user create a share
 * During share server setup a network will be created
 * Port create will add binding_profile information with that neutron can bind the port (see https://specs.openstack.org/openstack/ironic-specs/specs/not-implemented/ironic-ml2-integration.html)
 * In case of multi segment networking a manila mech driver will fullfill the binding an set's the correct segmentation_id to the port vif_details