<div dir="ltr"><div>Neutron should not depend on versioning implementation in novaclient.<br></div><br>There is <span class=""><span class="">get_contrib_module</span><span class=""> function in </span></span><a href="https://review.openstack.org/#/c/152569/9/novaclient/client.py">https://review.openstack.org/#/c/152569/9/novaclient/client.py</a> , which should help to <span id="result_box" class="" lang="en"><span class="">renounce the use of direct import of versioning stuff of novaclient, but now, imo, we should use workaround like <a href="https://review.openstack.org/#/c/152907/">https://review.openstack.org/#/c/152907/</a><br></span></span><div><div><div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Feb 20, 2015 at 12:38 AM, Terry Wilson <span dir="ltr"><<a href="mailto:twilson@redhat.com" target="_blank">twilson@redhat.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class=""><div class="h5"><br>
<br>
----- Original Message -----<br>
> On Feb 19, 2015, at 11:52, Terry Wilson <<a href="mailto:twilson@redhat.com">twilson@redhat.com</a>> wrote:<br>
><br>
> > Unfortunately, the new novaclient release ended up completely breaking the<br>
> > neutron gate. The v1_1 deprecation broke our (voting) pylint test:<br>
> > <a href="https://jenkins04.openstack.org/job/gate-neutron-pylint/1383/console" target="_blank">https://jenkins04.openstack.org/job/gate-neutron-pylint/1383/console</a><br>
> ><br>
> > 2015-02-19 18:37:06.932 | Module neutron.notifiers.nova[0m<br>
> > 2015-02-19 18:37:06.932 | No name 'client' in module 'novaclient.v1_1'<br>
> > (no-name-in-module)<br>
> > 2015-02-19 18:37:06.932 | No name 'contrib' in module<br>
> > 'novaclient.v1_1'(no-name-in-module)<br>
> > 2015-02-19 18:37:06.932 | Module neutron.plugins.cisco.l3.service_vm_lib<br>
> > 2015-02-19 18:37:06.932 | No name 'client' in module 'novaclient.v1_1'<br>
> > (no-name-in-module)<br>
><br>
> Hi Terry,<br>
><br>
> Sorry to hear about this. I looked into this and the problem is pylint can't<br>
> parse the backward-compatibility we have for the v1_1 deprecation:<br>
><br>
> <a href="https://review.openstack.org/#/c/149006/13/novaclient/v1_1/__init__.py,cm" target="_blank">https://review.openstack.org/#/c/149006/13/novaclient/v1_1/__init__.py,cm</a><br>
><br>
> The actual code should work but pylint static checking will fail to follow<br>
> it. So far, the options I see to handle it are to either patch<br>
> s/novaclient.v1_1/novaclient.v2/ in neutron or suppress the specific pylint<br>
> check that's failing (if it's not too broad).<br>
><br>
> Do you find either of these options acceptable, or have another idea?<br>
<br>
</div></div>We've currently just disabled the pylint gate tests, and I've posted a patch for neutron to resolve the issue. Looks like there was a similar patch already up for review as well, though it only catches one of our uses of novaclient. There's still a bit of an issue that there is no version-neutral way to import the 'contrib' stuff like there is for 'client'. So:<br>
<br>
from novaclient.v1_1.contrib import server_external_events<br>
<br>
has to become<br>
<br>
from novaclient.v2.contrib import server_external_events<br>
<br>
which doesn't work on previous versions of novaclient. It's possible to hack around it using importutils, but it's pretty ugly.<br>
<div class=""><div class="h5"><br>
Terry<br>
<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>
</div></div></blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature"><div dir="ltr">Best regards,<br>Andrey Kurilin.<br></div></div>
</div></div></div></div></div></div></div>