<div dir="ltr">Hi Mohammad,<div><br></div><div style>Thanks for suggestion. I'll add a proposal for the design session and also bring this topic to the next ML2 weekly meeting.</div><div style><br></div><div style>Thanks,</div>
<div style>Nader.</div><div style><br></div><div style><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Apr 3, 2014 at 7:49 PM, Mohammad Banikazemi <span dir="ltr"><<a href="mailto:mb@us.ibm.com" target="_blank">mb@us.ibm.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>
<p><font face="sans-serif">Nader,</font><br>
<br>
<font face="sans-serif">During the last ML2 IRC weekly meeting [1] having per-MD extensions was mentioned. This is an important topic in my opinion. You may want to add a proposal for a design session on this topic at [2] and/or add this topic to the agenda for the next ML2 weekly meeting [3] for further discussion.</font><br>

<br>
<font face="sans-serif">Mohammad</font><br>
<br>
<font face="sans-serif">[1] <a href="http://eavesdrop.openstack.org/meetings/networking_ml2/2014/networking_ml2.2014-04-02-16.00.log.html" target="_blank">http://eavesdrop.openstack.org/meetings/networking_ml2/2014/networking_ml2.2014-04-02-16.00.log.html</a> </font><br>

<font face="sans-serif">[2] <a href="http://summit.openstack.org" target="_blank">http://summit.openstack.org</a></font><br>
<font face="sans-serif">[3] <a href="https://wiki.openstack.org/wiki/Meetings/ML2" target="_blank">https://wiki.openstack.org/wiki/Meetings/ML2</a></font><br>
<br>
<img width="16" height="16" src="cid:1__=0ABBF623DF9E40A68f9e8a93df938@us.ibm.com" border="0" alt="Inactive hide details for Nader Lahouti ---04/03/2014 01:16:34 PM---Thanks a lot Andre for the reply. My comments inline:"><font color="#424282" face="sans-serif">Nader Lahouti ---04/03/2014 01:16:34 PM---Thanks a lot Andre for the reply. My comments inline:</font><br>

<br>
<font size="1" color="#5F5F5F" face="sans-serif">From:      </font><font size="1" face="sans-serif">Nader Lahouti <<a href="mailto:nader.lahouti@gmail.com" target="_blank">nader.lahouti@gmail.com</a>></font><br>
<font size="1" color="#5F5F5F" face="sans-serif">To:        </font><font size="1" face="sans-serif">"OpenStack Development Mailing List (not for usage questions)" <<a href="mailto:openstack-dev@lists.openstack.org" target="_blank">openstack-dev@lists.openstack.org</a>>, Andre Pech <<a href="mailto:apech@aristanetworks.com" target="_blank">apech@aristanetworks.com</a>>, </font><br>

