Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-novaclient for 
openSUSE:Factory checked in at 2021-05-10 15:37:32
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-novaclient (Old)
 and      /work/SRC/openSUSE:Factory/.python-novaclient.new.2988 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-novaclient"

Mon May 10 15:37:32 2021 rev:37 rq:889980 version:17.4.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-novaclient/python-novaclient.changes      
2020-10-26 16:16:44.814956051 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-novaclient.new.2988/python-novaclient.changes
    2021-05-10 15:39:43.581479209 +0200
@@ -1,0 +2,17 @@
+Sun May  2 17:17:33 UTC 2021 - cloud-de...@suse.de
+
+- update to version 17.4.0
+  - Cleanup py27 support
+  - Remove the unused coding style modules
+  - Add Python3 wallaby unit tests
+  - Uncap PrettyTable
+  - Fix undesirable raw Python error
+  - Deprecate agent commands and APIs
+  - Update master for stable/victoria
+  - Add support for microversion v2.88
+  - Remove install unnecessary packages
+  - Fix a functional test for 'nova agent-list'
+  - requirements: Remove simplejson
+  - Remove Babel from lower-constraints.txt
+
+-------------------------------------------------------------------

Old:
----
  python-novaclient-17.2.1.tar.gz

New:
----
  python-novaclient-17.4.0.tar.gz

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

Other differences:
------------------
++++++ python-novaclient.spec ++++++
--- /var/tmp/diff_new_pack.adb5l3/_old  2021-05-10 15:39:44.029477375 +0200
+++ /var/tmp/diff_new_pack.adb5l3/_new  2021-05-10 15:39:44.029477375 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package python-novaclient
 #
-# Copyright (c) 2020 SUSE LLC
+# Copyright (c) 2021 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,12 +17,14 @@
 
 
 Name:           python-novaclient
-Version:        17.2.1
+Version:        17.4.0
 Release:        0
+Epoch:          0
 Summary:        Python API and CLI for OpenStack Nova
 License:        Apache-2.0
 Group:          Development/Languages/Python
-Source0:        
https://files.pythonhosted.org/packages/source/p/python-novaclient/python-novaclient-17.2.1.tar.gz
+URL:            https://docs.openstack.org/python-novaclient
+Source0:        
https://files.pythonhosted.org/packages/source/p/python-novaclient/python-novaclient-17.4.0.tar.gz
 BuildRequires:  openssl
 BuildRequires:  openstack-macros
 BuildRequires:  python3-cinderclient
@@ -47,7 +49,6 @@
 
 %package -n python3-novaclient
 Summary:        Python API and CLI for OpenStack Nova
-Group:          Development/Languages/Python
 Requires:       openssl
 Requires:       python3-Babel
 Requires:       python3-PrettyTable >= 0.7.2
@@ -57,7 +58,7 @@
 Requires:       python3-oslo.serialization >= 2.18.0
 Requires:       python3-oslo.utils >= 3.33.0
 Requires:       python3-pbr >= 2.0.0
-Requires:       python3-simplejson >= 3.5.1
+Requires:       python3-simplejson
 Requires:       python3-six
 %if 0%{?suse_version}
 Obsoletes:      python2-novaclient < 16.0.0
@@ -90,7 +91,7 @@
 %build
 %{py3_build}
 
-PBR_VERSION=17.2.1 %sphinx_build -b html -d doc/build/doctrees doc/source 
doc/build/html
+PBR_VERSION=17.4.0 %sphinx_build -b html -d doc/build/doctrees doc/source 
doc/build/html
 # Fix hidden-file-or-dir warnings
 rm -fr doc/build/html/.doctrees doc/build/html/.buildinfo
 

++++++ _service ++++++
--- /var/tmp/diff_new_pack.adb5l3/_old  2021-05-10 15:39:44.061477244 +0200
+++ /var/tmp/diff_new_pack.adb5l3/_new  2021-05-10 15:39:44.061477244 +0200
@@ -1,8 +1,8 @@
 <services>
   <service mode="disabled" name="renderspec">
-    <param 
name="input-template">https://opendev.org/openstack/rpm-packaging/raw/branch/stable/victoria/openstack/python-novaclient/python-novaclient.spec.j2</param>
+    <param 
name="input-template">https://opendev.org/openstack/rpm-packaging/raw/branch/stable/wallaby/openstack/python-novaclient/python-novaclient.spec.j2</param>
     <param name="output-name">python-novaclient.spec</param>
-    <param 
name="requirements">https://opendev.org/openstack/python-novaclient/raw/branch/stable/victoria/requirements.txt</param>
+    <param 
name="requirements">https://opendev.org/openstack/python-novaclient/raw/branch/stable/wallaby/requirements.txt</param>
     <param name="changelog-email">cloud-de...@suse.de</param>
     <param name="changelog-provider">gh,openstack,python-novaclient</param>
   </service>

++++++ python-novaclient-17.2.1.tar.gz -> python-novaclient-17.4.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-novaclient-17.2.1/.zuul.yaml 
new/python-novaclient-17.4.0/.zuul.yaml
--- old/python-novaclient-17.2.1/.zuul.yaml     2020-09-10 11:55:42.000000000 
+0200
+++ new/python-novaclient-17.4.0/.zuul.yaml     2021-03-11 20:47:21.000000000 
+0100
@@ -20,7 +20,7 @@
       - lib-forward-testing-python3
       - openstack-cover-jobs
       - openstack-lower-constraints-jobs
-      - openstack-python3-victoria-jobs
+      - openstack-python3-wallaby-jobs
       - publish-openstack-docs-pti
       - release-notes-jobs-python3
     check:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-novaclient-17.2.1/AUTHORS 
new/python-novaclient-17.4.0/AUTHORS
--- old/python-novaclient-17.2.1/AUTHORS        2020-09-10 11:57:43.000000000 
+0200
+++ new/python-novaclient-17.4.0/AUTHORS        2021-03-11 20:48:00.000000000 
+0100
@@ -346,6 +346,7 @@
 Stanis??aw Pitucha <stanislaw.pitu...@hp.com>
 Stef T <stelf...@internap.com>
 Stephen Finucane <sfinu...@redhat.com>
+Stephen Finucane <stephen...@redhat.com>
 Steven Kaufer <kau...@us.ibm.com>
 Sujitha <sujitha.n...@intel.com>
 Sulochan Acharya <suloc...@gmail.com>
