<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On 13 February 2015 at 16:22, John Belamaric <span dir="ltr"><<a href="mailto:jbelamaric@infoblox.com" target="_blank">jbelamaric@infoblox.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">



<div style="word-wrap:break-word;color:rgb(0,0,0);font-size:14px;font-family:Calibri,sans-serif">
<div><br>
</div>
<div><br>
</div>
<span>
<div style="font-family:Calibri;font-size:11pt;text-align:left;color:black;BORDER-BOTTOM:medium none;BORDER-LEFT:medium none;PADDING-BOTTOM:0in;PADDING-LEFT:0in;PADDING-RIGHT:0in;BORDER-TOP:#b5c4df 1pt solid;BORDER-RIGHT:medium none;PADDING-TOP:3pt"><span class="">
<span style="font-weight:bold">From: </span>Salvatore Orlando <<a href="mailto:sorlando@nicira.com" target="_blank">sorlando@nicira.com</a>><br>
<span style="font-weight:bold">Reply-To: </span>"OpenStack Development Mailing List (not for usage questions)" <<a href="mailto:openstack-dev@lists.openstack.org" target="_blank">openstack-dev@lists.openstack.org</a>><br>
</span><span style="font-weight:bold">Date: </span>Friday, February 13, 2015 at 8:26 AM<span class=""><br>
<span style="font-weight:bold">To: </span>"OpenStack Development Mailing List (not for usage questions)" <<a href="mailto:openstack-dev@lists.openstack.org" target="_blank">openstack-dev@lists.openstack.org</a>><br>
</span><span style="font-weight:bold">Subject: </span>Re: [openstack-dev] [Neutron] Update on "DB" IPAM driver<br>
</div>
<blockquote style="BORDER-LEFT:#b5c4df 5 solid;PADDING:0 0 0 5;MARGIN:0 0 0 5">
<div>
<div>
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div style="word-wrap:break-word;color:rgb(0,0,0);font-size:14px;font-family:Calibri,sans-serif">
<div>...</div>
</div>
</blockquote>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</span><span class="">
<div><br>
</div>
<span>
<blockquote style="BORDER-LEFT:#b5c4df 5 solid;PADDING:0 0 0 5;MARGIN:0 0 0 5">
<div>
<div>
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div style="word-wrap:break-word;color:rgb(0,0,0);font-size:14px;font-family:Calibri,sans-serif">
<div>I think the auto-generated case should be a base class as you described in [1], but each subclass would implement the specific auto-generation. See the discussion at line 468 in [2] and see what you think. Of course for addresses that come from RA there
 would be no IPAM.</div>
</div>
</blockquote>
<div><br>
</div>
<div>I think this makes sense.</div>
<div> </div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</span>
<div><br>
</div>
</span><div>Thinking a little more on this, in the case of magic address prefixes, we probably should have the factory method generate the right request class. That way, the logic for those magic prefixes is all in one place. You could still specify the class in the
 request but the magic prefixes would take priority.</div></div></blockquote><div><br></div><div>Put it in this way, it also makes sense. But I think I need to see it translated in code to figure it out properly. Anyway, this is something which pertains the base classes rather than the reference driver.</div><div>I think from the perspective of the reference driver we should just raise if a "AnyAddressRequest" is sent for a subnet where addresses are supposed to be autogenerated, because the ipam driver won't generate the address.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word;color:rgb(0,0,0);font-size:14px;font-family:Calibri,sans-serif"><span class="">
<div><br>
</div>
<div><br>
</div>
<span>
<blockquote style="BORDER-LEFT:#b5c4df 5 solid;PADDING:0 0 0 5;MARGIN:0 0 0 5">
<div>
<div>
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div style="word-wrap:break-word;color:rgb(0,0,0);font-size:14px;font-family:Calibri,sans-serif">
<div><br>
</div>
<div>
<div>[1] <a href="https://review.openstack.org/#/c/150485/" target="_blank">https://review.openstack.org/#/c/150485/</a></div>
</div>
<div>[2] <a href="https://review.openstack.org/#/c/153236/2/neutron/db/db_base_plugin_v2.py,unified" target="_blank">https://review.openstack.org/#/c/153236/2/neutron/db/db_base_plugin_v2.py,unified</a></div>
<span>
<div><br>
</div>
</span></div>
</blockquote>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</span>
<div><br>
</div>
<div><br>
</div>
</span><span>
<blockquote style="BORDER-LEFT:#b5c4df 5 solid;PADDING:0 0 0 5;MARGIN:0 0 0 5">
<div>
<div>
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div style="word-wrap:break-word;color:rgb(0,0,0);font-size:14px;font-family:Calibri,sans-serif">
<span><span>
<blockquote style="BORDER-LEFT:#b5c4df 5 solid;PADDING:0 0 0 5;MARGIN:0 0 0 5">
<div>
<div>
<div dir="ltr">
<div><br>
</div><span class="">
<div>- The db base refactoring being performed by Pavel is under way [3]. It is worth noting that this is a non-negligible change to some of Neutron's basic and more critical workflows. We should expect pushback from the community regarding the introduction
 of this change in the 3rd milestone. At this stage I would suggest either:</div>
<div>A) consider a strategy for running pluggable IPAM as optional</div>
<div>B) consider delaying to Liberty.</div>
<div>(and that's where I get virtually jeered and pelted with rotten tomatoes)</div>
</span></div>
</div>
</div>
</blockquote>
</span>
<div><br>
</div>
</span><span class="">
<div>I wish I had some old tomatoes! Seriously, I think "A" is a reasonable approach. To make this really explicit we may want to basically replace the DB plugin class with a shim that delegates to either the current implementation or the new implementation,
 depending on the flag.</div>
</span></div>
</blockquote><span class="">
<div><br>
</div>
<div>The fact that the current implementation is pretty much a bunch of private methods in the db base plugin class executed within a transaction for creating a port makes the situation a wee bit more complex. I'm not sure we can replace the db plugin class
 with a shim so easily, because we need to consider the impact on plugins which inherit from this base class. For instance some plugins override methods from the base class, and this would be a problem. For those plugins we must ensure old-style IPAM is performed.
 A transitory solution might be to have, for the relevant methods 2 versions - one would be the current one, and the other one would be the one leveraging pluggable IPAM. During plugin initialisation, the plugin itself will decide whether use or not the latter
 methods. This might be tuneable with a configuration parameter too. The downside of this approach is that it will not allow us to remove "old" baked in IPAM code, and will have an impact on code maintainability which ultimately will result in accumulating
 even more technical debt. However, I might be missing some better alternative, so if you have any proposal just let me know.</div>
</span></div>
</div>
</div>
</div>
</div>
</blockquote>
</span>
<div><br>
</div>
<div>Hmm. How dynamic is Python? I know in Ruby I could do something like this at class load time:</div>
<div><br>
</div>
<div>config.use_ipam ? DbBasePluginV2 = IpamDbBasePluginV2 : DbBasePluginV2 = LegacyDbBasePluginV2</div>
<div><br>
</div>
<div>and all the subclasses would work fine as before...</div></div></blockquote><div><br></div><div>Technically yes.</div><div>From a practical perspective however if the subclass is assuming that create_port works in the "old" way, and then instead is working in the "ipam" way, it might be mayhem!</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word;color:rgb(0,0,0);font-size:14px;font-family:Calibri,sans-serif">
<div><br>
</div>
<div><br>
</div>
</div>

<br>__________________________________________________________________________<br>
OpenStack Development Mailing List (not for usage questions)<br>
Unsubscribe: <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</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></div>