ML2 Provider-network partial specs
This blueprint will allow creation of provider networks with provider attributes partially provided. This capability will be implemented only for the ML2 plugin.
Currently, all provider attributes for tenant networks are chosen by neutron, while for provider networks all the provider attributes must be specified by admins. For provider networks, admins cannot specify some provider attributes and delegate the choice of remaining ones to neutron-server. This means that admins must know the valid and unallocated physical_networks and segmentation_ids when creating provider networks.
This blueprint will let admins specify some provider attributes, and let neutron choose the remaining attributes from pools of allowable values.
- Create a (vlan) network for baremetal deployment without focusing on physical_network/segmentation_id choices,
- Create "service" networks (typically networks for storage) which are provided over vlan on a specific physical_network without focusing on segmentation_id choice,
- Create gre/vxlan networks for testing.
Vlan/gre/vxlan ML2 type drivers will be extended in order to support partially providing provider/multi-provider network attributes on network create, and let type drivers choose a network from tenant network pools.
More precisely type drivers will choose a network from tenant network pools matching provided attributes and allocate it. If no candidate is found the type driver will raise a NoNetworkAvailable exception. The network delete process will not change: the network will be returned to its tenant network pool.
An alternative solution would be to provide alternative type driver implementations for previous network types allowing to partially specify provider attributes. This solution does not require new configuration options but ML2 type manager must check that at most one type driver is provided per network type.
Data model impact
REST API impact
This blueprint reduces constraints on provider network attributes on network create:
If provider:network_type=vlan is specified, then provider:physical_network and provider:segmentation_id are optional:
neutron net-create net-vlan --provider:network_type=vlan neutron net-create net-storage --provider:network_type=vlan\ --provider:physical_network=storage
If provider:network_type=gre is specified, then provider:segmentation_id is optional:
neutron net-create net-gre --provider:network_type=gre
If provider:network_type=vxlan is specified, then provider:segmentation_id is optional:
neutron net-create net-vxlan --provider:network_type=vxlan
The same constraint reduction applies on multi-provider attributes on network create:
neutron net-create net-multi --segments type=dict list=true\ provider:network_type=vlan,provider:physical_network=multi\ provider:network_type=gre\
Provider/multi-provider network default policy will not change.
Other end user impact
Other deployer impact
Primary assignee: Cedric Brandily <cbrandily>
- Update ML2 plugin/type manager in order to allow reserve_provider_network to return allocated network
- Extend vlan type driver to support partial specs
- Extend gre/vxlan type driver to support partial specs
- Update ML2 multi-provider to support partial specs
The code will be covered by unit tests.
Tempest tests will be provided. Tempest must be aware of network types supported by tested deployment in order to tests partial specs on all supported network types. The new tempest option partial_specs_scenario will be define to configure supported network types:
Disable partial specs tests (default value):
Enable vlan provider networks partial specs tests:
partial_specs_scenario = vlan
Enable vlan and gre provider networks partial specs tests:
partial_specs_scenario = vlan,gre
Document deployer impacts.