@@ -488,6 +489,7 @@
 shihanzhang <shihanzh...@huawei.com>
 shilpa.devharakar <shilpa.devhara...@nttdata.com>
 shu-mutou <shu-mu...@rf.jp.nec.com>
+songwenping <songwenp...@inspur.com>
 sonu.kumar <sonu.ku...@nectechnologies.in>
 sridhargaddam <sridhar.gad...@enovance.com>
 sunjia <sun...@inspur.com>
@@ -500,6 +502,7 @@
 wangxiyuan <wangxiy...@huawei.com>
 wingwj <win...@gmail.com>
 wu.chunyang <wu.chuny...@99cloud.net>
+wu.shiming <wushim...@yovole.com>
 xiexs <xi...@cn.fujitsu.com>
 yamini sardana <yamini.sard...@tcs.com>
 yanghuichan <yan...@fiberhome.com>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-novaclient-17.2.1/ChangeLog 
new/python-novaclient-17.4.0/ChangeLog
--- old/python-novaclient-17.2.1/ChangeLog      2020-09-10 11:57:43.000000000 
+0200
+++ new/python-novaclient-17.4.0/ChangeLog      2021-03-11 20:48:00.000000000 
+0100
@@ -1,6 +1,26 @@
 CHANGES
 =======
 
+17.4.0
+------
+
+* Add support for microversion v2.88
+* requirements: Remove simplejson
+* Uncap PrettyTable
+
+17.3.0
+------
+
+* Deprecate agent commands and APIs
+* Fix undesirable raw Python error
+* Fix a functional test for 'nova agent-list'
+* Remove Babel from lower-constraints.txt
+* Cleanup py27 support
+* Remove the unused coding style modules
+* Remove install unnecessary packages
+* Add Python3 wallaby unit tests
+* Update master for stable/victoria
+
 17.2.1
 ------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-novaclient-17.2.1/PKG-INFO 
new/python-novaclient-17.4.0/PKG-INFO
--- old/python-novaclient-17.2.1/PKG-INFO       2020-09-10 11:57:43.000000000 
+0200
+++ new/python-novaclient-17.4.0/PKG-INFO       2021-03-11 20:48:00.661249600 
+0100
@@ -1,6 +1,6 @@
 Metadata-Version: 1.2
 Name: python-novaclient
-Version: 17.2.1
+Version: 17.4.0
 Summary: Client library for OpenStack Compute API
 Home-page: https://docs.openstack.org/python-novaclient/latest
 Author: OpenStack
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-novaclient-17.2.1/lower-constraints.txt 
new/python-novaclient-17.4.0/lower-constraints.txt
--- old/python-novaclient-17.2.1/lower-constraints.txt  2020-09-10 
11:55:42.000000000 +0200
+++ new/python-novaclient-17.4.0/lower-constraints.txt  2021-03-11 
20:47:21.000000000 +0100
@@ -1,8 +1,6 @@
 amqp==2.1.1
 appdirs==1.3.0
 asn1crypto==0.23.0
-Babel==2.3.4
-bandit==1.4.0
 cachetools==2.0.0
 cffi==1.14.0
 cliff==2.8.0
@@ -19,13 +17,11 @@
 extras==1.0.0
 fasteners==0.7.0
 fixtures==3.0.0
-flake8==2.5.5
 future==0.16.0
 futurist==1.2.0
 gitdb==0.6.4
 GitPython==1.0.1
 greenlet==0.4.15
-hacking==1.1.0
 idna==2.6
 iso8601==0.1.11
 Jinja2==2.10
@@ -37,7 +33,6 @@
 kombu==4.0.0
 linecache2==1.0.0
 MarkupSafe==1.1.1
-mccabe==0.2.1
 monotonic==0.6
 msgpack-python==0.4.0
 munch==2.1.0
@@ -62,14 +57,12 @@
 Paste==2.0.2
 PasteDeploy==1.5.0
 pbr==2.0.0
-pep8==1.5.7
 pika==0.10.0
 pika-pool==0.1.3
 positional==1.2.1
 prettytable==0.7.2
 pyasn1==0.1.8
 pycparser==2.18
-pyflakes==0.8.1
 pyinotify==0.9.6
 pyOpenSSL==17.1.0
 pyparsing==2.1.0
@@ -89,7 +82,6 @@
 requestsexceptions==1.2.0
 rfc3986==0.3.1
 Routes==2.3.1
-simplejson==3.5.1
 smmap==0.9.0
 statsd==3.2.1
 stevedore==2.0.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-novaclient-17.2.1/novaclient/__init__.py 
new/python-novaclient-17.4.0/novaclient/__init__.py
--- old/python-novaclient-17.2.1/novaclient/__init__.py 2020-09-10 
11:55:42.000000000 +0200
+++ new/python-novaclient-17.4.0/novaclient/__init__.py 2021-03-11 
20:47:21.000000000 +0100
@@ -25,4 +25,4 @@
 # when client supported the max version, and bumped sequentially, otherwise
 # the client may break due to server side new version may include some
 # backward incompatible change.
-API_MAX_VERSION = api_versions.APIVersion("2.87")
+API_MAX_VERSION = api_versions.APIVersion("2.88")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-novaclient-17.2.1/novaclient/shell.py 
new/python-novaclient-17.4.0/novaclient/shell.py
--- old/python-novaclient-17.2.1/novaclient/shell.py    2020-09-10 
11:55:42.000000000 +0200
+++ new/python-novaclient-17.4.0/novaclient/shell.py    2021-03-11 
20:47:21.000000000 +0100
@@ -365,6 +365,9 @@
             help=_("Use this API endpoint instead of the Service Catalog. "
                    "Defaults to env[OS_ENDPOINT_OVERRIDE]."))
 