<font size="1" color="#5F5F5F" face="sans-serif">Date:      </font><font size="1" face="sans-serif">04/03/2014 01:16 PM</font><br>
<font size="1" color="#5F5F5F" face="sans-serif">Subject:   </font><font size="1" face="sans-serif">Re: [openstack-dev] [Neutron][ML2][Ml2Plugin] Setting _original_network in NetworkContext:</font><br>
</p><hr width="100%" size="2" align="left" noshade style="color:#8091a5"><div><div class="h5"><br>
<br>
<br>
<font size="3" face="serif">Thanks a lot Andre for the reply.</font><br>
<font size="3" face="serif">My comments inline:<br>
</font><br>
<font size="3" face="serif">On Wed, Apr 2, 2014 at 12:37 PM, Andre Pech <</font><a href="mailto:apech@aristanetworks.com" target="_blank"><font size="3" color="#0000FF" face="serif"><u>apech@aristanetworks.com</u></font></a><font size="3" face="serif">> wrote:</font>
<ul style="padding-left:9pt"><br>
<font size="3" face="serif"><br>
</font><br>
<font size="3" face="serif">On Fri, Mar 28, 2014 at 6:44 PM, Nader Lahouti <</font><a href="mailto:nader.lahouti@gmail.com" target="_blank"><font size="3" color="#0000FF" face="serif"><u>nader.lahouti@gmail.com</u></font></a><font size="3" face="serif">> wrote:</font>
<ul style="padding-left:9pt"><font size="3" face="serif">Hi Mathieu,</font><br>
<br>
<font size="3" face="serif">Thanks a lot for your reply.</font><br>
<br>
<font size="3" face="serif">Even in the neutron/neutron/db/db_base_plugin_v2.py: create_network() passes network object:</font><br>
<a href="http://www.xrefs.info/neutron-icehouse-3/xref/neutron/db/db_base_plugin_v2.py#911" target="_blank"><tt><font size="3" color="#0000FF"><u>911</u></font></tt></a><tt><font size="3">    </font></tt><tt><font size="3"><b>def</b></font></tt><tt><font size="3"> </font></tt><a name="1452aa862fc29295_14523f7753c94d9c_1450b84c7704feec_create_network"></a><a href="http://www.xrefs.info/neutron-icehouse-3/s?refs=create_network" target="_blank"><tt><font size="3" color="#0000FF"><u>create_network</u></font></tt></a><tt><font size="3">(</font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/s?defs=self" target="_blank"><tt><font size="3" color="#0000FF"><u>self</u></font></tt></a><tt><font size="3">, </font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/s?defs=context" target="_blank"><tt><font size="3" color="#0000FF"><u>context</u></font></tt></a><tt><font size="3">, </font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/s?defs=network" target="_blank"><tt><font size="3" color="#0000FF"><u>network</u></font></tt></a><tt><font size="3">):<br>

</font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/xref/neutron/db/db_base_plugin_v2.py#912" target="_blank"><tt><font size="3" color="#0000FF"><u>912</u></font></tt></a><tt><font size="3">        """Handle creation of a single network."""<br>

</font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/xref/neutron/db/db_base_plugin_v2.py#913" target="_blank"><tt><font size="3" color="#0000FF"><u>913</u></font></tt></a><tt><font size="3">        # single request processing<br>

</font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/xref/neutron/db/db_base_plugin_v2.py#914" target="_blank"><tt><font size="3" color="#0000FF"><u>914</u></font></tt></a><tt><font size="3">        n = </font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/s?defs=network" target="_blank"><tt><font size="3" color="#0000FF"><u>network</u></font></tt></a><tt><font size="3">['network']       </font></tt><tt><font size="3"><b><<<<<<<<==== 'n' has all the network info (including extensions)</b></font></tt><tt><font size="3"><br>

</font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/xref/neutron/db/db_base_plugin_v2.py#915" target="_blank"><tt><font size="3" color="#0000FF"><u>915</u></font></tt></a><tt><font size="3">        # NOTE(jkoelker) Get the tenant_id outside of the session to avoid<br>

</font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/xref/neutron/db/db_base_plugin_v2.py#916" target="_blank"><tt><font size="3" color="#0000FF"><u>916</u></font></tt></a><tt><font size="3">        #                unneeded db action if the operation raises<br>

</font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/xref/neutron/db/db_base_plugin_v2.py#917" target="_blank"><tt><font size="3" color="#0000FF"><u>917</u></font></tt></a><tt><font size="3">        </font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/s?defs=tenant_id" target="_blank"><tt><font size="3" color="#0000FF"><u>tenant_id</u></font></tt></a><tt><font size="3"> = </font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/s?defs=self" target="_blank"><tt><font size="3" color="#0000FF"><u>self</u></font></tt></a><tt><font size="3">.</font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/xref/neutron/db/db_base_plugin_v2.py#_get_tenant_id_for_create" target="_blank"><tt><font size="3" color="#0000FF"><u>_get_tenant_id_for_create</u></font></tt></a><tt><font size="3">(</font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/s?defs=context" target="_blank"><tt><font size="3" color="#0000FF"><u>context</u></font></tt></a><tt><font size="3">, n)<br>

</font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/xref/neutron/db/db_base_plugin_v2.py#918" target="_blank"><tt><font size="3" color="#0000FF"><u>918</u></font></tt></a><tt><font size="3">        </font></tt><tt><font size="3"><b>with</b></font></tt><tt><font size="3"> </font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/s?defs=context" target="_blank"><tt><font size="3" color="#0000FF"><u>context</u></font></tt></a><tt><font size="3">.</font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/s?defs=session" target="_blank"><tt><font size="3" color="#0000FF"><u>session</u></font></tt></a><tt><font size="3">.</font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/s?defs=begin" target="_blank"><tt><font size="3" color="#0000FF"><u>begin</u></font></tt></a><tt><font size="3">(</font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/s?defs=subtransactions" target="_blank"><tt><font size="3" color="#0000FF"><u>subtransactions</u></font></tt></a><tt><font size="3">=</font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/s?defs=True" target="_blank"><tt><font size="3" color="#0000FF"><u>True</u></font></tt></a><tt><font size="3">):<br>

</font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/xref/neutron/db/db_base_plugin_v2.py#919" target="_blank"><tt><font size="3" color="#0000FF"><u>919</u></font></tt></a><tt><font size="3">            </font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/s?defs=args" target="_blank"><tt><font size="3" color="#0000FF"><u>args</u></font></tt></a><tt><font size="3"> = {'tenant_id': </font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/s?defs=tenant_id" target="_blank"><tt><font size="3" color="#0000FF"><u>tenant_id</u></font></tt></a><tt><font size="3">,<br>

</font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/xref/neutron/db/db_base_plugin_v2.py#920" target="_blank"><tt><font size="3" color="#0000FF"><u>920</u></font></tt></a><tt><font size="3">                    'id': n.</font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/s?defs=get" target="_blank"><tt><font size="3" color="#0000FF"><u>get</u></font></tt></a><tt><font size="3">('id') </font></tt><tt><font size="3"><b>or</b></font></tt><tt><font size="3"> </font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/xref/neutron/db/db_base_plugin_v2.py#uuidutils" target="_blank"><tt><font size="3" color="#0000FF"><u>uuidutils</u></font></tt></a><tt><font size="3">.</font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/s?defs=generate_uuid" target="_blank"><tt><font size="3" color="#0000FF"><u>generate_uuid</u></font></tt></a><tt><font size="3">(),<br>

</font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/xref/neutron/db/db_base_plugin_v2.py#921" target="_blank"><tt><font size="3" color="#0000FF"><u>921</u></font></tt></a><tt><font size="3">                    'name': n['name'],<br>

</font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/xref/neutron/db/db_base_plugin_v2.py#922" target="_blank"><tt><font size="3" color="#0000FF"><u>922</u></font></tt></a><tt><font size="3">                    'admin_state_up': n['admin_state_up'],<br>

</font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/xref/neutron/db/db_base_plugin_v2.py#923" target="_blank"><tt><font size="3" color="#0000FF"><u>923</u></font></tt></a><tt><font size="3">                    'shared': n['shared'],<br>

</font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/xref/neutron/db/db_base_plugin_v2.py#924" target="_blank"><tt><font size="3" color="#0000FF"><u>924</u></font></tt></a><tt><font size="3">                    'status': n.</font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/s?defs=get" target="_blank"><tt><font size="3" color="#0000FF"><u>get</u></font></tt></a><tt><font size="3">('status', </font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/xref/neutron/db/db_base_plugin_v2.py#constants" target="_blank"><tt><font size="3" color="#0000FF"><u>constants</u></font></tt></a><tt><font size="3">.</font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/s?defs=NET_STATUS_ACTIVE" target="_blank"><tt><font size="3" color="#0000FF"><u>NET_STATUS_ACTIVE</u></font></tt></a><tt><font size="3">)}<br>

</font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/xref/neutron/db/db_base_plugin_v2.py#925" target="_blank"><tt><font size="3" color="#0000FF"><u>925</u></font></tt></a><tt><font size="3">            </font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/s?defs=network" target="_blank"><tt><font size="3" color="#0000FF"><u>network</u></font></tt></a><tt><font size="3"> = </font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/xref/neutron/db/db_base_plugin_v2.py#models_v2" target="_blank"><tt><font size="3" color="#0000FF"><u>models_v2</u></font></tt></a><tt><font size="3">.</font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/s?defs=Network" target="_blank"><tt><font size="3" color="#0000FF"><u>Network</u></font></tt></a><tt><font size="3">(**</font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/s?defs=args" target="_blank"><tt><font size="3" color="#0000FF"><u>args</u></font></tt></a><tt><font size="3">)  <<</font></tt><font size="3" face="Arial"><b>= 'network' does not include extensions.</b></font><tt><font size="3"><br>

</font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/xref/neutron/db/db_base_plugin_v2.py#926" target="_blank"><tt><font size="3" color="#0000FF"><u>926</u></font></tt></a><tt><font size="3">            </font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/s?defs=context" target="_blank"><tt><font size="3" color="#0000FF"><u>context</u></font></tt></a><tt><font size="3">.</font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/s?defs=session" target="_blank"><tt><font size="3" color="#0000FF"><u>session</u></font></tt></a><tt><font size="3">.</font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/s?defs=add" target="_blank"><tt><font size="3" color="#0000FF"><u>add</u></font></tt></a><tt><font size="3">(</font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/s?defs=network" target="_blank"><tt><font size="3" color="#0000FF"><u>network</u></font></tt></a><tt><font size="3">)<br>

</font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/xref/neutron/db/db_base_plugin_v2.py#927" target="_blank"><tt><font size="3" color="#0000FF"><u>927</u></font></tt></a><tt><font size="3">        </font></tt><tt><font size="3"><b>return</b></font></tt><tt><font size="3"> </font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/s?defs=self" target="_blank"><tt><font size="3" color="#0000FF"><u>self</u></font></tt></a><tt><font size="3">.</font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/xref/neutron/db/db_base_plugin_v2.py#_make_network_dict" target="_blank"><tt><font size="3" color="#0000FF"><u>_make_network_dict</u></font></tt></a><tt><font size="3">(</font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/s?defs=network" target="_blank"><tt><font size="3" color="#0000FF"><u>network</u></font></tt></a><tt><font size="3">, </font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/s?defs=process_extensions" target="_blank"><tt><font size="3" color="#0000FF"><u>process_extensions</u></font></tt></a><tt><font size="3">=</font></tt><a href="http://www.xrefs.info/neutron-icehouse-3/s?defs=False" target="_blank"><tt><font size="3" color="#0000FF"><u>False</u></font></tt></a><tt><font size="3">)</font></tt><br>

<font size="3" face="serif">even if process_extensions set to True, we still have issue.</font><br>
<br>
<font size="3" face="serif">If using original_network, causes confusion can we add a new parameter and use it in mechanism driver?</font><br>
<font size="3" face="serif">Also haven't received any reply from </font><font face="Arial">salvotore.</font></ul>
<br>
<font size="3" face="serif">Yes, not re-using original_network would be my preference.</font><br>
<font size="3" face="serif"> </font></ul>
<br>
<font size="3" face="serif">Will add new parameter to avoid re-using original_network.</font><br>
<font size="3" face="serif"> </font>
<ul style="padding-left:19pt"><br>
<font size="3" face="serif">* Another issue with the Ml2Plugin regarding the extensions is that neutron api can fail as it cannot find any handler in the plugin for request such as get/update/create/delete.</font>
<p><font size="3" face="serif">For instance I added 'config_profile' as an extensions to network resource and get this error.</font>
</p><p><font size="3" face="serif">2014-03-28 12:27:02.495 TRACE  resource.py: neutron.api.v2.resource   File </font>
</p><p><font size="3" face="serif">"/opt/stack/neutron/neutron/api/v2/base.py", line 273, in index</font>
</p><p><font size="3" face="serif">2014-03-28 12:27:02.495 TRACE  resource.py: neutron.api.v2.resource     ret</font>
</p><p><font size="3" face="serif">urn self._items(request, True, parent_id)</font>
</p><p><font size="3" face="serif">2014-03-28 12:27:02.495 TRACE  resource.py: neutron.api.v2.resource   File </font>
</p><p><font size="3" face="serif"><b>"/opt/stack/neutron/neutron/api/v2/base.py", line 226, in _items</b></font>
</p><p><font size="3" face="serif"><b>2014-03-28 12:27:02.495 TRACE  resource.py: neutron.api.v2.resource     obj_getter = getattr(self._plugin, self._plugin_handlers[self.LIST])</b></font>
</p><p><font size="3" face="serif"><b>2014-03-28 12:27:02.495 TRACE resource.py: neutron.api.v2.resource AttributeError: 'Ml2Plugin' object has no attribute 'get_config_profiles'</b></font>
</p><p><font size="3" face="serif"><b>2014-03-28 12:27:02.495 TRACE  resource.py: neutron.api.v2.resource</b></font><font size="3" face="serif"> </font>
</p><p><br>
<font size="3" face="serif">We need to add either (1) Make Ml2Plugin code aware of such an attribute (e.g. adding another base class, which may not be a good solution) or (2) make the changes in neutron/neutron/api/v2/base.py to understand if Ml2Plugin is supported then get the attributes from mechanism driver.</font><br>

<font size="3" face="serif">(3) any other idea?</font><br>
<br>
<font size="3" face="serif">I already implemented (2) in my private repo, to fix this error.</font><br>
<font size="3" face="serif">Also, I have already opened a BP to for supporting extensions in MD, and if it is okay I can include the fix as part of that BP. </font></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p>
</p><p></p><p></p></ul>

<ul style="padding-left:9pt"><br>
<font size="3" face="serif">Yes, we don't really have great support for extensions today, so fixing this in the context of making extensions work in general with ML2 and MechanismDrivers, this sounds great.</font><br>

<br>
<font size="3" face="serif">Thanks for taking this on,</font></ul>
<br>
<font size="3" face="serif">Sure. Will add it as part of </font><a href="https://blueprints.launchpad.net/neutron/+spec/neutron-ml2-mechanismdriver-extensions" target="_blank"><font size="3" color="#0000FF" face="serif"><u>https://blueprints.launchpad.net/neutron/+spec/neutron-ml2-mechanismdriver-extensions</u></font></a><br>

<font size="3" face="serif"> </font><br>
<font size="3" face="serif">Thanks,</font><br>
<font size="3" face="serif">Nader.</font><br>
<br>

<ul style="padding-left:9pt"><br>
<font size="3" face="serif">Andre</font><br>
<font size="3" face="serif"> </font>
<ul style="padding-left:9pt"><br>
<br>
<font size="3" face="serif">Thanks,</font><br>
<font size="3" face="serif">Nader.</font><br>
<br>
<br>
<br>
<font size="3" face="serif">On Fri, Mar 28, 2014 at 8:22 AM, Mathieu Rohon <</font><a href="mailto:mathieu.rohon@gmail.com" target="_blank"><font size="3" color="#0000FF" face="serif"><u>mathieu.rohon@gmail.com</u></font></a><font size="3" face="serif">> wrote:</font>
<ul style="padding-left:9pt"><font size="3" face="serif">hi nader,<br>
<br>
I don't think this parameter could be used in this case. As andre said<br>
, tha original-network is usefull for update and delete commands. It<br>
would led to misunderstandings if we use this param in other cases,<br>
and particulary in create commands.<br>
I'm still thinking that the result of  super(Ml2Plugin,<br>
self).create_network(context, network), should have network extension<br>
informations[1]. did you talk with salvotore about reverting his<br>
change and using another workaround?<br>
<br>
[1]</font><a href="https://answers.launchpad.net/neutron/+question/245773" target="_blank"><font size="3" color="#0000FF" face="serif"><u>https://answers.launchpad.net/neutron/+question/245773</u></font></a><font size="3" color="#888888" face="serif"><br>

