<div dir="ltr"><div>Thanks Bence for your response.</div><div><br></div><div dir="ltr">On Fri, Sep 27, 2019 at 9:45 AM Bence Romsics <<a href="mailto:bence.romsics@gmail.com">bence.romsics@gmail.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi Neil,<br>
<br>
Neutron extensions are to be treated as optional (one by one) from an<br>
API user point of view. Many reference implementations implement<br>
multiple extensions at once in the same plugin and by that may create<br>
the (false) expectation the extensions always come together. But as<br>
soon as another cloud loads different plugins this expectation is<br>
going to break.<br></blockquote><div><br></div><div>Thank you; yes, that is what I would have guessed too, unless there was a declaration somewhere that some specific extensions are now mandatory.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
For example this is the l3 service plugin's extension list:<br>
<br>
<a href="https://github.com/openstack/neutron/blob/8a584171cd505593c69f9149aa58c6aa9b9e7ac3/neutron/services/l3_router/l3_router_plugin.py#L95" rel="noreferrer" target="_blank">https://github.com/openstack/neutron/blob/8a584171cd505593c69f9149aa58c6aa9b9e7ac3/neutron/services/l3_router/l3_router_plugin.py#L95</a><br>
<br>
But another plugin loaded in another cloud may choose to implement a<br>
different set of extensions. So I'd argue the client should be more<br>
lenient here and accept when the 'routes' attribute is not there.<br></blockquote><div><br></div><div>I will propose a patch for that.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
It's another interesting question what may changed in the Calico CI,<br>
I'd probably start with this line in the log you linked:<br>
<br>
2019-09-26 18:32:52.772 | ++<br>
/opt/stack/new/networking-calico/devstack/plugin.sh:source:98 :<br>
inidelete /etc/neutron/neutron.conf DEFAULT service_plugins<br>
<br>
That tells Neutron not to load any service plugins - including the l3<br>
service plugin.<br></blockquote><div><br></div><div>That has been the case with Calico for a long time.  Instead of loading the l3 service plugin, the Calico core plugin provides the router and floatingip resources by inheriting from l3_db.L3_NAT_db_mixin, and customizes some of the floating IP methods, as Calico implements those differently from the reference implementation.</div><div><br></div><div>At <a href="https://review.opendev.org/#/c/685139/">https://review.opendev.org/#/c/685139/</a> I've tried a few iterations to get this approach to generate the 'routes' attribute as well, but none of those has worked yet.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
Hope that helps,<br>
Bence<br></blockquote><div><br></div><div>Very much; many thanks!</div><div>     Neil</div><div> </div></div></div>