Hello community,

here is the log from the commit of package python-neutronclient for 
openSUSE:Factory checked in at 2020-06-05 20:12:27
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-neutronclient (Old)
 and      /work/SRC/openSUSE:Factory/.python-neutronclient.new.3606 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-neutronclient"

Fri Jun  5 20:12:27 2020 rev:24 rq:803576 version:7.1.1

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-neutronclient/python-neutronclient.changes    
    2020-03-24 22:33:17.133116913 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-neutronclient.new.3606/python-neutronclient.changes
      2020-06-05 20:14:46.754663619 +0200
@@ -1,0 +2,20 @@
+Tue May 12 09:56:11 UTC 2020 - cloud-de...@suse.de
+
+- update to version 7.1.1
+  - Remove 'public' and 'private' parameters in fwaas_v2
+  - Switch to Ussuri jobs
+  - Fix pep8 errors with hacking 2.0.0
+  - Drop python 2.7 support
+  - Avoid py36 error when printing unicode chars in a stream
+  - Drop python3 hack for XML serializer
+  - fix a typo
+  - PDF documentation build
+  - Add support for port bindings
+  - Cleanup py27 support
+  - Update master for stable/train
+  - Drop lib-forward-testing
+  - Convert exception to string before passing it in
+  - Move grenade neutron-lib job to py3 and in python-neutronclient repo
+  - Replace 'bgp speaker show dragents' with 'bgp dragent list'
+
+-------------------------------------------------------------------

Old:
----
  python-neutronclient-6.14.0.tar.gz

New:
----
  python-neutronclient-7.1.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-neutronclient.spec ++++++
--- /var/tmp/diff_new_pack.N9mNtI/_old  2020-06-05 20:14:48.650670595 +0200
+++ /var/tmp/diff_new_pack.N9mNtI/_new  2020-06-05 20:14:48.654670610 +0200
@@ -17,13 +17,13 @@
 
 
 Name:           python-neutronclient
-Version:        6.14.0
+Version:        7.1.1
 Release:        0
 Summary:        Python API and CLI for OpenStack Neutron
 License:        Apache-2.0
 Group:          Development/Languages/Python
 URL:            https://launchpad.net/%{name}
-Source0:        
https://files.pythonhosted.org/packages/source/p/python-neutronclient/python-neutronclient-6.14.0.tar.gz
+Source0:        
https://files.pythonhosted.org/packages/source/p/python-neutronclient/python-neutronclient-7.1.1.tar.gz
 BuildRequires:  openstack-macros
 BuildRequires:  python3-cliff >= 2.8.0
 BuildRequires:  python3-fixtures
@@ -100,8 +100,8 @@
 %{py3_build}
 
 # Build HTML docs and man page
-PBR_VERSION=6.14.0 %sphinx_build -b html doc/source doc/build/html
-PBR_VERSION=6.14.0 %sphinx_build -b man doc/source doc/build/man
+PBR_VERSION=7.1.1 %sphinx_build -b html doc/source doc/build/html
+PBR_VERSION=7.1.1 %sphinx_build -b man doc/source doc/build/man
 rm -r doc/build/html/.{doctrees,buildinfo}
 
 %install

++++++ _service ++++++
--- /var/tmp/diff_new_pack.N9mNtI/_old  2020-06-05 20:14:48.682670713 +0200
+++ /var/tmp/diff_new_pack.N9mNtI/_new  2020-06-05 20:14:48.682670713 +0200
@@ -1,8 +1,8 @@
 <services>
   <service mode="disabled" name="renderspec">
-    <param 
name="input-template">https://raw.githubusercontent.com/openstack/rpm-packaging/stable/train/openstack/python-neutronclient/python-neutronclient.spec.j2</param>
+    <param 
name="input-template">https://opendev.org/openstack/rpm-packaging/raw/branch/stable/ussuri/openstack/python-neutronclient/python-neutronclient.spec.j2</param>
     <param name="output-name">python-neutronclient.spec</param>
-    <param 
name="requirements">https://raw.githubusercontent.com/openstack/python-neutronclient/stable/train/requirements.txt</param>
+    <param 
name="requirements">https://opendev.org/openstack/python-neutronclient/raw/branch/stable/ussuri/requirements.txt</param>
     <param name="changelog-email">cloud-de...@suse.de</param>
     <param name="changelog-provider">gh,openstack,python-neutronclient</param>
   </service>

++++++ python-neutronclient-6.14.0.tar.gz -> python-neutronclient-7.1.1.tar.gz 
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-neutronclient-6.14.0/.zuul.yaml 
new/python-neutronclient-7.1.1/.zuul.yaml
--- old/python-neutronclient-6.14.0/.zuul.yaml  2019-09-13 19:00:21.000000000 
+0200
+++ new/python-neutronclient-7.1.1/.zuul.yaml   2020-04-08 14:05:32.000000000 
+0200
@@ -2,11 +2,9 @@
     templates:
       - openstack-cover-jobs
       - openstack-lower-constraints-jobs
-      - openstack-python-jobs
-      - openstack-python3-train-jobs
+      - openstack-python3-ussuri-jobs
       - publish-openstack-docs-pti
       - check-requirements
-      - lib-forward-testing
       - lib-forward-testing-python3
       - release-notes-jobs-python3
       - openstackclient-plugin-jobs
@@ -18,7 +16,7 @@
         - neutronclient-functional
     experimental:
       jobs:
-        - legacy-grenade-dsvm-neutron-libs:
+        - neutron-lib-grenade-dsvm:
             irrelevant-files:
               - ^(test-|)requirements.txt$
               - ^setup.cfg$
@@ -45,3 +43,29 @@
         LIBS_FROM_GIT: python-neutronclient
       devstack_plugins:
         neutron-vpnaas: https://opendev.org/openstack/neutron-vpnaas
+
+- job:
+    name: neutron-lib-grenade-dsvm
+    # Old name: legacy-grenade-dsvm-neutron-libs
+    parent: legacy-dsvm-base
+    run: playbooks/legacy/grenade-dsvm-neutron-libs/run.yaml
+    post-run: playbooks/legacy/grenade-dsvm-neutron-libs/post.yaml
+    timeout: 10800
+    required-projects:
+      - openstack/grenade
+      - openstack/devstack-gate
+      - openstack/keystoneauth
+      - openstack/neutron
+      - openstack/neutron-lib
+      - openstack/os-client-config
+      - openstack/python-cinderclient
+      - openstack/python-glanceclient
+      - openstack/python-ironicclient
+      - openstack/python-keystoneclient
+      - openstack/python-neutronclient
+      - openstack/python-novaclient
+    # This is py3 version for ussuri onwards rest all branch needs to be py2
+    # version which is present in openstack-zuul-jobs.
+    # We need to take care of this branch variant and python version while
+    # migrating these jobs to zuulv3.
+    branches: ^(?!(stable/(ocata|pike|queens|rocky|stein|train))).*$
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-neutronclient-6.14.0/AUTHORS 
new/python-neutronclient-7.1.1/AUTHORS
--- old/python-neutronclient-6.14.0/AUTHORS     2019-09-13 19:01:12.000000000 
+0200
+++ new/python-neutronclient-7.1.1/AUTHORS      2020-04-08 14:06:45.000000000 
+0200
@@ -115,6 +115,7 @@
 Jason Zhang <zhe...@nttmcl.com>
 Jaspinder <sin...@us.ibm.com>
 Jaume Devesa <devv...@gmail.com>
+Jay Faulkner <j...@jvf.cc>
 Jens Harbott <j.harb...@x-ion.de>
 Jeremy Liu <liuji...@gohighsec.com>
 Jeremy Stanley <fu...@yuggoth.org>
@@ -185,6 +186,7 @@
 Robert Collins <rbtcoll...@hp.com>
 Robert Li <ba...@cisco.com>
 Rodion Tikunov <rtiku...@mirantis.com>
+Rodolfo Alonso Hernandez <ralon...@redhat.com>
 Rodolfo Alonso Hernandez <rodolfo.alonso.hernan...@intel.com>
 Roman Podolyaka <rpodoly...@mirantis.com>
 Rudrajit Tapadar <rtapa...@cisco.com>
@@ -208,6 +210,7 @@
 Stanislav Kudriashev <stas.kudrias...@gmail.com>
 Stanislaw Pitucha <stanislaw.pitu...@hp.com>
 Stephen Balukoff <sbaluk...@bluebox.net>