<br>
Mathieu</font><br>
<font size="3" face="serif"><br>
On Thu, Mar 27, 2014 at 5:24 PM, Nader Lahouti <</font><a href="mailto:nader.lahouti@gmail.com" target="_blank"><font size="3" color="#0000FF" face="serif"><u>nader.lahouti@gmail.com</u></font></a><font size="3" face="serif">> wrote:<br>

> Hi Andre,<br>
><br>
> Thans for your reply.<br>
><br>
> There is no existing network. The scenario is for the first time that we<br>
> create a network with an extension. Consider, a mechanism driver adds an<br>
> attribute (through extensions) to the network resource. When user creates a<br>
> network, the attribute is set and it is present in the 'network' parameter,<br>
> when calling create_network() in Ml2Plugin.<br>
> But when create_network_pre/post_commit is called, the attribute won't be<br>
> available to the mechanism driver. Because the attribute is not included in<br>
> network object passed to MD - as I mentioned in previous email, the 'result'<br>
> does not have the new attribute.<br>
><br>
><br>
> Thanks,<br>
> Nader.<br>
><br>
><br>
><br>
><br>
><br>
><br>
><br>
><br>
> On Wed, Mar 26, 2014 at 3:52 PM, Andre Pech <</font><a href="mailto:apech@aristanetworks.com" target="_blank"><font size="3" color="#0000FF" face="serif"><u>apech@aristanetworks.com</u></font></a><font size="3" face="serif">><br>