+        parser.set_defaults(func=self.do_help)
+        parser.set_defaults(command='')
+
         if osprofiler_profiler:
             parser.add_argument('--profile',
                                 metavar='HMAC_KEY',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-novaclient-17.2.1/novaclient/tests/functional/v2/legacy/test_readonly_nova.py
 
new/python-novaclient-17.4.0/novaclient/tests/functional/v2/legacy/test_readonly_nova.py
--- 
old/python-novaclient-17.2.1/novaclient/tests/functional/v2/legacy/test_readonly_nova.py
    2020-09-10 11:55:42.000000000 +0200
+++ 
new/python-novaclient-17.4.0/novaclient/tests/functional/v2/legacy/test_readonly_nova.py
    2021-03-11 20:47:21.000000000 +0100
@@ -86,8 +86,24 @@
         self.nova('help')
 
     def test_agent_list(self):
-        self.nova('agent-list')
-        self.nova('agent-list', flags='--debug')
+        ex = self.assertRaises(exceptions.CommandFailed,
+                               self.nova, 'agent-list')
+        self.assertIn(
+            "This resource is no longer available. "
+            "No forwarding address is given. (HTTP 410)", str(ex))
+        self.assertIn(
+            "This command has been deprecated since 23.0.0 Wallaby Release "
+            "and will be removed in the first major release "
+            "after the Nova server 24.0.0 X release.", str(ex.stderr))
+        ex = self.assertRaises(exceptions.CommandFailed,
+                               self.nova, 'agent-list', flags='--debug')
+        self.assertIn(
+            "This resource is no longer available. "
+            "No forwarding address is given. (HTTP 410)", str(ex))
+        self.assertIn(
+            "This command has been deprecated since 23.0.0 Wallaby Release "
+            "and will be removed in the first major release "
+            "after the Nova server 24.0.0 X release.", str(ex.stderr))
 
     def test_migration_list(self):
         self.nova('migration-list')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-novaclient-17.2.1/novaclient/tests/unit/fixture_data/hypervisors.py 
new/python-novaclient-17.4.0/novaclient/tests/unit/fixture_data/hypervisors.py
--- 
old/python-novaclient-17.2.1/novaclient/tests/unit/fixture_data/hypervisors.py  
    2020-09-10 11:55:42.000000000 +0200
+++ 
new/python-novaclient-17.4.0/novaclient/tests/unit/fixture_data/hypervisors.py  
    2021-03-11 20:47:21.000000000 +0100
@@ -27,15 +27,41 @@
     service_id_1 = 1
     service_id_2 = 2
 
+    @staticmethod
+    def _transform_hypervisor_details(hypervisor):
+        """Transform a detailed hypervisor view from 2.53 to 2.88."""
+        del hypervisor['current_workload']
+        del hypervisor['disk_available_least']
+        del hypervisor['free_ram_mb']
+        del hypervisor['free_disk_gb']
+        del hypervisor['local_gb']
+        del hypervisor['local_gb_used']
+        del hypervisor['memory_mb']
+        del hypervisor['memory_mb_used']
+        del hypervisor['running_vms']
+        del hypervisor['vcpus']
+        del hypervisor['vcpus_used']
+        hypervisor['uptime'] = 'fake uptime'
+
     def setUp(self):
         super(V1, self).setUp()
-        uuid_as_id = (api_versions.APIVersion(self.api_version) >=
-                      api_versions.APIVersion('2.53'))
+
+        api_version = api_versions.APIVersion(self.api_version)
 
         get_os_hypervisors = {
             'hypervisors': [
-                {'id': self.hyper_id_1, 'hypervisor_hostname': 'hyper1'},
-                {'id': self.hyper_id_2, 'hypervisor_hostname': 'hyper2'},
+                {
+                    'id': self.hyper_id_1,
+                    'hypervisor_hostname': 'hyper1',
+                    'state': 'up',
+                    'status': 'enabled',
+                },
+                {
+                    'id': self.hyper_id_2,
+                    'hypervisor_hostname': 'hyper2',
+                    'state': 'up',
+                    'status': 'enabled',
+                },
             ]
         }
 
@@ -67,7 +93,9 @@
                     'current_workload': 2,
                     'running_vms': 2,
                     'cpu_info': 'cpu_info',
-                    'disk_available_least': 100
+                    'disk_available_least': 100,
+                    'state': 'up',
+                    'status': 'enabled',
                 },
                 {
                     'id': self.hyper_id_2,
@@ -89,11 +117,17 @@
                     'current_workload': 2,
                     'running_vms': 2,
                     'cpu_info': 'cpu_info',
-                    'disk_available_least': 100
+                    'disk_available_least': 100,
+                    'state': 'up',
+                    'status': 'enabled',
                 }
             ]
         }
 
+        if api_version >= api_versions.APIVersion('2.88'):
+            for hypervisor in get_os_hypervisors_detail['hypervisors']:
+                self._transform_hypervisor_details(hypervisor)
+
         self.requests_mock.get(self.url('detail'),
                                json=get_os_hypervisors_detail,
                                headers=self.headers)
@@ -121,12 +155,22 @@
 
         get_os_hypervisors_search = {
             'hypervisors': [
-                {'id': self.hyper_id_1, 'hypervisor_hostname': 'hyper1'},
-                {'id': self.hyper_id_2, 'hypervisor_hostname': 'hyper2'}
+                {
+                    'id': self.hyper_id_1,
+                    'hypervisor_hostname': 'hyper1',
+                    'state': 'up',
+                    'status': 'enabled',
+                },
+                {
+                    'id': self.hyper_id_2,
+                    'hypervisor_hostname': 'hyper2',
+                    'state': 'up',
+                    'status': 'enabled',
+                },
             ]
         }
 
-        if uuid_as_id:
+        if api_version >= api_versions.APIVersion('2.53'):
             url = self.url(hypervisor_hostname_pattern='hyper')
         else:
             url = self.url('hyper', 'search')
@@ -134,7 +178,7 @@
                                json=get_os_hypervisors_search,
                                headers=self.headers)
 