+Stephen Finucane <stephen...@redhat.com>
 Stephen Ma <stephen...@hp.com>
 Steve Martinelli <steve...@ca.ibm.com>
 Sudhakar Babu Gariganti <sudhakar-babu.gariga...@hp.com>
@@ -281,6 +284,7 @@
 ji-xuepeng <ji.xuep...@zte.com.cn>
 jiasirui <jiasi...@inspur.com>
 jichenjc <jiche...@cn.ibm.com>
+kangyufei <kan...@inspur.com>
 karthik s <ksund...@redhat.com>
 kavithahr <kavith...@nectechnologies.in>
 lilintan <lintan...@easystack.cn>
@@ -288,6 +292,7 @@
 liu-sheng <liush...@huawei.com>
 liujingzte <liu.ji...@zte.com.cn>
 liuqing <jing.liuq...@99cloud.net>
+liushuobj <liushu...@inspur.com>
 liuweicai <liuuwei...@gmail.com>
 llg8212 <lilin...@huawei.com>
 mathieu-rohon <mathieu.ro...@gmail.com>
@@ -324,6 +329,7 @@
 yong sheng gong <gong...@cn.ibm.com>
 yuyangbj <yan...@vmware.com>
 zengfagao <zengfa....@hp.com>
+zhanghao <zhangh...@cmss.chinamobile.com>
 zhanghao2 <zhangh...@cmss.chinamobile.com>
 zhaojingjing0067370 <zhao.jingji...@zte.com.cn>
 zheng yin <yin.zh...@easystack.cn>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-neutronclient-6.14.0/ChangeLog 
new/python-neutronclient-7.1.1/ChangeLog
--- old/python-neutronclient-6.14.0/ChangeLog   2019-09-13 19:01:12.000000000 
+0200
+++ new/python-neutronclient-7.1.1/ChangeLog    2020-04-08 14:06:45.000000000 
+0200
@@ -1,10 +1,37 @@
 CHANGES
 =======
 
+7.1.1
+-----
+
+* Cleanup py27 support
+
+7.1.0
+-----
+
+* Replace 'bgp speaker show dragents' with 'bgp dragent list'
+* Drop lib-forward-testing
+* Add support for port bindings
+
+7.0.0
+-----
+
+* Convert exception to string before passing it in
+* Avoid py36 error when printing unicode chars in a stream
+* fix a typo
+* Fix pep8 errors with hacking 2.0.0
+* Drop python 2.7 support
+* Drop python3 hack for XML serializer
+* Move grenade neutron-lib job to py3 and in python-neutronclient repo
+* Switch to Ussuri jobs
+* Remove 'public' and 'private' parameters in fwaas\_v2
+* Update master for stable/train
+
 6.14.0
 ------
 
 * Add router add/remove extra routes operations
+* PDF documentation build
 * Improve help text
 * Fix string in header
 * Use secure sha256 instead of sha1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-neutronclient-6.14.0/PKG-INFO 
new/python-neutronclient-7.1.1/PKG-INFO
--- old/python-neutronclient-6.14.0/PKG-INFO    2019-09-13 19:01:12.000000000 
+0200
+++ new/python-neutronclient-7.1.1/PKG-INFO     2020-04-08 14:06:46.000000000 
+0200
@@ -1,6 +1,6 @@
-Metadata-Version: 1.1
+Metadata-Version: 1.2
 Name: python-neutronclient
-Version: 6.14.0
+Version: 7.1.1
 Summary: CLI and Client Library for OpenStack Networking
 Home-page: https://docs.openstack.org/python-neutronclient/latest/
 Author: OpenStack Networking Project
@@ -53,8 +53,9 @@
 Classifier: License :: OSI Approved :: Apache Software License
 Classifier: Operating System :: POSIX :: Linux
 Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.7
+Classifier: Programming Language :: Python :: Implementation :: CPython
+Classifier: Programming Language :: Python :: 3 :: Only
 Classifier: Programming Language :: Python :: 3
 Classifier: Programming Language :: Python :: 3.6
 Classifier: Programming Language :: Python :: 3.7
+Requires-Python: >=3.6
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-neutronclient-6.14.0/doc/requirements.txt 
new/python-neutronclient-7.1.1/doc/requirements.txt
--- old/python-neutronclient-6.14.0/doc/requirements.txt        2019-09-13 
19:00:21.000000000 +0200
+++ new/python-neutronclient-7.1.1/doc/requirements.txt 2020-04-08 
14:05:32.000000000 +0200
@@ -1,7 +1,6 @@
 # The order of packages is significant, because pip processes them in the order
 # of appearance. Changing the order has an impact on the overall integration
 # process, which may cause wedges in the gate later.
-openstackdocstheme>=1.18.1 # Apache-2.0
+openstackdocstheme>=1.32.1 # Apache-2.0
 reno>=2.5.0 # Apache-2.0
-sphinx!=1.6.6,!=1.6.7,>=1.6.2,<2.0.0;python_version=='2.7'  # BSD
-sphinx!=1.6.6,!=1.6.7,>=1.6.2;python_version>='3.4'  # BSD
+sphinx!=1.6.6,!=1.6.7,>=1.6.2 # BSD
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-neutronclient-6.14.0/doc/source/conf.py 
new/python-neutronclient-7.1.1/doc/source/conf.py
--- old/python-neutronclient-6.14.0/doc/source/conf.py  2019-09-13 
19:00:21.000000000 +0200
+++ new/python-neutronclient-7.1.1/doc/source/conf.py   2020-04-08 
14:05:32.000000000 +0200
@@ -16,7 +16,6 @@
 repository_name = 'openstack/python-neutronclient'
 bug_project = 'python-neutronclient'
 bug_tag = 'doc'
-html_last_updated_fmt = '%Y-%m-%d %H:%M'
 
 # Add any paths that contain templates here, relative to this directory.
 templates_path = ['_templates']
@@ -49,6 +48,25 @@
 # Output file base name for HTML help builder.
 htmlhelp_basename = 'neutronclientdoc'
 
+# -- Options for LaTeX output ------------------------------------------------
+
+latex_documents = [
+    ('index', 'doc-python-neutronclient.tex',
+     u'python-neutronclient Documentation',
+     u'Neutron Contributors', 'manual'),
+]
+
+# Disable usage of xindy https://bugzilla.redhat.com/show_bug.cgi?id=1643664
+latex_use_xindy = False
+
+latex_domain_indices = False
+
+latex_elements = {
+    'makeindex': '',
+    'printindex': '',
+    'preamble': r'\setcounter{tocdepth}{5}',
+}
+
 # -- Options for cliff.sphinxext plugin ---------------------------------------
 
 autoprogram_cliff_application = 'openstack'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-neutronclient-6.14.0/lower-constraints.txt 
new/python-neutronclient-7.1.1/lower-constraints.txt
--- old/python-neutronclient-6.14.0/lower-constraints.txt       2019-09-13 
19:00:21.000000000 +0200
+++ new/python-neutronclient-7.1.1/lower-constraints.txt        2020-04-08 
14:05:32.000000000 +0200
@@ -46,7 +46,7 @@
 munch==2.1.0
 netaddr==0.7.18
 netifaces==0.10.4
-openstackdocstheme==1.18.1
+openstackdocstheme==1.32.1
 openstacksdk==0.11.2
 os-client-config==1.28.0
 os-service-types==1.2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-neutronclient-6.14.0/neutronclient/client.py 
new/python-neutronclient-7.1.1/neutronclient/client.py
--- old/python-neutronclient-6.14.0/neutronclient/client.py     2019-09-13 
19:00:21.000000000 +0200
+++ new/python-neutronclient-7.1.1/neutronclient/client.py      2020-04-08 
14:05:32.000000000 +0200
@@ -104,13 +104,13 @@
         try:
             resp, body = self.request(*args, **kargs)
         except requests.exceptions.SSLError as e:
-            raise exceptions.SslCertificateValidationError(reason=e)
+            raise exceptions.SslCertificateValidationError(reason=str(e))
         except Exception as e:
             # Wrap the low-level connection error (socket timeout, redirect
             # limit, decompression error, etc) into our custom high-level
             # connection exception (it is excepted in the upper layers of code)
             _logger.debug("throwing ConnectionFailed : %s", e)