> wrote:<br>
>><br>
>> Hi Nader,<br>
>><br>
>> When I wrote this, the intention was that original_network only really<br>
>> makes sense during an update_network call (ie when there's an existing<br>
>> network that you are modifying). In a create_network call, the assumption is<br>
>> that no network exists yet, so there is no "original network" to set.<br>
>><br>
>> Can you provide a bit more detail on the case where there's an existing<br>
>> network when create_network is called? Sorry, I didn't totally follow when<br>
>> this would happen.<br>
>><br>
>> Thanks<br>
>> Andre<br>
>><br>
>><br>
>> On Tue, Mar 25, 2014 at 8:45 AM, Nader Lahouti <</font><a href="mailto:nader.lahouti@gmail.com" target="_blank"><font size="3" color="#0000FF" face="serif"><u>nader.lahouti@gmail.com</u></font></a><font size="3" face="serif">><br>

>> wrote:<br>
>>><br>
>>> Hi All,<br>
>>><br>
>>> In the current Ml2Plugin code when 'create_network' is called, as shown<br>
>>> below:<br>
>>><br>
>>><br>
>>><br>
>>>     def create_network(self, context, network)<br>
>>><br>
>>>         net_data = network['network']<br>
>>><br>
>>> ...<br>
>>><br>
>>>         session = context.session<br>
>>><br>
>>>         with session.begin(subtransactions=True):<br>
>>><br>
>>>             self._ensure_default_security_group(context, tenant_id)<br>
>>><br>
>>>             result = super(Ml2Plugin, self).create_network(context,<br>
>>> network)<br>
>>><br>
>>> ...<br>
>>><br>
>>>             mech_context = driver_context.NetworkContext(self, context,<br>
>>> result)<br>
>>><br>
>>>             self.mechanism_manager.create_network_precommit(mech_context)<br>
>>><br>
>>> ...<br>
>>><br>
>>><br>
>>><br>
>>> the original_network parameter is not set (the default is None) when<br>
>>> instantiating NetworkContext, and as a result the mech_context has only the<br>
>>> value of network object returned from super(Ml2Plugin,<br>
>>> self).create_network().<br>
>>><br>
>>> This causes issue when a mechanism driver needs to use the original<br>
>>> network parameters (given to the create_network), specially when extension<br>
>>> is used for the network resources.<br>
>>><br>
>>> (The 'result' only has the network attributes without extension which is<br>
>>> used to set the '_network' in the NetwrokContext object).<br>
>>><br>
>>> Even using  extension function registration using<br>
>>><br>
>>> db_base_plugin_v2.NeutronDbPluginV2.register_dict_extend_funcs(...) won't<br>
>>> help as the network object that is passed to the registered function does<br>
>>> not include the extension parameters.<br>
>>><br>
>>><br>
>>> Is there any reason that the original_network is not set when<br>
>>> initializing the NetworkContext? Would that cause any issue to set it to<br>
>>> 'net_data' so that any mechanism driver can use original network parameters<br>
>>> as they are available when create_network is called?<br>
>>><br>
>>><br>
>>> Appreciate your comments.<br>
>>><br>
>>><br>
>>> Thanks,<br>
>>><br>
>>> Nader.<br>
>>><br>
>>><br>
>>><br>
>>><br>
>>><br>
>>> _______________________________________________<br>
>>> OpenStack-dev mailing list<br>
>>> </font><a href="mailto:OpenStack-dev@lists.openstack.org" target="_blank"><font size="3" color="#0000FF" face="serif"><u>OpenStack-dev@lists.openstack.org</u></font></a><font size="3" face="serif"><br>
>>> </font><a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank"><font size="3" color="#0000FF" face="serif"><u>http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</u></font></a><font size="3" face="serif"><br>