-        if uuid_as_id:
+        if api_version >= api_versions.APIVersion('2.53'):
             get_os_hypervisors_search_u_v2_53 = {
                 'error_name': 'BadRequest',
                 'message': 'Invalid input for query parameters '
@@ -164,6 +208,8 @@
                 {
                     'id': self.hyper_id_1,
                     'hypervisor_hostname': 'hyper1',
+                    'state': 'up',
+                    'status': 'enabled',
                     'servers': [
                         {'name': 'inst1', 'uuid': 'uuid1'},
                         {'name': 'inst2', 'uuid': 'uuid2'}
@@ -172,6 +218,8 @@
                 {
                     'id': self.hyper_id_2,
                     'hypervisor_hostname': 'hyper2',
+                    'state': 'up',
+                    'status': 'enabled',
                     'servers': [
                         {'name': 'inst3', 'uuid': 'uuid3'},
                         {'name': 'inst4', 'uuid': 'uuid4'}
@@ -180,7 +228,7 @@
             ]
         }
 
-        if uuid_as_id:
+        if api_version >= api_versions.APIVersion('2.53'):
             url = self.url(hypervisor_hostname_pattern='hyper',
                            with_servers=True)
         else:
@@ -207,10 +255,16 @@
                 'current_workload': 2,
                 'running_vms': 2,
                 'cpu_info': 'cpu_info',
-                'disk_available_least': 100
+                'disk_available_least': 100,
+                'state': 'up',
+                'status': 'enabled',
             }
         }
 
+        if api_version >= api_versions.APIVersion('2.88'):
+            self._transform_hypervisor_details(
+                get_os_hypervisors_hyper1['hypervisor'])
+
         self.requests_mock.get(self.url(self.hyper_id_1),
                                json=get_os_hypervisors_hyper1,
                                headers=self.headers)
@@ -219,7 +273,9 @@
             'hypervisor': {
                 'id': self.hyper_id_1,
                 'hypervisor_hostname': 'hyper1',
-                'uptime': 'fake uptime'
+                'uptime': 'fake uptime',
+                'state': 'up',
+                'status': 'enabled',
             }
         }
 
@@ -228,10 +284,15 @@
                                headers=self.headers)
 
 
-class V2_53(V1):
+class V253(V1):
     """Fixture data for the os-hypervisors 2.53 API."""
     api_version = '2.53'
     hyper_id_1 = 'd480b1b6-2255-43c2-b2c2-d60d42c2c074'
     hyper_id_2 = '43a8214d-f36a-4fc0-a25c-3cf35c17522d'
     service_id_1 = 'a87743ff-9c29-42ff-805d-2444659b5fc0'
     service_id_2 = '0486ab8b-1cfc-4ccb-9d94-9f22ec8bbd6b'
+
+
+class V288(V253):
+    """Fixture data for the os-hypervisors 2.88 API."""
+    api_version = '2.88'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-novaclient-17.2.1/novaclient/tests/unit/test_shell.py 
new/python-novaclient-17.4.0/novaclient/tests/unit/test_shell.py
--- old/python-novaclient-17.2.1/novaclient/tests/unit/test_shell.py    
2020-09-10 11:55:42.000000000 +0200
+++ new/python-novaclient-17.4.0/novaclient/tests/unit/test_shell.py    
2021-03-11 20:47:21.000000000 +0100
@@ -451,6 +451,9 @@
     def test_help_no_options(self):
         self._test_help('')
 
+    def test_help_no_subcommand(self):
+        self._test_help('--os-compute-api-version 2.87')
+
     def test_help_on_subcommand(self):
         required = [
             '.*?^usage: nova set-password',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-novaclient-17.2.1/novaclient/tests/unit/v2/test_hypervisors.py 
new/python-novaclient-17.4.0/novaclient/tests/unit/v2/test_hypervisors.py
--- old/python-novaclient-17.2.1/novaclient/tests/unit/v2/test_hypervisors.py   
2020-09-10 11:55:42.000000000 +0200
+++ new/python-novaclient-17.4.0/novaclient/tests/unit/v2/test_hypervisors.py   
2021-03-11 20:47:21.000000000 +0100
@@ -63,7 +63,9 @@
                  current_workload=2,
                  running_vms=2,
                  cpu_info='cpu_info',
-                 disk_available_least=100),
+                 disk_available_least=100,
+                 state='up',
+                 status='enabled'),
             dict(id=self.data_fixture.hyper_id_2,
                  service=dict(id=self.data_fixture.service_id_2,
                               host="compute2"),
@@ -81,7 +83,24 @@
                  current_workload=2,
                  running_vms=2,
                  cpu_info='cpu_info',
-                 disk_available_least=100)]
+                 disk_available_least=100,
+                 state='up',
+                 status='enabled')]
+
+        if self.cs.api_version >= api_versions.APIVersion('2.88'):
+            for hypervisor in expected:
+                del hypervisor['current_workload']
+                del hypervisor['disk_available_least']
+                del hypervisor['free_ram_mb']
+                del hypervisor['free_disk_gb']
+                del hypervisor['local_gb']
+                del hypervisor['local_gb_used']
+                del hypervisor['memory_mb']
+                del hypervisor['memory_mb_used']
+                del hypervisor['running_vms']
+                del hypervisor['vcpus']
+                del hypervisor['vcpus_used']
+                hypervisor['uptime'] = 'fake uptime'
 
         result = self.cs.hypervisors.list()
         self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST)
@@ -93,9 +112,13 @@
     def test_hypervisor_search(self):
         expected = [
             dict(id=self.data_fixture.hyper_id_1,
-                 hypervisor_hostname='hyper1'),
+                 hypervisor_hostname='hyper1',
+                 state='up',
+                 status='enabled'),
             dict(id=self.data_fixture.hyper_id_2,
-                 hypervisor_hostname='hyper2')]
+                 hypervisor_hostname='hyper2',
+                 state='up',
+                 status='enabled')]
 
         result = self.cs.hypervisors.search('hyper')
         self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST)
@@ -131,11 +154,15 @@
         expected = [
             dict(id=self.data_fixture.hyper_id_1,
                  hypervisor_hostname='hyper1',
+                 state='up',
+                 status='enabled',
                  servers=[
                      dict(name='inst1', uuid='uuid1'),
                      dict(name='inst2', uuid='uuid2')]),
             dict(id=self.data_fixture.hyper_id_2,
                  hypervisor_hostname='hyper2',
+                 state='up',
+                 status='enabled',
                  servers=[
                      dict(name='inst3', uuid='uuid3'),
                      dict(name='inst4', uuid='uuid4')]),
@@ -171,7 +198,23 @@
             current_workload=2,
             running_vms=2,
             cpu_info='cpu_info',
-            disk_available_least=100)
+            disk_available_least=100,
+            state='up',
+            status='enabled')
+
+        if self.cs.api_version >= api_versions.APIVersion('2.88'):
+            del expected['current_workload']
+            del expected['disk_available_least']
+            del expected['free_ram_mb']
+            del expected['free_disk_gb']
+            del expected['local_gb']
+            del expected['local_gb_used']
+            del expected['memory_mb']
+            del expected['memory_mb_used']
+            del expected['running_vms']
+            del expected['vcpus']
+            del expected['vcpus_used']
+            expected['uptime'] = 'fake uptime'
 
         result = self.cs.hypervisors.get(self.data_fixture.hyper_id_1)
         self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST)
