With existing ML2Plugin, only extensions defined in the plugin are supported and if a mechanism driver defines a new extension it won't be loaded. This blueprint is addressing this issue.
The following changes can be considered as a solution to support extensions in mechanism driver: 1. If mechanism driver needs to support any extension, it should add: a) _supported_extension_aliases attribute to its class. b) extension path to the api_extensions_path. 2. Add new method in Ml2Plugin: This new method should go through the order_mech_drivers and if there is any aliases supported, add it to existing list of aliases in the Ml2Plugin (i.e. _supported_extension_aliases)
3. In resource's post/pre_commit method (for network, port, subnet) there is no way for mechanism driver to know the original data passed to the plaugin. For instance for network resource, when a network is created with an extension attribute in the network parameters, according to the code below, the 'result' and 'mech_context' do not include the extension's attribute. So mechanism driver cannot use the required info passed to the create_network. 365 def create_network(self, context, network): 366 net_data = network['network']