-            raise exceptions.ConnectionFailed(reason=e)
+            raise exceptions.ConnectionFailed(reason=str(e))
         utils.http_log_resp(_logger, resp, body)
 
         # log request-id for each api call
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-neutronclient-6.14.0/neutronclient/common/serializer.py 
new/python-neutronclient-7.1.1/neutronclient/common/serializer.py
--- old/python-neutronclient-6.14.0/neutronclient/common/serializer.py  
2019-09-13 19:00:21.000000000 +0200
+++ new/python-neutronclient-7.1.1/neutronclient/common/serializer.py   
2020-04-08 14:05:32.000000000 +0200
@@ -20,10 +20,6 @@
 from neutronclient.common import exceptions as exception
 
 
-if six.PY3:
-    long = int
-
-
 class ActionDispatcher(object):
     """Maps method name to local methods through action name."""
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-neutronclient-6.14.0/neutronclient/osc/v2/dynamic_routing/bgp_dragent.py
 
new/python-neutronclient-7.1.1/neutronclient/osc/v2/dynamic_routing/bgp_dragent.py
--- 
old/python-neutronclient-6.14.0/neutronclient/osc/v2/dynamic_routing/bgp_dragent.py
 2019-09-13 19:00:21.000000000 +0200
+++ 
new/python-neutronclient-7.1.1/neutronclient/osc/v2/dynamic_routing/bgp_dragent.py
  2020-04-08 14:05:32.000000000 +0200
@@ -70,18 +70,25 @@
 
 
 class ListDRAgentsHostingBgpSpeaker(command.Lister):
-    """List dynamic routing agents hosting a BGP speaker"""
+    """(Deprecated) List dynamic routing agents hosting a BGP speaker
+
+       (Use "bgp dragent list" instead)
+    """
 
     resource = 'agent'
     list_columns = ['id', 'host', 'admin_state_up', 'alive']
     unknown_parts_flag = False
 
     def get_parser(self, prog_name):
+        self.log.warning("The 'openstack bgp speaker show dragents' CLI is "
+                         "deprecated and will be removed in the future. Use "
+                         "'openstack bgp dragent list' CLI instead.")
         parser = super(ListDRAgentsHostingBgpSpeaker,
                        self).get_parser(prog_name)
         parser.add_argument('bgp_speaker',
                             metavar='<bgp-speaker>',
-                            help=_("ID or name of the BGP speaker"))
+                            help=_("List dynamic routing agents hosting a "
+                                   "BGP speaker (name or ID)"))
         return parser
 
     def take_action(self, parsed_args):
@@ -94,6 +101,42 @@
         headers = ('ID', 'Host', 'State', 'Alive')
         columns = ('id', 'host', 'admin_state_up', 'alive')
         return (headers,
+                (utils.get_dict_properties(
+                    s, columns, formatters=_formatters,
+                ) for s in data['agents']))
+
+
+class ListDRAgent(command.Lister):
+    """List dynamic routing agents"""
+
+    resource = 'agent'
+    list_columns = ['id', 'host', 'admin_state_up', 'alive']
+    unknown_parts_flag = False
+
+    def get_parser(self, prog_name):
+        parser = super(ListDRAgent,
+                       self).get_parser(prog_name)
+        parser.add_argument('--bgp-speaker',
+                            metavar='<bgp-speaker>',
+                            help=_("List dynamic routing agents hosting a "
+                                   "BGP speaker (name or ID)"))
+        return parser
+
+    def take_action(self, parsed_args):
+        search_opts = {}
+        client = self.app.client_manager.neutronclient
+        if parsed_args.bgp_speaker is not None:
+            search_opts = {}
+            speaker_id = client.find_resource(constants.BGP_SPEAKER,
+                                              parsed_args.bgp_speaker)['id']
+            search_opts['bgp_speaker'] = speaker_id
+            data = client.list_dragents_hosting_bgp_speaker(**search_opts)
+        else:
+            attrs = {'agent_type': 'BGP dynamic routing agent'}
+            data = client.list_agents(**attrs)
+        headers = ('ID', 'Host', 'State', 'Alive')
+        columns = ('id', 'host', 'admin_state_up', 'alive')
+        return (headers,
                 (utils.get_dict_properties(
                     s, columns, formatters=_formatters,
                 ) for s in data['agents']))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-neutronclient-6.14.0/neutronclient/osc/v2/fwaas/firewallgroup.py 
new/python-neutronclient-7.1.1/neutronclient/osc/v2/fwaas/firewallgroup.py
--- old/python-neutronclient-6.14.0/neutronclient/osc/v2/fwaas/firewallgroup.py 
2019-09-13 19:00:21.000000000 +0200
+++ new/python-neutronclient-7.1.1/neutronclient/osc/v2/fwaas/firewallgroup.py  
2020-04-08 14:05:32.000000000 +0200
@@ -77,19 +77,6 @@
         action='store_true',
         help=_('Detach egress firewall policy from the firewall group'))
     shared_group = parser.add_mutually_exclusive_group()
-    shared_group.add_argument(
-        '--public',
-        action='store_true',
-        help=_('Make the firewall group public, which allows it to be '
-               'used in all projects (as opposed to the default, '
-               'which is to restrict its use to the current project). '
-               'This option is deprecated and would be removed in R release.'))
-    shared_group.add_argument(
-        '--private',
-        action='store_true',
-        help=_('Restrict use of the firewall group to the '
-               'current project. This option is deprecated '
-               'and would be removed in R release.'))
 
     shared_group.add_argument(
         '--share',
@@ -147,9 +134,9 @@
             cmd_resource=const.CMD_FWP)['id']
     elif parsed_args.no_egress_firewall_policy:
         attrs['egress_firewall_policy_id'] = None
-    if parsed_args.share or parsed_args.public:
+    if parsed_args.share:
         attrs['shared'] = True
-    if parsed_args.no_share or parsed_args.private:
+    if parsed_args.no_share:
         attrs['shared'] = False
     if parsed_args.enable:
         attrs['admin_state_up'] = True