@@ -184,7 +227,9 @@
         expected = dict(
             id=self.data_fixture.hyper_id_1,
             hypervisor_hostname="hyper1",
-            uptime="fake uptime")
+            uptime="fake uptime",
+            state='up',
+            status='enabled')
 
         result = self.cs.hypervisors.uptime(self.data_fixture.hyper_id_1)
         self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST)
@@ -215,11 +260,6 @@
 
         self.compare_to_expected(expected, result)
 
-    def test_hypervisor_statistics_data_model(self):
-        result = self.cs.hypervisor_stats.statistics()
-        self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST)
-        self.assert_called('GET', '/os-hypervisors/statistics')
-
         # Test for Bug #1370415, the line below used to raise AttributeError
         self.assertEqual("<HypervisorStats: 2 Hypervisors>",
                          result.__repr__())
@@ -237,19 +277,23 @@
             self.assertEqual([v], self.requests_mock.last_request.qs[k])
 
 
-class HypervisorsV2_53Test(HypervisorsV233Test):
+class HypervisorsV253Test(HypervisorsV233Test):
     """Tests the os-hypervisors 2.53 API bindings."""
-    data_fixture_class = data.V2_53
+    data_fixture_class = data.V253
 
     def setUp(self):
-        super(HypervisorsV2_53Test, self).setUp()
+        super(HypervisorsV253Test, self).setUp()
         self.cs.api_version = api_versions.APIVersion("2.53")
 
     def test_hypervisor_search_detailed(self):
         expected = [
             dict(id=self.data_fixture.hyper_id_1,
+                 state='up',
+                 status='enabled',
                  hypervisor_hostname='hyper1'),
             dict(id=self.data_fixture.hyper_id_2,
+                 state='up',
+                 status='enabled',
                  hypervisor_hostname='hyper2')]
         result = self.cs.hypervisors.search('hyper', detailed=True)
         self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST)
@@ -257,3 +301,35 @@
             'GET', '/os-hypervisors/detail?hypervisor_hostname_pattern=hyper')
         for idx, hyper in enumerate(result):
             self.compare_to_expected(expected[idx], hyper)
+
+
+class HypervisorsV288Test(HypervisorsV253Test):
+    data_fixture_class = data.V288
+
+    def setUp(self):
+        super().setUp()
+        self.cs.api_version = api_versions.APIVersion('2.88')
+
+    def test_hypervisor_uptime(self):
+        expected = {
+            'id': self.data_fixture.hyper_id_1,
+            'hypervisor_hostname': 'hyper1',
+            'uptime': 'fake uptime',
+            'state': 'up',
+            'status': 'enabled',
+        }
+
+        result = self.cs.hypervisors.uptime(self.data_fixture.hyper_id_1)
+        self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST)
+        self.assert_called(
+            'GET', '/os-hypervisors/%s' % self.data_fixture.hyper_id_1)
+
+        self.compare_to_expected(expected, result)
+
+    def test_hypervisor_statistics(self):
+        exc = self.assertRaises(
+            exceptions.UnsupportedVersion,
+            self.cs.hypervisor_stats.statistics)
+        self.assertIn(
+            "The 'statistics' API is removed in API version 2.88 or later.",
+            str(exc))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-novaclient-17.2.1/novaclient/tests/unit/v2/test_shell.py 
new/python-novaclient-17.4.0/novaclient/tests/unit/v2/test_shell.py
--- old/python-novaclient-17.2.1/novaclient/tests/unit/v2/test_shell.py 
2020-09-10 11:55:42.000000000 +0200
+++ new/python-novaclient-17.4.0/novaclient/tests/unit/v2/test_shell.py 
2021-03-11 20:47:21.000000000 +0100
@@ -118,14 +118,18 @@
         return self.shell.cs.assert_not_called(method, url, body)
 
     def test_agents_list_with_hypervisor(self):
-        self.run_command('agent-list --hypervisor xen')
+        _, err = self.run_command('agent-list --hypervisor xen')
         self.assert_called('GET', '/os-agents?hypervisor=xen')
+        self.assertIn(
+            'This command has been deprecated since 23.0.0 Wallaby Release '
+            'and will be removed in the first major release '
+            'after the Nova server 24.0.0 X release.', err)
 
     def test_agents_create(self):
-        self.run_command('agent-create win x86 7.0 '
-                         '/xxx/xxx/xxx '
-                         'add6bb58e139be103324d04d82d8f546 '
-                         'kvm')
+        _, err = self.run_command('agent-create win x86 7.0 '
+                                  '/xxx/xxx/xxx '
+                                  'add6bb58e139be103324d04d82d8f546 '
+                                  'kvm')
         self.assert_called(
             'POST', '/os-agents',
             {'agent': {
@@ -135,19 +139,31 @@
                 'version': '7.0',
                 'url': '/xxx/xxx/xxx',
                 'md5hash': 'add6bb58e139be103324d04d82d8f546'}})
+        self.assertIn(
+            'This command has been deprecated since 23.0.0 Wallaby Release '
+            'and will be removed in the first major release '
+            'after the Nova server 24.0.0 X release.', err)
 
     def test_agents_delete(self):
-        self.run_command('agent-delete 1')
+        _, err = self.run_command('agent-delete 1')
         self.assert_called('DELETE', '/os-agents/1')
+        self.assertIn(
+            'This command has been deprecated since 23.0.0 Wallaby Release '
+            'and will be removed in the first major release '
+            'after the Nova server 24.0.0 X release.', err)
 
     def test_agents_modify(self):
-        self.run_command('agent-modify 1 8.0 /yyy/yyyy/yyyy '
-                         'add6bb58e139be103324d04d82d8f546')
+        _, err = self.run_command('agent-modify 1 8.0 /yyy/yyyy/yyyy '
+                                  'add6bb58e139be103324d04d82d8f546')
         self.assert_called('PUT', '/os-agents/1',
                            {"para": {
                                "url": "/yyy/yyyy/yyyy",
                                "version": "8.0",
                                "md5hash": "add6bb58e139be103324d04d82d8f546"}})