>>><br>
>><br>
>><br>
>> _______________________________________________<br>
>> OpenStack-dev mailing list<br>
>> </font><a href="mailto:OpenStack-dev@lists.openstack.org" target="_blank"><font size="3" color="#0000FF" face="serif"><u>OpenStack-dev@lists.openstack.org</u></font></a><font size="3" face="serif"><br>
>> </font><a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank"><font size="3" color="#0000FF" face="serif"><u>http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</u></font></a><font size="3" face="serif"><br>

>><br>
><br>
><br>
> _______________________________________________<br>
> OpenStack-dev mailing list<br>
> </font><a href="mailto:OpenStack-dev@lists.openstack.org" target="_blank"><font size="3" color="#0000FF" face="serif"><u>OpenStack-dev@lists.openstack.org</u></font></a><font size="3" face="serif"><br>
> </font><a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank"><font size="3" color="#0000FF" face="serif"><u>http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</u></font></a><font size="3" face="serif"><br>

><br>
<br>
_______________________________________________<br>
OpenStack-dev mailing list</font><font size="3" color="#0000FF" face="serif"><u><br>
</u></font><a href="mailto:OpenStack-dev@lists.openstack.org" target="_blank"><font size="3" color="#0000FF" face="serif"><u>OpenStack-dev@lists.openstack.org</u></font></a><font size="3" color="#0000FF" face="serif"><u><br>