@@ -350,14 +337,6 @@
             help=_('Egress firewall policy (name or ID) to delete'))
         shared_group = parser.add_mutually_exclusive_group()
         shared_group.add_argument(
-            '--public',
-            action='store_true',
-            help=_('Make the firewall group public, which allows it to be '
-                   'used in all projects (as opposed to the default, '
-                   'which is to restrict its use to the current project). '
-                   'This option is deprecated and would be removed in R'
-                   ' release.'))
-        shared_group.add_argument(
             '--share',
             action='store_true',
             help=_('Restrict use of the firewall group to the '
@@ -375,7 +354,7 @@
             attrs['ingress_firewall_policy_id'] = None
         if parsed_args.egress_firewall_policy:
             attrs['egress_firewall_policy_id'] = None
-        if parsed_args.share or parsed_args.public:
+        if parsed_args.share:
             attrs['shared'] = False
         if parsed_args.enable:
             attrs['admin_state_up'] = False
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-neutronclient-6.14.0/neutronclient/osc/v2/fwaas/firewallpolicy.py 
new/python-neutronclient-7.1.1/neutronclient/osc/v2/fwaas/firewallpolicy.py
--- 
old/python-neutronclient-6.14.0/neutronclient/osc/v2/fwaas/firewallpolicy.py    
    2019-09-13 19:00:21.000000000 +0200
+++ new/python-neutronclient-7.1.1/neutronclient/osc/v2/fwaas/firewallpolicy.py 
2020-04-08 14:05:32.000000000 +0200
@@ -80,9 +80,9 @@
         attrs['name'] = str(parsed_args.name)
     if parsed_args.description:
         attrs['description'] = str(parsed_args.description)
-    if parsed_args.share or parsed_args.public:
+    if parsed_args.share:
         attrs['shared'] = True
-    if parsed_args.no_share or parsed_args.private:
+    if parsed_args.no_share:
         attrs['shared'] = False
     return attrs
 
@@ -108,19 +108,6 @@
                '(by default, it is restricted to be used by the '
                'current project).'))
     shared_group.add_argument(
-        '--public',
-        action='store_true',
-        help=_('Make the firewall policy public, which allows it to be '
-               'used in all projects (as opposed to the default, which '
-               'is to restrict its use to the current project.) This '
-               'option is deprecated and would be removed in R release.'))
-    shared_group.add_argument(
-        '--private',
-        action='store_true',
-        help=_(
-            'Restrict use of the firewall policy to the current project.'
-            'This option is deprecated and would be removed in R release.'))
-    shared_group.add_argument(
         '--no-share',
         action='store_true',
         help=_('Restrict use of the firewall policy to the '
@@ -403,12 +390,6 @@
             action='store_true',
             help=_('Restrict use of the firewall policy to the '
                    'current project'))
-        parser.add_argument(
-            '--public',
-            action='store_true',
-            help=_('Restrict use of the firewall policy to the '
-                   'current project. This option is deprecated '
-                   'and would be removed in R release.'))
         return parser
 
     def _get_attrs(self, client_manager, parsed_args):
@@ -428,7 +409,7 @@
             attrs[const.FWRS] = []
         if parsed_args.audited:
             attrs['audited'] = False
-        if parsed_args.share or parsed_args.public:
+        if parsed_args.share:
             attrs['shared'] = False
         return attrs
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-neutronclient-6.14.0/neutronclient/osc/v2/fwaas/firewallrule.py 
new/python-neutronclient-7.1.1/neutronclient/osc/v2/fwaas/firewallrule.py
--- old/python-neutronclient-6.14.0/neutronclient/osc/v2/fwaas/firewallrule.py  
2019-09-13 19:00:21.000000000 +0200
+++ new/python-neutronclient-7.1.1/neutronclient/osc/v2/fwaas/firewallrule.py   
2020-04-08 14:05:32.000000000 +0200
@@ -118,19 +118,6 @@
         help=_('Detach destination port number or range'))
     shared_group = parser.add_mutually_exclusive_group()
     shared_group.add_argument(
-        '--public',
-        action='store_true',
-        help=_('Make the firewall policy public, which allows it to be '
-               'used in all projects (as opposed to the default, '
-               'which is to restrict its use to the current project). '
-               'This option is deprecated and would be removed in R Release'))
-    shared_group.add_argument(
-        '--private',
-        action='store_true',
-        help=_(
-            'Restrict use of the firewall rule to the current project.'
-            'This option is deprecated and would be removed in R release.'))
-    shared_group.add_argument(
         '--share',
         action='store_true',
         help=_('Share the firewall rule to be used in all projects '
@@ -212,9 +199,9 @@
         attrs['enabled'] = True
     if parsed_args.disable_rule:
         attrs['enabled'] = False
-    if parsed_args.share or parsed_args.public:
+    if parsed_args.share:
         attrs['shared'] = True
-    if parsed_args.no_share or parsed_args.private:
+    if parsed_args.no_share:
         attrs['shared'] = False
     if parsed_args.source_firewall_group:
         attrs['source_firewall_group_id'] = client.find_resource(
@@ -417,12 +404,6 @@
             action='store_true',
             help=_('Restrict use of the firewall rule to the current project'))
         parser.add_argument(
-            '--public',
-            action='store_true',
-            help=_('Restrict use of the firewall rule to the current project. '
-                   'This option is deprecated and would be removed in '
-                   'R Release.'))
-        parser.add_argument(
             '--enable-rule',
             action='store_true',
             help=_('Disable this rule'))
@@ -448,7 +429,7 @@
             attrs['destination_ip_address'] = None
         if parsed_args.destination_port:
             attrs['destination_port'] = None
-        if parsed_args.share or parsed_args.public:
+        if parsed_args.share:
             attrs['shared'] = False
         if parsed_args.enable_rule:
             attrs['enabled'] = False
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-neutronclient-6.14.0/neutronclient/tests/unit/osc/v2/dynamic_routing/fakes.py
 
new/python-neutronclient-7.1.1/neutronclient/tests/unit/osc/v2/dynamic_routing/fakes.py
--- 
old/python-neutronclient-6.14.0/neutronclient/tests/unit/osc/v2/dynamic_routing/fakes.py
    2019-09-13 19:00:21.000000000 +0200
+++ 
new/python-neutronclient-7.1.1/neutronclient/tests/unit/osc/v2/dynamic_routing/fakes.py
     2020-04-08 14:05:32.000000000 +0200
@@ -57,7 +57,7 @@
 
         """
         bgp_speakers = []
-        for i in range(0, count):
+        for i in range(count):
             bgp_speaker = FakeBgpSpeaker.create_one_bgp_speaker(attrs)
             bgp_speakers.append(bgp_speaker)
 
@@ -89,8 +89,42 @@
     def create_bgp_peers(attrs=None, count=1):
         """Create one or multiple fake bgp peers."""
         bgp_peers = []
-        for i in range(0, count):
+        for i in range(count):
             bgp_peer = FakeBgpPeer.create_one_bgp_peer(attrs)
             bgp_peers.append(bgp_peer)
 
         return {'bgp_peers': bgp_peers}
+
+
+class FakeDRAgent(object):
+    """Fake one or more dynamic routing agents."""
+
+    @staticmethod
+    def create_one_dragent(attrs=None):
+        attrs = attrs or {}
+        # Set default attributes.
+        dragent_attrs = {
+            'binary': 'neutron-bgp-dragent',
+            'admin_state_up': True,
+            'alive': True,
+            'topic': 'bgp_dragent',
+            'host': 'network-' + uuid.uuid4().hex,
+            'name': 'bgp-dragent-' + uuid.uuid4().hex,
+            'agent_type': 'BGP dynamic routing agent',
+            'id': uuid.uuid4().hex,
+        }
+
+        # Overwrite default attributes.
+        dragent_attrs.update(attrs)
+
+        return copy.deepcopy(dragent_attrs)
+
+    @staticmethod
+    def create_dragents(attrs=None, count=1):
+        """Create one or multiple fake dynamic routing agents."""
+        agents = []
+        for i in range(count):
+            agent = FakeDRAgent.create_one_dragent(attrs)
+            agents.append(agent)
+
+        return {'agents': agents}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-neutronclient-6.14.0/neutronclient/tests/unit/osc/v2/dynamic_routing/test_bgp_dragent.py
 
new/python-neutronclient-7.1.1/neutronclient/tests/unit/osc/v2/dynamic_routing/test_bgp_dragent.py
--- 
old/python-neutronclient-6.14.0/neutronclient/tests/unit/osc/v2/dynamic_routing/test_bgp_dragent.py
 1970-01-01 01:00:00.000000000 +0100
+++ 
new/python-neutronclient-7.1.1/neutronclient/tests/unit/osc/v2/dynamic_routing/test_bgp_dragent.py
  2020-04-08 14:05:32.000000000 +0200
@@ -0,0 +1,123 @@
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+#
+import mock
+
+from neutronclient.osc.v2.dynamic_routing import bgp_dragent
+from neutronclient.tests.unit.osc.v2.dynamic_routing import fakes
+
+
+class TestAddBgpSpeakerToDRAgent(fakes.TestNeutronDynamicRoutingOSCV2):
+    _bgp_speaker = fakes.FakeBgpSpeaker.create_one_bgp_speaker()
+    _bgp_dragent = fakes.FakeDRAgent.create_one_dragent()
+    _bgp_speaker_id = _bgp_speaker['id']
+    _bgp_dragent_id = _bgp_dragent['id']
+
+    def setUp(self):
+        super(TestAddBgpSpeakerToDRAgent, self).setUp()
+
+        # Get the command object to test
+        self.cmd = bgp_dragent.AddBgpSpeakerToDRAgent(self.app, self.namespace)
+
+    def test_add_bgp_speaker_to_dragent(self):
+        arglist = [
+            self._bgp_dragent_id,
+            self._bgp_speaker_id,
+        ]
+        verifylist = [
+            ('dragent_id', self._bgp_dragent_id),
+            ('bgp_speaker', self._bgp_speaker_id),
+        ]
+        parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+        with mock.patch.object(self.neutronclient,
+                               "add_bgp_speaker_to_dragent",
+                               return_value=None):
+
+            result = self.cmd.take_action(parsed_args)
+            self.neutronclient.add_bgp_speaker_to_dragent.\
+                assert_called_once_with(
+                    self._bgp_dragent_id,
+                    {'bgp_speaker_id': self._bgp_speaker_id})
+            self.assertIsNone(result)
+
+
+class TestRemoveBgpSpeakerFromDRAgent(fakes.TestNeutronDynamicRoutingOSCV2):
+    _bgp_speaker = fakes.FakeBgpSpeaker.create_one_bgp_speaker()
+    _bgp_dragent = fakes.FakeDRAgent.create_one_dragent()
+    _bgp_speaker_id = _bgp_speaker['id']
+    _bgp_dragent_id = _bgp_dragent['id']
+
+    def setUp(self):
+        super(TestRemoveBgpSpeakerFromDRAgent, self).setUp()
+
+        # Get the command object to test
+        self.cmd = bgp_dragent.RemoveBgpSpeakerFromDRAgent(
+            self.app, self.namespace)
+
+    def test_remove_bgp_speaker_from_dragent(self):
+        arglist = [
+            self._bgp_dragent_id,
+            self._bgp_speaker_id,
+        ]
+        verifylist = [
+            ('dragent_id', self._bgp_dragent_id),
+            ('bgp_speaker', self._bgp_speaker_id),
+        ]
+        parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+        with mock.patch.object(self.neutronclient,
+                               "remove_bgp_speaker_from_dragent",
+                               return_value=None):
+            result = self.cmd.take_action(parsed_args)
+            self.neutronclient.remove_bgp_speaker_from_dragent.\
+                assert_called_once_with(self._bgp_dragent_id,
+                                        self._bgp_speaker_id)
+            self.assertIsNone(result)
+
+
+class TestListDRAgentsHostingBgpSpeaker(fakes.TestNeutronDynamicRoutingOSCV2):
+    _bgp_speaker = fakes.FakeBgpSpeaker.create_one_bgp_speaker()
+    _bgp_speaker_id = _bgp_speaker['id']
+    attrs = {'bgp_speaker_id': _bgp_speaker_id}
+    _bgp_dragents = fakes.FakeDRAgent.create_dragents(attrs)
+    columns = ('ID', 'Host', 'State', 'Alive')
+    data = [(_bgp_dragent['id'],
+             _bgp_dragent['host'],
+             _bgp_dragent['admin_state_up'],
+             ':-)' if _bgp_dragent['alive'] else 'XXX')
+            for _bgp_dragent in _bgp_dragents['agents']]
+
+    def setUp(self):
+        super(TestListDRAgentsHostingBgpSpeaker, self).setUp()
+
+        # Get the command object to test
+        self.cmd = bgp_dragent.ListDRAgent(self.app, self.namespace)
+
+    def test_list_dragents_hosting_bgp_speaker(self):
+        arglist = [
+            '--bgp-speaker', self._bgp_speaker_id,
+        ]
+        verifylist = [
+            ('bgp_speaker', self._bgp_speaker_id),
+        ]
+        parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+        with mock.patch.object(self.neutronclient,
+                               "list_dragents_hosting_bgp_speaker",
+                               return_value=self._bgp_dragents):
+            columns, data = self.cmd.take_action(parsed_args)
+            attrs = {'bgp_speaker': self._bgp_speaker_id}
+            self.neutronclient.list_dragents_hosting_bgp_speaker.\
+                assert_called_once_with(**attrs)
+            self.assertEqual(self.columns, columns)
+            self.assertListEqual(self.data, list(data))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-neutronclient-6.14.0/neutronclient/tests/unit/osc/v2/fwaas/common.py 
new/python-neutronclient-7.1.1/neutronclient/tests/unit/osc/v2/fwaas/common.py
--- 
old/python-neutronclient-6.14.0/neutronclient/tests/unit/osc/v2/fwaas/common.py 
    2019-09-13 19:00:21.000000000 +0200
+++ 
new/python-neutronclient-7.1.1/neutronclient/tests/unit/osc/v2/fwaas/common.py  
    2020-04-08 14:05:32.000000000 +0200
@@ -120,20 +120,6 @@
             target, {self.res: {'shared': True}})
         self.assertIsNone(result)
 
-    def test_set_public(self):
-        target = self.resource['id']
-        arglist = [target, '--public']
-        verifylist = [
-            (self.res, target),
-            ('public', True),
-        ]
-        parsed_args = self.check_parser(self.cmd, arglist, verifylist)
-        result = self.cmd.take_action(parsed_args)
-
-        self.mocked.assert_called_once_with(
-            target, {self.res: {'shared': True}})
-        self.assertIsNone(result)
-
     def test_set_duplicate_shared(self):
         target = self.resource['id']
         arglist = [target, '--share', '--share']
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-neutronclient-6.14.0/neutronclient/tests/unit/osc/v2/logging/test_network_log.py
 
new/python-neutronclient-7.1.1/neutronclient/tests/unit/osc/v2/logging/test_network_log.py
--- 
old/python-neutronclient-6.14.0/neutronclient/tests/unit/osc/v2/logging/test_network_log.py
 2019-09-13 19:00:21.000000000 +0200
+++ 
new/python-neutronclient-7.1.1/neutronclient/tests/unit/osc/v2/logging/test_network_log.py
  2020-04-08 14:05:32.000000000 +0200
@@ -139,8 +139,8 @@
         self.mocked = self.neutronclient.create_network_log
         self.cmd = network_log.CreateNetworkLog(self.app, self.namespace)
         loggables = {
-            "loggable_resources": [{"type": RES_TYPE_SG,
-                                    "type": RES_TYPE_FWG}]
+            "loggable_resources": [{"type": RES_TYPE_SG},
+                                   {"type": RES_TYPE_FWG}]
         }
         self.neutronclient.list_network_loggable_resources = mock.Mock(
             return_value=loggables)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-neutronclient-6.14.0/neutronclient/tests/unit/qos/test_cli20_rule.py 
new/python-neutronclient-7.1.1/neutronclient/tests/unit/qos/test_cli20_rule.py
--- 
old/python-neutronclient-6.14.0/neutronclient/tests/unit/qos/test_cli20_rule.py 
    2019-09-13 19:00:21.000000000 +0200
+++ 
new/python-neutronclient-7.1.1/neutronclient/tests/unit/qos/test_cli20_rule.py  
    2020-04-08 14:05:32.000000000 +0200
@@ -33,9 +33,9 @@
         # qos_rule_types.
         resources = 'rule_types'
         cmd_resources = 'qos_rule_types'
-        response_contents = [{'type': 'bandwidth_limit',
-                              'type': 'dscp_marking',
-                              'type': 'minimum_bandwidth'}]
+        response_contents = [{'type': 'bandwidth_limit'},
+                             {'type': 'dscp_marking'},
+                             {'type': 'minimum_bandwidth'}]
 
         cmd = qos_rule.ListQoSRuleTypes(test_cli20.MyApp(sys.stdout),
                                         None)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-neutronclient-6.14.0/neutronclient/tests/unit/test_exceptions.py 
new/python-neutronclient-7.1.1/neutronclient/tests/unit/test_exceptions.py
--- old/python-neutronclient-6.14.0/neutronclient/tests/unit/test_exceptions.py 
2019-09-13 19:00:21.000000000 +0200
+++ new/python-neutronclient-7.1.1/neutronclient/tests/unit/test_exceptions.py  
2020-04-08 14:05:32.000000000 +0200
@@ -12,7 +12,9 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import fixtures
+import sys
+
+import mock
 from oslo_utils import encodeutils
 import six
 import testtools
@@ -30,12 +32,11 @@
         multibyte_unicode_string = u'\uff21\uff22\uff23'
         e = TestException(reason=multibyte_unicode_string)
 
-        fixture = fixtures.StringStream('stdout')
-        self.useFixture(fixture)
-        with fixtures.MonkeyPatch('sys.stdout', fixture.stream):
+        with mock.patch.object(sys, 'stdout') as mock_stdout:
             print(e)
-        self.assertEqual('Exception with %s' % multibyte_unicode_string,
-                         fixture.getDetails().get('stdout').as_text())
+
+        exc_str = 'Exception with %s' % multibyte_unicode_string
+        mock_stdout.assert_has_calls([mock.call.write(exc_str)])
 
     def test_exception_message_with_encoded_unicode(self):
         class TestException(exceptions.NeutronException):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-neutronclient-6.14.0/neutronclient/v2_0/client.py 
new/python-neutronclient-7.1.1/neutronclient/v2_0/client.py
--- old/python-neutronclient-6.14.0/neutronclient/v2_0/client.py        
2019-09-13 19:00:26.000000000 +0200
+++ new/python-neutronclient-7.1.1/neutronclient/v2_0/client.py 2020-04-08 
14:05:32.000000000 +0200
@@ -492,6 +492,9 @@
     network_path = "/networks/%s"
     ports_path = "/ports"
     port_path = "/ports/%s"
+    port_bindings_path = "/ports/%s/bindings"
+    port_binding_path = "/ports/%s/bindings/%s"
+    port_binding_path_activate = "/ports/%s/bindings/%s/activate"
     subnets_path = "/subnets"
     subnet_path = "/subnets/%s"
     onboard_network_subnets_path = "/subnetpools/%s/onboard_network_subnets"
@@ -811,6 +814,28 @@
         """Deletes the specified port."""
         return self.delete(self.port_path % (port))
 
+    def create_port_binding(self, port_id, body=None):
+        """Creates a new port binding."""
+        return self.post(self.port_bindings_path % port_id, body=body)
+
+    def delete_port_binding(self, port_id, host_id):
+        """Deletes the specified port binding."""
+        return self.delete(self.port_binding_path % (port_id, host_id))
+
+    def show_port_binding(self, port_id, host_id, **_params):
+        """Fetches information for a certain port binding."""
+        return self.get(self.port_binding_path % (port_id, host_id),
+                        params=_params)
+
+    def list_port_bindings(self, port_id, retrieve_all=True, **_params):
+        """Fetches a list of all bindings for a certain port."""
+        return self.list('port_bindings', self.port_bindings_path % port_id,
+                         retrieve_all, **_params)
+
+    def activate_port_binding(self, port_id, host_id):
+        """Activates a port binding."""
+        return self.put(self.port_binding_path_activate % (port_id, host_id))
+
     def list_networks(self, retrieve_all=True, **_params):
         """Fetches a list of all networks for a project."""
         # Pass filters in "params" argument to do_request
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-neutronclient-6.14.0/playbooks/legacy/grenade-dsvm-neutron-libs/post.yaml
 
new/python-neutronclient-7.1.1/playbooks/legacy/grenade-dsvm-neutron-libs/post.yaml
--- 
old/python-neutronclient-6.14.0/playbooks/legacy/grenade-dsvm-neutron-libs/post.yaml
        1970-01-01 01:00:00.000000000 +0100
+++ 
new/python-neutronclient-7.1.1/playbooks/legacy/grenade-dsvm-neutron-libs/post.yaml
 2020-04-08 14:05:32.000000000 +0200
@@ -0,0 +1,15 @@
+- hosts: primary
+  tasks:
+
+    - name: Copy files from {{ ansible_user_dir }}/workspace/ on node
+      synchronize:
+        src: '{{ ansible_user_dir }}/workspace/'
+        dest: '{{ zuul.executor.log_root }}'
+        mode: pull
+        copy_links: true
+        verify_host: true
+        rsync_opts:
+          - --include=/logs/**
+          - --include=*/
+          - --exclude=*
+          - --prune-empty-dirs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-neutronclient-6.14.0/playbooks/legacy/grenade-dsvm-neutron-libs/run.yaml
 
new/python-neutronclient-7.1.1/playbooks/legacy/grenade-dsvm-neutron-libs/run.yaml
--- 
old/python-neutronclient-6.14.0/playbooks/legacy/grenade-dsvm-neutron-libs/run.yaml
 1970-01-01 01:00:00.000000000 +0100
+++ 
new/python-neutronclient-7.1.1/playbooks/legacy/grenade-dsvm-neutron-libs/run.yaml
  2020-04-08 14:05:32.000000000 +0200
@@ -0,0 +1,52 @@
+- hosts: all
+  name: Autoconverted job legacy-grenade-dsvm-neutron-libs from old job 
gate-grenade-dsvm-neutron-libs-ubuntu-xenial-nv
+  tasks:
+
+    - name: Ensure legacy workspace directory
+      file:
+        path: '{{ ansible_user_dir }}/workspace'
+        state: directory
+
+    - shell:
+        cmd: |
+          set -e
+          set -x
+          cat > clonemap.yaml << EOF
+          clonemap:
+            - name: openstack/devstack-gate
+              dest: devstack-gate
+          EOF
+          /usr/zuul-env/bin/zuul-cloner -m clonemap.yaml --cache-dir /opt/git \
+              https://opendev.org \
+              openstack/devstack-gate
+        executable: /bin/bash
+        chdir: '{{ ansible_user_dir }}/workspace'
+      environment: '{{ zuul | zuul_legacy_vars }}'
+
+    - shell:
+        cmd: |
+          set -e
+          set -x
+          export PROJECTS="openstack/grenade $PROJECTS"
+          export DEVSTACK_PROJECT_FROM_GIT="os-client-config"
+          export DEVSTACK_PROJECT_FROM_GIT+=",keystoneauth"
+          export DEVSTACK_PROJECT_FROM_GIT+=",python-novaclient"
+          export DEVSTACK_PROJECT_FROM_GIT+=",python-keystoneclient"
+          export DEVSTACK_PROJECT_FROM_GIT+=",python-glanceclient"
+          export DEVSTACK_PROJECT_FROM_GIT+=",python-cinderclient"
+          export DEVSTACK_PROJECT_FROM_GIT+=",python-neutronclient"
+          export DEVSTACK_PROJECT_FROM_GIT+=",python-ironicclient"
+          export PYTHONUNBUFFERED=true
+          export DEVSTACK_GATE_TEMPEST=1
+          export DEVSTACK_GATE_GRENADE=pullup
+          export DEVSTACK_GATE_USE_PYTHON3=True
+          export DEVSTACK_GATE_NEUTRON=1
+          export BRANCH_OVERRIDE=default
+          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
+              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
+          fi
+          cp devstack-gate/devstack-vm-gate-wrap.sh 
./safe-devstack-vm-gate-wrap.sh
+          ./safe-devstack-vm-gate-wrap.sh
+        executable: /bin/bash
+        chdir: '{{ ansible_user_dir }}/workspace'
+      environment: '{{ zuul | zuul_legacy_vars }}'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-neutronclient-6.14.0/python_neutronclient.egg-info/PKG-INFO 
new/python-neutronclient-7.1.1/python_neutronclient.egg-info/PKG-INFO
--- old/python-neutronclient-6.14.0/python_neutronclient.egg-info/PKG-INFO      
2019-09-13 19:01:12.000000000 +0200
+++ new/python-neutronclient-7.1.1/python_neutronclient.egg-info/PKG-INFO       
2020-04-08 14:06:45.000000000 +0200
@@ -1,6 +1,6 @@
-Metadata-Version: 1.1
+Metadata-Version: 1.2
 Name: python-neutronclient
-Version: 6.14.0
+Version: 7.1.1
 Summary: CLI and Client Library for OpenStack Networking
 Home-page: https://docs.openstack.org/python-neutronclient/latest/
 Author: OpenStack Networking Project
@@ -53,8 +53,9 @@
 Classifier: License :: OSI Approved :: Apache Software License
 Classifier: Operating System :: POSIX :: Linux
 Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.7
+Classifier: Programming Language :: Python :: Implementation :: CPython
+Classifier: Programming Language :: Python :: 3 :: Only
 Classifier: Programming Language :: Python :: 3
 Classifier: Programming Language :: Python :: 3.6
 Classifier: Programming Language :: Python :: 3.7
+Requires-Python: >=3.6
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-neutronclient-6.14.0/python_neutronclient.egg-info/SOURCES.txt 
new/python-neutronclient-7.1.1/python_neutronclient.egg-info/SOURCES.txt
--- old/python-neutronclient-6.14.0/python_neutronclient.egg-info/SOURCES.txt   
2019-09-13 19:01:12.000000000 +0200
+++ new/python-neutronclient-7.1.1/python_neutronclient.egg-info/SOURCES.txt    
2020-04-08 14:06:46.000000000 +0200
@@ -237,6 +237,7 @@
 neutronclient/tests/unit/osc/v2/fakes.py
 neutronclient/tests/unit/osc/v2/dynamic_routing/__init__.py
 neutronclient/tests/unit/osc/v2/dynamic_routing/fakes.py
+neutronclient/tests/unit/osc/v2/dynamic_routing/test_bgp_dragent.py
 neutronclient/tests/unit/osc/v2/dynamic_routing/test_bgp_peer.py
 neutronclient/tests/unit/osc/v2/dynamic_routing/test_bgp_speaker.py
 neutronclient/tests/unit/osc/v2/fwaas/__init__.py
@@ -289,6 +290,8 @@
 neutronclient/tests/unit/vpn/test_utils.py
 neutronclient/v2_0/__init__.py
 neutronclient/v2_0/client.py
+playbooks/legacy/grenade-dsvm-neutron-libs/post.yaml
+playbooks/legacy/grenade-dsvm-neutron-libs/run.yaml
 python_neutronclient.egg-info/PKG-INFO
 python_neutronclient.egg-info/SOURCES.txt
 python_neutronclient.egg-info/dependency_links.txt
@@ -320,10 +323,12 @@
 releasenotes/notes/bug-1676922-81341b70bc6f055a.yaml
 releasenotes/notes/bulk-delete-support-94a353db08efec8d.yaml
 releasenotes/notes/default-subnetpool-support-c0d34870e9d3e814.yaml
+releasenotes/notes/deprecate-bgp-speaker-show-dragents-2fcce99cf6bb5b60.yaml
 releasenotes/notes/deprecate-cli-7be1123817969439.yaml
 releasenotes/notes/direct-physical-vnic-port-create-736d8b2600faf22b.yaml
 releasenotes/notes/docs-improvements-17e31babe38e2962.yaml
 releasenotes/notes/drop-nuage-commands-df10aab6ccd77ed2.yaml
+releasenotes/notes/drop-python-2.7-f615ebae463b2143.yaml
 releasenotes/notes/drop-xml-support-41babecb1784d996.yaml
 releasenotes/notes/dscp_qos-4a26d3c0363624b0.yaml
 releasenotes/notes/extraroute-atomic-b11919d8e33b0d92.yaml
@@ -336,6 +341,7 @@
 releasenotes/notes/log-request-id-64bef955b8292c18.yaml
 releasenotes/notes/network-ip-availability-ac9a462f42fe9db4.yaml
 releasenotes/notes/osprofiler-support-9ba539761ae437e9.yaml
+releasenotes/notes/port-bindings-c3f36bd76ece0a71.yaml
 releasenotes/notes/qos_minimum_bandwidth-dc4adb23c51de30b.yaml
 releasenotes/notes/quota-update-for-LB-b21e7bc9e4a10f3e.yaml
 releasenotes/notes/quota-update-for-rbac-192a8e65bf481941.yaml
@@ -343,6 +349,7 @@
 releasenotes/notes/remote_fwg-0f5362e5be8b2e84.yaml
 releasenotes/notes/remove-case-dependency-773ccb3237c38e81.yaml
 releasenotes/notes/remove-deprecated-option-b53f5d7e6a16ce95.yaml
+releasenotes/notes/remove-public-and-private-parameters-d683e7c30ecedc3b.yaml
 releasenotes/notes/return-request-id-to-caller-15b1d23a4ddc27a3.yaml
 releasenotes/notes/sfc-tap-service-function-support-a05242f25f79066b.yaml
 releasenotes/notes/show-tenant-id-admin-listing-dc13ee7eb889d418.yaml
@@ -366,6 +373,7 @@
 releasenotes/source/queens.rst
 releasenotes/source/rocky.rst
 releasenotes/source/stein.rst
+releasenotes/source/train.rst
 releasenotes/source/unreleased.rst
 releasenotes/source/_static/.placeholder
 releasenotes/source/_templates/.placeholder
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-neutronclient-6.14.0/python_neutronclient.egg-info/entry_points.txt 
new/python-neutronclient-7.1.1/python_neutronclient.egg-info/entry_points.txt
--- 
old/python-neutronclient-6.14.0/python_neutronclient.egg-info/entry_points.txt  
    2019-09-13 19:01:12.000000000 +0200
+++ 
new/python-neutronclient-7.1.1/python_neutronclient.egg-info/entry_points.txt   
    2020-04-08 14:06:45.000000000 +0200
@@ -260,6 +260,7 @@
 
 [openstack.neutronclient.v2]
 bgp_dragent_add_speaker = 
neutronclient.osc.v2.dynamic_routing.bgp_dragent:AddBgpSpeakerToDRAgent
+bgp_dragent_list = neutronclient.osc.v2.dynamic_routing.bgp_dragent:ListDRAgent
 bgp_dragent_remove_speaker = 
neutronclient.osc.v2.dynamic_routing.bgp_dragent:RemoveBgpSpeakerFromDRAgent
 bgp_peer_create = neutronclient.osc.v2.dynamic_routing.bgp_peer:CreateBgpPeer
 bgp_peer_delete = neutronclient.osc.v2.dynamic_routing.bgp_peer:DeleteBgpPeer
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-neutronclient-6.14.0/python_neutronclient.egg-info/pbr.json 
new/python-neutronclient-7.1.1/python_neutronclient.egg-info/pbr.json
--- old/python-neutronclient-6.14.0/python_neutronclient.egg-info/pbr.json      
2019-09-13 19:01:12.000000000 +0200
+++ new/python-neutronclient-7.1.1/python_neutronclient.egg-info/pbr.json       
2020-04-08 14:06:45.000000000 +0200
@@ -1 +1 @@
-{"git_version": "115f60f", "is_release": true}
\ No newline at end of file
+{"git_version": "ac04e5d", "is_release": true}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-neutronclient-6.14.0/releasenotes/notes/deprecate-bgp-speaker-show-dragents-2fcce99cf6bb5b60.yaml
 
new/python-neutronclient-7.1.1/releasenotes/notes/deprecate-bgp-speaker-show-dragents-2fcce99cf6bb5b60.yaml
--- 
old/python-neutronclient-6.14.0/releasenotes/notes/deprecate-bgp-speaker-show-dragents-2fcce99cf6bb5b60.yaml
        1970-01-01 01:00:00.000000000 +0100
+++ 
new/python-neutronclient-7.1.1/releasenotes/notes/deprecate-bgp-speaker-show-dragents-2fcce99cf6bb5b60.yaml
 2020-04-08 14:05:32.000000000 +0200
@@ -0,0 +1,10 @@
+---
+deprecations:
+  - |
+    The ``openstack bgp speaker show dragents`` CLI is deprecated and
+    will be removed in the future. Use ``openstack bgp dragent list
+    --bgp-speaker <bgp-speaker>`` CLI instead.
+features:
+  - |
+    The ``openstack bgp dragent list`` CLI is added to support showing
+    the list of dynamic routing agents.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-neutronclient-6.14.0/releasenotes/notes/drop-python-2.7-f615ebae463b2143.yaml
 
new/python-neutronclient-7.1.1/releasenotes/notes/drop-python-2.7-f615ebae463b2143.yaml
--- 
old/python-neutronclient-6.14.0/releasenotes/notes/drop-python-2.7-f615ebae463b2143.yaml
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/python-neutronclient-7.1.1/releasenotes/notes/drop-python-2.7-f615ebae463b2143.yaml
     2020-04-08 14:05:32.000000000 +0200
@@ -0,0 +1,5 @@
+---
+upgrade:
+  - |
+    Python 2.7 support has been dropped. The minimum version of Python now
+    supported by python-neutronclient is Python 3.6.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-neutronclient-6.14.0/releasenotes/notes/port-bindings-c3f36bd76ece0a71.yaml
 
new/python-neutronclient-7.1.1/releasenotes/notes/port-bindings-c3f36bd76ece0a71.yaml
--- 
old/python-neutronclient-6.14.0/releasenotes/notes/port-bindings-c3f36bd76ece0a71.yaml
      1970-01-01 01:00:00.000000000 +0100
+++ 
new/python-neutronclient-7.1.1/releasenotes/notes/port-bindings-c3f36bd76ece0a71.yaml
       2020-04-08 14:05:32.000000000 +0200
@@ -0,0 +1,5 @@
+---
+features:
+  - |
+    New client methods: ``create_port_binding``, ``delete_port_binding``,
+    ``show_port_binding``, ``list_port_bindings`` and 
``activate_port_binding``.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-neutronclient-6.14.0/releasenotes/notes/relnotes-from-3.0.0-d7306f5af5e3868d.yaml
 
new/python-neutronclient-7.1.1/releasenotes/notes/relnotes-from-3.0.0-d7306f5af5e3868d.yaml
--- 
old/python-neutronclient-6.14.0/releasenotes/notes/relnotes-from-3.0.0-d7306f5af5e3868d.yaml
        2019-09-13 19:00:21.000000000 +0200
+++ 
new/python-neutronclient-7.1.1/releasenotes/notes/relnotes-from-3.0.0-d7306f5af5e3868d.yaml
 2020-04-08 14:05:32.000000000 +0200
@@ -2,7 +2,7 @@
 features:
   - Support os-client-config. OS_CLOUD environment variable is used for
     selecting named cloud configuration.
-  - Support keystoneauth1 library which brings us better kyestone v3 support.
+  - Support keystoneauth1 library which brings us better keystone v3 support.
   - Client command extension now supports a child resource.
   - New CLI for VPNaaS multiple local subnets.
   - New CLI for VPNaaS endpoint group API.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-neutronclient-6.14.0/releasenotes/notes/remove-public-and-private-parameters-d683e7c30ecedc3b.yaml
 
new/python-neutronclient-7.1.1/releasenotes/notes/remove-public-and-private-parameters-d683e7c30ecedc3b.yaml
--- 
old/python-neutronclient-6.14.0/releasenotes/notes/remove-public-and-private-parameters-d683e7c30ecedc3b.yaml
       1970-01-01 01:00:00.000000000 +0100
+++ 
new/python-neutronclient-7.1.1/releasenotes/notes/remove-public-and-private-parameters-d683e7c30ecedc3b.yaml
        2020-04-08 14:05:32.000000000 +0200
@@ -0,0 +1,6 @@
+---
+upgrade:
+  - |
+    The deprecated options ``--public`` and ``--private`` were
+    dropped in FWaaS v2 related commands. Use ``--share`` and
+    ``--no-share`` instead.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-neutronclient-6.14.0/releasenotes/source/conf.py 
new/python-neutronclient-7.1.1/releasenotes/source/conf.py
--- old/python-neutronclient-6.14.0/releasenotes/source/conf.py 2019-09-13 
19:00:21.000000000 +0200
+++ new/python-neutronclient-7.1.1/releasenotes/source/conf.py  2020-04-08 
14:05:32.000000000 +0200
@@ -46,7 +46,6 @@
 repository_name = 'openstack/python-neutronclient'
 bug_project = 'python-neutronclient'
 bug_tag = 'doc'
-html_last_updated_fmt = '%Y-%m-%d %H:%M'
 
 # Add any paths that contain templates here, relative to this directory.
 templates_path = ['_templates']
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-neutronclient-6.14.0/releasenotes/source/index.rst 
new/python-neutronclient-7.1.1/releasenotes/source/index.rst
--- old/python-neutronclient-6.14.0/releasenotes/source/index.rst       
2019-09-13 19:00:21.000000000 +0200
+++ new/python-neutronclient-7.1.1/releasenotes/source/index.rst        
2020-04-08 14:05:32.000000000 +0200
@@ -6,6 +6,7 @@
    :maxdepth: 1
 
    unreleased
+   train
    stein
    rocky
    queens
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-neutronclient-6.14.0/releasenotes/source/train.rst 
new/python-neutronclient-7.1.1/releasenotes/source/train.rst
--- old/python-neutronclient-6.14.0/releasenotes/source/train.rst       
1970-01-01 01:00:00.000000000 +0100
+++ new/python-neutronclient-7.1.1/releasenotes/source/train.rst        
2020-04-08 14:05:32.000000000 +0200
@@ -0,0 +1,6 @@
+==========================
+Train Series Release Notes
+==========================
+
+.. release-notes::
+   :branch: stable/train
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-neutronclient-6.14.0/setup.cfg 
new/python-neutronclient-7.1.1/setup.cfg
--- old/python-neutronclient-6.14.0/setup.cfg   2019-09-13 19:01:12.000000000 
+0200
+++ new/python-neutronclient-7.1.1/setup.cfg    2020-04-08 14:06:46.000000000 
+0200
@@ -6,6 +6,7 @@
 author = OpenStack Networking Project
 author-email = openstack-disc...@lists.openstack.org
 home-page = https://docs.openstack.org/python-neutronclient/latest/
+python-requires = >=3.6
 classifier = 
        Environment :: OpenStack
        Intended Audience :: Developers
@@ -14,8 +15,8 @@
        License :: OSI Approved :: Apache Software License
        Operating System :: POSIX :: Linux
        Programming Language :: Python
-       Programming Language :: Python :: 2
-       Programming Language :: Python :: 2.7
+       Programming Language :: Python :: Implementation :: CPython
+       Programming Language :: Python :: 3 :: Only
        Programming Language :: Python :: 3
        Programming Language :: Python :: 3.6
        Programming Language :: Python :: 3.7
@@ -24,10 +25,6 @@
 packages = 
        neutronclient
 
-[global]
-setup-hooks = 
-       pbr.hooks.setup_hook
-
 [entry_points]
 console_scripts = 
        neutron = neutronclient.shell:main
@@ -70,6 +67,7 @@
        sfc_service_graph_show = 
neutronclient.osc.v2.sfc.sfc_service_graph:ShowSfcServiceGraph
        
        bgp_dragent_add_speaker = 
neutronclient.osc.v2.dynamic_routing.bgp_dragent:AddBgpSpeakerToDRAgent
+       bgp_dragent_list = 
neutronclient.osc.v2.dynamic_routing.bgp_dragent:ListDRAgent
        bgp_dragent_remove_speaker = 
neutronclient.osc.v2.dynamic_routing.bgp_dragent:RemoveBgpSpeakerFromDRAgent
        bgp_peer_create = 
neutronclient.osc.v2.dynamic_routing.bgp_peer:CreateBgpPeer
        bgp_peer_delete = 
neutronclient.osc.v2.dynamic_routing.bgp_peer:DeleteBgpPeer
@@ -454,9 +452,6 @@
        vpn-ikepolicy-update = 
neutronclient.neutron.v2_0.vpn.ikepolicy:UpdateIKEPolicy
        vpn-ikepolicy-delete = 
neutronclient.neutron.v2_0.vpn.ikepolicy:DeleteIKEPolicy
 
-[wheel]
-universal = 1
-
 [extract_messages]
 keywords = _ gettext ngettext l_ lazy_gettext
 mapping_file = babel.cfg
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-neutronclient-6.14.0/setup.py 
new/python-neutronclient-7.1.1/setup.py
--- old/python-neutronclient-6.14.0/setup.py    2019-09-13 19:00:21.000000000 
+0200
+++ new/python-neutronclient-7.1.1/setup.py     2020-04-08 14:05:32.000000000 
+0200
@@ -13,17 +13,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# THIS FILE IS MANAGED BY THE GLOBAL REQUIREMENTS REPO - DO NOT EDIT
 import setuptools
 
-# In python < 2.7.4, a lazy loading of package `pbr` will break
-# setuptools if some other modules registered functions in `atexit`.
-# solution from: http://bugs.python.org/issue15881#msg170215
-try:
-    import multiprocessing  # noqa
-except ImportError:
-    pass
-
 setuptools.setup(
     setup_requires=['pbr>=2.0.0'],
     pbr=True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-neutronclient-6.14.0/tox.ini 
new/python-neutronclient-7.1.1/tox.ini
--- old/python-neutronclient-6.14.0/tox.ini     2019-09-13 19:00:21.000000000 
+0200
+++ new/python-neutronclient-7.1.1/tox.ini      2020-04-08 14:05:32.000000000 
+0200
@@ -1,10 +1,11 @@
 [tox]
-# py3 first to avoid .testrepository incompatibility
-envlist = py37,py27,pypy,pep8
+envlist = py37,pep8
 minversion = 2.3.2
 skipsdist = True
+ignore_basepython_conflict = True
 
 [testenv]
+basepython = python3
 setenv = VIRTUAL_ENV={envdir}
          LANG=en_US.UTF-8
          LANGUAGE=en_US:en
@@ -25,24 +26,20 @@
 whitelist_externals = sh
 
 [testenv:pep8]
-basepython = python3
 commands =
   flake8
   {[testenv:bandit]commands}
 distribute = false
 
 [testenv:venv]
-basepython = python3
 commands = {posargs}
 
 [testenv:functional]
-basepython = python3
 setenv =
   OS_TEST_PATH = ./neutronclient/tests/functional
   OS_NEUTRONCLIENT_EXEC_DIR = {envdir}/bin
 
 [testenv:cover]
-basepython = python3
 setenv =
     {[testenv]setenv}
     PYTHON=coverage run --source neutronclient --parallel-mode
@@ -54,12 +51,19 @@
     coverage report
 
 [testenv:docs]
-basepython = python3
 deps = -r{toxinidir}/doc/requirements.txt
 commands = sphinx-build -W -b html doc/source doc/build/html
 
+[testenv:pdf-docs]
+envdir = {toxworkdir}/docs
+deps = {[testenv:docs]deps}
+whitelist_externals =
+  make
+commands =
+  sphinx-build -W -b latex doc/source doc/build/pdf
+  make -C doc/build/pdf
+
 [testenv:releasenotes]
-basepython = python3
 deps = -r{toxinidir}/doc/requirements.txt
 commands = sphinx-build -a -E -d releasenotes/build/doctrees -b html 
releasenotes/source releasenotes/build/html
 
@@ -72,13 +76,11 @@
 enable-extensions=H904
 
 [testenv:bandit]
-basepython = python3
 # B303: blacklist calls: md5, sha1
 deps = -r{toxinidir}/test-requirements.txt
 commands = bandit -r neutronclient -x tests -n5 -s B303
 
 [testenv:lower-constraints]
-basepython = python3
 deps =
   -c{toxinidir}/lower-constraints.txt
   -r{toxinidir}/test-requirements.txt


Reply via email to