+        self.assertIn(
+            'This command has been deprecated since 23.0.0 Wallaby Release '
+            'and will be removed in the first major release '
+            'after the Nova server 24.0.0 X release.', err)
 
     def test_boot(self):
         self.run_command('boot --flavor 1 --image %s '
@@ -3559,6 +3575,16 @@
         self.run_command('hypervisor-stats')
         self.assert_called('GET', '/os-hypervisors/statistics')
 
+    def test_hypervisor_stats_v2_88(self):
+        """Tests nova hypervisor-stats at the 2.88 microversion."""
+        ex = self.assertRaises(
+            exceptions.CommandError, self.run_command,
+            'hypervisor-stats', api_version='2.88')
+        self.assertIn(
+            'The hypervisor-stats command is not supported in API version '
+            '2.88 or later.',
+            str(ex))
+
     def test_quota_show(self):
         self.run_command(
             'quota-show --tenant '
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-novaclient-17.2.1/novaclient/v2/agents.py 
new/python-novaclient-17.4.0/novaclient/v2/agents.py
--- old/python-novaclient-17.2.1/novaclient/v2/agents.py        2020-09-10 
11:55:42.000000000 +0200
+++ new/python-novaclient-17.4.0/novaclient/v2/agents.py        2021-03-11 
20:47:21.000000000 +0100
@@ -19,6 +19,11 @@
 
 from novaclient import base
 
+# NOTE(takashin): The os-agents APIs have been removed
+# in https://review.opendev.org/c/openstack/nova/+/749309 .
+# But the following API bindings remains as ther are
+# because the python-openstackclient depends on them.
+
 
 class Agent(base.Resource):
     def __repr__(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-novaclient-17.2.1/novaclient/v2/hypervisors.py 
new/python-novaclient-17.4.0/novaclient/v2/hypervisors.py
--- old/python-novaclient-17.2.1/novaclient/v2/hypervisors.py   2020-09-10 
11:55:42.000000000 +0200
+++ new/python-novaclient-17.4.0/novaclient/v2/hypervisors.py   2021-03-11 
20:47:21.000000000 +0100
@@ -123,8 +123,25 @@
         :param hypervisor: Either a Hypervisor object or an ID. Starting with
             microversion 2.53 the ID must be a UUID value.
         """
-        return self._get("/os-hypervisors/%s/uptime" % base.getid(hypervisor),
-                         "hypervisor")
+        # Starting with microversion 2.88, the '/os-hypervisors/{id}/uptime'
+        # route is removed in favour of returning 'uptime' in the response of
+        # the '/os-hypervisors/{id}' route. This behaves slightly differently,
+        # in that it won't error out if a virt driver doesn't support reporting
+        # uptime or if the hypervisor is down, but it's a good enough
+        # approximation
+        if self.api_version < api_versions.APIVersion("2.88"):
+            return self._get(
+                "/os-hypervisors/%s/uptime" % base.getid(hypervisor),
+                "hypervisor")
+
+        resp, body = self.api.client.get(
+            "/os-hypervisors/%s" % base.getid(hypervisor)
+        )
+        content = {
+            k: v for k, v in body['hypervisor'].items()
+            if k in ('id', 'hypervisor_hostname', 'state', 'status', 'uptime')
+        }
+        return self.resource_class(self, content, loaded=True, resp=resp)
 
     def statistics(self):
         """
@@ -145,8 +162,15 @@
 class HypervisorStatsManager(base.Manager):
     resource_class = HypervisorStats
 
+    @api_versions.wraps("2.0", "2.87")
     def statistics(self):
         """
         Get hypervisor statistics over all compute nodes.
         """
         return self._get("/os-hypervisors/statistics", "hypervisor_statistics")
+
+    @api_versions.wraps("2.88")
+    def statistics(self):
+        raise exceptions.UnsupportedVersion(
+            _("The 'statistics' API is removed in API version 2.88 or later.")
+        )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-novaclient-17.2.1/novaclient/v2/shell.py 
new/python-novaclient-17.4.0/novaclient/v2/shell.py
--- old/python-novaclient-17.2.1/novaclient/v2/shell.py 2020-09-10 
11:55:42.000000000 +0200
+++ new/python-novaclient-17.4.0/novaclient/v2/shell.py 2021-03-11 
20:47:21.000000000 +0100
@@ -55,6 +55,14 @@
           file=sys.stderr)
 
 
+# TODO(takashin): Remove this along with the deprecated commands in the first
+# major python-novaclient release AFTER the nova server 24.0.0 X release.
+def _emit_agent_deprecation_warning():
+    print('This command has been deprecated since 23.0.0 Wallaby Release '
+          'and will be removed in the first major release '
+          'after the Nova server 24.0.0 X release.', file=sys.stderr)
+
+
 CLIENT_BDM2_KEYS = {
     'id': 'uuid',
     'source': 'source_type',
@@ -3411,7 +3419,8 @@
     default=None,
     help=_('Type of hypervisor.'))
 def do_agent_list(cs, args):
-    """List all builds."""
+    """DEPRECATED List all builds."""
+    _emit_agent_deprecation_warning()
     result = cs.agents.list(args.hypervisor)
     columns = ["Agent_id", "Hypervisor", "OS", "Architecture", "Version",
                'Md5hash', 'Url']
@@ -3432,7 +3441,8 @@
     default='xen',
     help=_('Type of hypervisor.'))
 def do_agent_create(cs, args):
-    """Create new agent build."""
+    """DEPRECATED Create new agent build."""
+    _emit_agent_deprecation_warning()
     result = cs.agents.create(args.os, args.architecture,
                               args.version, args.url,
                               args.md5hash, args.hypervisor)
@@ -3441,7 +3451,8 @@
 
 @utils.arg('id', metavar='<id>', help=_('ID of the agent-build.'))
 def do_agent_delete(cs, args):
-    """Delete existing agent build."""
+    """DEPRECATED Delete existing agent build."""
+    _emit_agent_deprecation_warning()
     cs.agents.delete(args.id)
 
 
@@ -3450,7 +3461,8 @@
 @utils.arg('url', metavar='<url>', help=_('URL'))
 @utils.arg('md5hash', metavar='<md5hash>', help=_('MD5 hash.'))
 def do_agent_modify(cs, args):
-    """Modify existing agent build."""
+    """DEPRECATED Modify existing agent build."""
+    _emit_agent_deprecation_warning()
     result = cs.agents.update(args.id, args.version,
                               args.url, args.md5hash)
     utils.print_dict(result.to_dict())
@@ -4037,12 +4049,22 @@
     utils.print_dict(hyper.to_dict())
 
 
+@api_versions.wraps('2.0', '2.87')
 def do_hypervisor_stats(cs, args):
     """Get hypervisor statistics over all compute nodes."""
     stats = cs.hypervisor_stats.statistics()
     utils.print_dict(stats.to_dict())
 
 
+@api_versions.wraps('2.88')
+def do_hypervisor_stats(cs, args):
+    msg = _(
+        "The hypervisor-stats command is not supported in API version 2.88 "
+        "or later."
+    )
+    raise exceptions.CommandError(msg)
+
+
 @utils.arg('server', metavar='<server>', help=_('Name or ID of server.'))
 @utils.arg(
     '--port',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-novaclient-17.2.1/python_novaclient.egg-info/PKG-INFO 
new/python-novaclient-17.4.0/python_novaclient.egg-info/PKG-INFO
--- old/python-novaclient-17.2.1/python_novaclient.egg-info/PKG-INFO    
2020-09-10 11:57:43.000000000 +0200
+++ new/python-novaclient-17.4.0/python_novaclient.egg-info/PKG-INFO    
2021-03-11 20:48:00.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 1.2
 Name: python-novaclient
-Version: 17.2.1
+Version: 17.4.0
 Summary: Client library for OpenStack Compute API
 Home-page: https://docs.openstack.org/python-novaclient/latest
 Author: OpenStack
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-novaclient-17.2.1/python_novaclient.egg-info/SOURCES.txt 
new/python-novaclient-17.4.0/python_novaclient.egg-info/SOURCES.txt
--- old/python-novaclient-17.2.1/python_novaclient.egg-info/SOURCES.txt 
2020-09-10 11:57:43.000000000 +0200
+++ new/python-novaclient-17.4.0/python_novaclient.egg-info/SOURCES.txt 
2021-03-11 20:48:00.000000000 +0100
@@ -195,6 +195,7 @@
 releasenotes/notes/bug-1825061-2beb95db4d6df0cb.yaml
 releasenotes/notes/bug-1845322-463ee407b60131c9.yaml
 releasenotes/notes/clarify-project-id-variable-5832698315000438.yaml
+releasenotes/notes/deprecate-agent-d0f58718ad1782f6.yaml
 releasenotes/notes/deprecate-baremetal-d67f58a2986b3565.yaml
 releasenotes/notes/deprecate-cellsv1-extension-16482759993d112f.yaml
 releasenotes/notes/deprecate-certs-1558d8e3b7888938.yaml
@@ -212,6 +213,7 @@
 releasenotes/notes/drop-deprecated-aggregate-update-args-17bd019f4be34b18.yaml
 releasenotes/notes/drop-python2-support-d3a1bedc75445edc.yaml
 releasenotes/notes/fix-booting-with-multiple-nics-c6e5885b948d35ba.yaml
+releasenotes/notes/fix-raw-python-error-debd3edb17c2f675.yaml
 releasenotes/notes/fix-rebuild-userdata-9315e5784feb8ba9.yaml
 releasenotes/notes/fix-tag-attribute-disappearing-25483a80f548ef35.yaml
 releasenotes/notes/fix-token-auth-6c48c63a759f51d5.yaml
@@ -263,6 +265,7 @@
 releasenotes/notes/microversion-v2_80-c2394316f9212865.yaml
 releasenotes/notes/microversion-v2_81-3ddd8e2fc7e45030.yaml
 releasenotes/notes/microversion-v2_85-230931f88c4f1d52.yaml
+releasenotes/notes/microversion-v2_88-d91136020e3a3621.yaml
 releasenotes/notes/microversion_v2_70-09cbe0933b3a9335.yaml
 releasenotes/notes/no-glance-proxy-5c13001a4b13e8ce.yaml
 releasenotes/notes/no-neutron-proxy-18fd54febe939a6b.yaml
@@ -310,6 +313,7 @@
 releasenotes/source/train.rst
 releasenotes/source/unreleased.rst
 releasenotes/source/ussuri.rst
+releasenotes/source/victoria.rst
 releasenotes/source/_static/.placeholder
 releasenotes/source/_templates/.placeholder
 releasenotes/source/locale/fr/LC_MESSAGES/releasenotes.po
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-novaclient-17.2.1/python_novaclient.egg-info/pbr.json 
new/python-novaclient-17.4.0/python_novaclient.egg-info/pbr.json
--- old/python-novaclient-17.2.1/python_novaclient.egg-info/pbr.json    
2020-09-10 11:57:43.000000000 +0200
+++ new/python-novaclient-17.4.0/python_novaclient.egg-info/pbr.json    
2021-03-11 20:48:00.000000000 +0100
@@ -1 +1 @@
-{"git_version": "553257d1", "is_release": true}
\ No newline at end of file
+{"git_version": "54d4da11", "is_release": true}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-novaclient-17.2.1/python_novaclient.egg-info/requires.txt 
new/python-novaclient-17.4.0/python_novaclient.egg-info/requires.txt
--- old/python-novaclient-17.2.1/python_novaclient.egg-info/requires.txt        
2020-09-10 11:57:43.000000000 +0200
+++ new/python-novaclient-17.4.0/python_novaclient.egg-info/requires.txt        
2021-03-11 20:48:00.000000000 +0100
@@ -1,9 +1,8 @@
-PrettyTable<0.8,>=0.7.2
+PrettyTable>=0.7.2
 iso8601>=0.1.11
 keystoneauth1>=3.5.0
 oslo.i18n>=3.15.3
 oslo.serialization!=2.19.1,>=2.18.0
 oslo.utils>=3.33.0
 pbr!=2.1.0,>=2.0.0
-simplejson>=3.5.1
 stevedore>=2.0.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-novaclient-17.2.1/releasenotes/notes/deprecate-agent-d0f58718ad1782f6.yaml
 
new/python-novaclient-17.4.0/releasenotes/notes/deprecate-agent-d0f58718ad1782f6.yaml
--- 
old/python-novaclient-17.2.1/releasenotes/notes/deprecate-agent-d0f58718ad1782f6.yaml
       1970-01-01 01:00:00.000000000 +0100
+++ 
new/python-novaclient-17.4.0/releasenotes/notes/deprecate-agent-d0f58718ad1782f6.yaml
       2021-03-11 20:47:21.000000000 +0100
@@ -0,0 +1,12 @@
+---
+deprecations:
+  - |
+    The following CLIs are deprecated.
+
+    - ``nova agent-create``
+    - ``nova agent-delete``
+    - ``nova agent-list``
+    - ``nova agent-modify``
+
+    The CLIs will be removed in the first major release after Nova 24.0.0 X
+    is released.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-novaclient-17.2.1/releasenotes/notes/fix-raw-python-error-debd3edb17c2f675.yaml
 
new/python-novaclient-17.4.0/releasenotes/notes/fix-raw-python-error-debd3edb17c2f675.yaml
--- 
old/python-novaclient-17.2.1/releasenotes/notes/fix-raw-python-error-debd3edb17c2f675.yaml
  1970-01-01 01:00:00.000000000 +0100
+++ 
new/python-novaclient-17.4.0/releasenotes/notes/fix-raw-python-error-debd3edb17c2f675.yaml
  2021-03-11 20:47:21.000000000 +0100
@@ -0,0 +1,7 @@
+---
+fixes:
+  - |
+    `Bug #1903727 
<https://bugs.launchpad.net/python-novaclient/+bug/1903727>`_:
+    Fixed raw Python error message when using ``nova`` without
+    a subcommand while passing an optional argument, such as
+    ``--os-compute-api-version 2.87``.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-novaclient-17.2.1/releasenotes/notes/microversion-v2_88-d91136020e3a3621.yaml
 
new/python-novaclient-17.4.0/releasenotes/notes/microversion-v2_88-d91136020e3a3621.yaml
--- 
old/python-novaclient-17.2.1/releasenotes/notes/microversion-v2_88-d91136020e3a3621.yaml
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/python-novaclient-17.4.0/releasenotes/notes/microversion-v2_88-d91136020e3a3621.yaml
    2021-03-11 20:47:21.000000000 +0100
@@ -0,0 +1,16 @@
+---
+features:
+  - |
+    Added support for `microversion 2.88`_. The
+    ``novaclient.v2.hypervisors.HypervisorManager.uptime`` method will now
+    transparently switch between the ``/os-hypervisors/{id}/uptime`` API,
+    which is deprecated in 2.88, and the ``/os-hypervisors/{id}`` API, which
+    now includes uptime information, based on the microversion.
+
+    .. _microversion 2.88: 
https://docs.openstack.org/nova/latest/reference/api-microversion-history.html#id80
+deprecations:
+  - |
+    The ``nova hypervisor-stats`` command and underlying
+    ``novaclient.v2.hypervisors.HypervisorStatsManager.statistics`` API are
+    deprecated starting in microversion 2.88 and will return an error starting
+    on this version.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-novaclient-17.2.1/releasenotes/source/index.rst 
new/python-novaclient-17.4.0/releasenotes/source/index.rst
--- old/python-novaclient-17.2.1/releasenotes/source/index.rst  2020-09-10 
11:55:42.000000000 +0200
+++ new/python-novaclient-17.4.0/releasenotes/source/index.rst  2021-03-11 
20:47:21.000000000 +0100
@@ -8,6 +8,7 @@
    :maxdepth: 2
 
    unreleased
+   victoria
    ussuri
    train
    stein
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-novaclient-17.2.1/releasenotes/source/victoria.rst 
new/python-novaclient-17.4.0/releasenotes/source/victoria.rst
--- old/python-novaclient-17.2.1/releasenotes/source/victoria.rst       
1970-01-01 01:00:00.000000000 +0100
+++ new/python-novaclient-17.4.0/releasenotes/source/victoria.rst       
2021-03-11 20:47:21.000000000 +0100
@@ -0,0 +1,6 @@
+=============================
+Victoria Series Release Notes
+=============================
+
+.. release-notes::
+   :branch: stable/victoria
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-novaclient-17.2.1/requirements.txt 
new/python-novaclient-17.4.0/requirements.txt
--- old/python-novaclient-17.2.1/requirements.txt       2020-09-10 
11:55:42.000000000 +0200
+++ new/python-novaclient-17.4.0/requirements.txt       2021-03-11 
20:47:21.000000000 +0100
@@ -7,6 +7,5 @@
 oslo.i18n>=3.15.3 # Apache-2.0
 oslo.serialization!=2.19.1,>=2.18.0 # Apache-2.0
 oslo.utils>=3.33.0 # Apache-2.0
-PrettyTable<0.8,>=0.7.2 # BSD
-simplejson>=3.5.1 # MIT
+PrettyTable>=0.7.2 # BSD
 stevedore>=2.0.1 # Apache-2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-novaclient-17.2.1/setup.py 
new/python-novaclient-17.4.0/setup.py
--- old/python-novaclient-17.2.1/setup.py       2020-09-10 11:55:42.000000000 
+0200
+++ new/python-novaclient-17.4.0/setup.py       2021-03-11 20:47:21.000000000 
+0100
@@ -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-novaclient-17.2.1/tox.ini 
new/python-novaclient-17.4.0/tox.ini
--- old/python-novaclient-17.2.1/tox.ini        2020-09-10 11:55:42.000000000 
+0200
+++ new/python-novaclient-17.4.0/tox.ini        2021-03-11 20:47:21.000000000 
+0100
@@ -40,7 +40,6 @@
 [testenv:docs]
 deps =
   
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
-  -r{toxinidir}/requirements.txt
   -r{toxinidir}/doc/requirements.txt
 commands =
   rm -rf doc/build/html doc/build/doctrees
@@ -59,7 +58,6 @@
 [testenv:releasenotes]
 deps =
   
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
-  -r{toxinidir}/requirements.txt
   -r{toxinidir}/doc/requirements.txt
 commands =
   sphinx-build -a -E -W -d releasenotes/build/doctrees -b html 
releasenotes/source releasenotes/build/html

Reply via email to