</u></font><a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank"><font size="3" color="#0000FF" face="serif"><u>http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</u></font></a></ul>

<br>
<font size="3" face="serif"><br>
_______________________________________________<br>
OpenStack-dev mailing list</font><font size="3" color="#0000FF" face="serif"><u><br>
</u></font><a href="mailto:OpenStack-dev@lists.openstack.org" target="_blank"><font size="3" color="#0000FF" face="serif"><u>OpenStack-dev@lists.openstack.org</u></font></a><font size="3" color="#0000FF" face="serif"><u><br>

</u></font><a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank"><font size="3" color="#0000FF" face="serif"><u>http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</u></font></a><font size="3" face="serif"><br>

</font></ul>
<br>
<font size="3" face="serif"><br>
_______________________________________________<br>
OpenStack-dev mailing list</font><font size="3" color="#0000FF" face="serif"><u><br>
</u></font><a href="mailto:OpenStack-dev@lists.openstack.org" target="_blank"><font size="3" color="#0000FF" face="serif"><u>OpenStack-dev@lists.openstack.org</u></font></a><font size="3" color="#0000FF" face="serif"><u><br>

</u></font><a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank"><font size="3" color="#0000FF" face="serif"><u>http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</u></font></a><font size="3" face="serif"><br>

</font></ul>
<tt><font>_______________________________________________<br>
OpenStack-dev mailing list<br>
<a href="mailto:OpenStack-dev@lists.openstack.org" target="_blank">OpenStack-dev@lists.openstack.org</a><br>
</font></tt><tt><font><a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a></font></tt><tt><font><br>
</font></tt><br>
</div></div><p></p></div>
<br>_______________________________________________<br>
OpenStack-dev mailing list<br>
<a href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
<br></blockquote></div><br></div>