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-10-27 22:21:06
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-novaclient (Old)
and /work/SRC/openSUSE:Factory/.python-novaclient.new.1890 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-novaclient"
Wed Oct 27 22:21:06 2021 rev:38 rq:927610 version:17.6.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-novaclient/python-novaclient.changes
2021-05-10 15:39:43.581479209 +0200
+++
/work/SRC/openSUSE:Factory/.python-novaclient.new.1890/python-novaclient.changes
2021-10-27 22:21:20.971203084 +0200
@@ -1,0 +2,20 @@
+Tue Oct 26 21:31:47 UTC 2021 - [email protected]
+
+- update to version 17.6.0
+ - Update master for stable/wallaby
+ - Use importlib instead of imp
+ - Microversion 2.89 - os-volume_attachments
+ - When creating a client, pass the default logger
+ - Refactor constructing request body
+ - Microversion 2.90 - Configurable hostnames
+ - setup.cfg: Replace dashes with underscores
+ - Add Python3 xena unit tests
+ - Use Block Storage API v3 instead of API v2
+ - Use py3 as the default runtime for tox
+ - Add pre-commit
+ - Use well named anchor into the microversion history
+ - tests: Add missing 'nova update' unit tests
+ - Add unit tests for client logger
+ - Change minversion of tox to 3.18.0
+
+-------------------------------------------------------------------
Old:
----
python-novaclient-17.4.0.tar.gz
New:
----
python-novaclient-17.6.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-novaclient.spec ++++++
--- /var/tmp/diff_new_pack.2LhM0s/_old 2021-10-27 22:21:21.543203377 +0200
+++ /var/tmp/diff_new_pack.2LhM0s/_new 2021-10-27 22:21:21.547203380 +0200
@@ -17,14 +17,14 @@
Name: python-novaclient
-Version: 17.4.0
+Version: 17.6.0
Release: 0
Epoch: 0
Summary: Python API and CLI for OpenStack Nova
License: Apache-2.0
Group: Development/Languages/Python
URL: https://docs.openstack.org/python-novaclient
-Source0:
https://files.pythonhosted.org/packages/source/p/python-novaclient/python-novaclient-17.4.0.tar.gz
+Source0:
https://files.pythonhosted.org/packages/source/p/python-novaclient/python-novaclient-17.6.0.tar.gz
BuildRequires: openssl
BuildRequires: openstack-macros
BuildRequires: python3-cinderclient
@@ -91,7 +91,7 @@
%build
%{py3_build}
-PBR_VERSION=17.4.0 %sphinx_build -b html -d doc/build/doctrees doc/source
doc/build/html
+PBR_VERSION=17.6.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.2LhM0s/_old 2021-10-27 22:21:21.579203396 +0200
+++ /var/tmp/diff_new_pack.2LhM0s/_new 2021-10-27 22:21:21.579203396 +0200
@@ -1,8 +1,8 @@
<services>
<service mode="disabled" name="renderspec">
- <param
name="input-template">https://opendev.org/openstack/rpm-packaging/raw/branch/stable/wallaby/openstack/python-novaclient/python-novaclient.spec.j2</param>
+ <param
name="input-template">https://opendev.org/openstack/rpm-packaging/raw/master/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/wallaby/requirements.txt</param>
+ <param
name="requirements">https://opendev.org/openstack/python-novaclient/raw/branch/stable/xena/requirements.txt</param>
<param name="changelog-email">[email protected]</param>
<param name="changelog-provider">gh,openstack,python-novaclient</param>
</service>
++++++ python-novaclient-17.4.0.tar.gz -> python-novaclient-17.6.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-novaclient-17.4.0/.pre-commit-config.yaml
new/python-novaclient-17.6.0/.pre-commit-config.yaml
--- old/python-novaclient-17.4.0/.pre-commit-config.yaml 1970-01-01
01:00:00.000000000 +0100
+++ new/python-novaclient-17.6.0/.pre-commit-config.yaml 2021-09-03
12:18:38.000000000 +0200
@@ -0,0 +1,32 @@
+---
+default_language_version:
+ # force all unspecified python hooks to run python3
+ python: python3
+repos:
+ - repo: https://github.com/pre-commit/pre-commit-hooks
+ rev: v4.0.1
+ hooks:
+ - id: trailing-whitespace
+ - id: mixed-line-ending
+ args: ['--fix', 'lf']
+ - id: check-byte-order-marker
+ - id: check-executables-have-shebangs
+ - id: check-merge-conflict
+ - id: debug-statements
+ - id: check-yaml
+ files: .*\.(yaml|yml)$
+ - repo: https://github.com/Lucas-C/pre-commit-hooks
+ rev: v1.1.10
+ hooks:
+ - id: remove-tabs
+ exclude: '.*\.(svg)$'
+ - repo: local
+ hooks:
+ - id: flake8
+ name: flake8
+ additional_dependencies:
+ - hacking>=3.0.1,<3.1.0
+ language: python
+ entry: flake8
+ files: '^.*\.py$'
+ exclude: '^(doc|releasenotes|tools)/.*$'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-novaclient-17.4.0/.zuul.yaml
new/python-novaclient-17.6.0/.zuul.yaml
--- old/python-novaclient-17.4.0/.zuul.yaml 2021-03-11 20:47:21.000000000
+0100
+++ new/python-novaclient-17.6.0/.zuul.yaml 2021-09-03 12:18:38.000000000
+0200
@@ -20,7 +20,7 @@
- lib-forward-testing-python3
- openstack-cover-jobs
- openstack-lower-constraints-jobs
- - openstack-python3-wallaby-jobs
+ - openstack-python3-xena-jobs
- publish-openstack-docs-pti
- release-notes-jobs-python3
check:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-novaclient-17.4.0/AUTHORS
new/python-novaclient-17.6.0/AUTHORS
--- old/python-novaclient-17.4.0/AUTHORS 2021-03-11 20:48:00.000000000
+0100
+++ new/python-novaclient-17.6.0/AUTHORS 2021-09-03 12:19:08.000000000
+0200
@@ -51,6 +51,7 @@
Augustina Ragwitz <[email protected]>
Avishay Traeger <[email protected]>
Balazs Gibizer <[email protected]>
+Balazs Gibizer <[email protected]>
Bartosz G??rski <[email protected]>
Bartosz G??rski <[email protected]>
Bartosz G??rski <[email protected]>
@@ -357,6 +358,7 @@
Svetlana Shturm <[email protected]>
Swapnil Kulkarni (coolsvap) <[email protected]>
Sylvain Bauza <[email protected]>
+Takashi Kajinami <[email protected]>
Takashi NATSUME <[email protected]>
Takashi Natsume <[email protected]>
Takashi Sogabe <[email protected]>
@@ -405,6 +407,7 @@
Yikun Jiang <[email protected]>
Yongli He <[email protected]>
Your Name <[email protected]>
+YuehuiLei <[email protected]>
Yufang Zhang <[email protected]>
Yunhong, Jiang <[email protected]>
Yuriy Taraday <[email protected]>
@@ -469,6 +472,7 @@
lzyeval <[email protected]>
masumotok <[email protected]>
melanie witt <[email protected]>
+melanie witt <[email protected]>
melwitt <[email protected]>
meretiko <[email protected]>
neetu <[email protected]>
@@ -513,6 +517,7 @@
zhang-jinnan <[email protected]>
zhang.lei <[email protected]>
zhangbailin <[email protected]>
+zhangboye <[email protected]>
zhangdaolong <[email protected]>
zhangjl <[email protected]>
zhangtralon <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-novaclient-17.4.0/ChangeLog
new/python-novaclient-17.6.0/ChangeLog
--- old/python-novaclient-17.4.0/ChangeLog 2021-03-11 20:48:00.000000000
+0100
+++ new/python-novaclient-17.6.0/ChangeLog 2021-09-03 12:19:08.000000000
+0200
@@ -1,6 +1,29 @@
CHANGES
=======
+17.6.0
+------
+
+* Microversion 2.90 - Configurable hostnames
+* tests: Add missing 'nova update' unit tests
+* Add pre-commit
+* Microversion 2.89 - os-volume\_attachments
+* Use importlib instead of imp
+* Use Block Storage API v3 instead of API v2
+
+17.5.0
+------
+
+* Change minversion of tox to 3.18.0
+* Refactor constructing request body
+* setup.cfg: Replace dashes with underscores
+* Use py3 as the default runtime for tox
+* Add unit tests for client logger
+* When creating a client, pass the default logger
+* Add Python3 xena unit tests
+* Update master for stable/wallaby
+* Use well named anchor into the microversion history
+
17.4.0
------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-novaclient-17.4.0/PKG-INFO
new/python-novaclient-17.6.0/PKG-INFO
--- old/python-novaclient-17.4.0/PKG-INFO 2021-03-11 20:48:00.661249600
+0100
+++ new/python-novaclient-17.6.0/PKG-INFO 2021-09-03 12:19:08.998951000
+0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.2
Name: python-novaclient
-Version: 17.4.0
+Version: 17.6.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.4.0/doc/source/cli/nova.rst
new/python-novaclient-17.6.0/doc/source/cli/nova.rst
--- old/python-novaclient-17.4.0/doc/source/cli/nova.rst 2021-03-11
20:47:21.000000000 +0100
+++ new/python-novaclient-17.6.0/doc/source/cli/nova.rst 2021-09-03
12:18:38.000000000 +0200
@@ -975,6 +975,7 @@
[--trusted-image-certificate-id
<trusted-image-certificate-id>]
[--host <host>]
[--hypervisor-hostname <hypervisor-hostname>]
+ [--hostname <hostname>]
<name>
Boot a new server.
@@ -1149,6 +1150,12 @@
Requested hypervisor hostname to create servers. Admin only by default.
(Supported by API versions '2.74' - '2.latest')
+``--hostname <hostname>``
+ Hostname for the instance. This sets the hostname stored in the
+ metadata server: a utility such as cloud-init running on the guest
+ is required to propagate these changes to the guest.
+ (Supported by API versions '2.90' - '2.latest')
+
.. _nova_clear-password:
nova clear-password
@@ -2885,6 +2892,7 @@
[--user-data <user-data>] [--user-data-unset]
[--trusted-image-certificate-id
<trusted-image-certificate-id>]
[--trusted-image-certificates-unset]
+ [--hostname <hostname>]
<server> <image>
Shutdown, re-image, and re-boot a server.
@@ -2958,6 +2966,12 @@
specified with the ``--trusted-image-certificate-id`` option.
(Supported by API versions '2.63' - '2.latest')
+``--hostname <hostname>``
+ New hostname for the instance. This only updates the hostname
+ stored in the metadata server: a utility running on the guest
+ is required to propagate these changes to the guest.
+ (Supported by API versions '2.90' - '2.latest')
+
.. _nova_refresh-network:
nova refresh-network
@@ -3795,9 +3809,11 @@
.. code-block:: console
- usage: nova update [--name <name>] [--description <description>] <server>
+ usage: nova update [--name <name>] [--description <description>]
+ [--hostname <hostname>]
+ <server>
-Update the name or the description for a server.
+Update attributes of a server.
**Positional arguments:**
@@ -3815,6 +3831,12 @@
will be removed. (Supported by API versions
'2.19' - '2.latest')
+``--hostname <hostname>``
+ New hostname for the instance. This only updates the hostname
+ stored in the metadata server: a utility running on the guest
+ is required to propagate these changes to the guest.
+ (Supported by API versions '2.90' - '2.latest')
+
.. _nova_usage:
nova usage
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-novaclient-17.4.0/novaclient/__init__.py
new/python-novaclient-17.6.0/novaclient/__init__.py
--- old/python-novaclient-17.4.0/novaclient/__init__.py 2021-03-11
20:47:21.000000000 +0100
+++ new/python-novaclient-17.6.0/novaclient/__init__.py 2021-09-03
12:18:38.000000000 +0200
@@ -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.88")
+API_MAX_VERSION = api_versions.APIVersion("2.90")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-novaclient-17.4.0/novaclient/tests/functional/base.py
new/python-novaclient-17.6.0/novaclient/tests/functional/base.py
--- old/python-novaclient-17.4.0/novaclient/tests/functional/base.py
2021-03-11 20:47:21.000000000 +0100
+++ new/python-novaclient-17.6.0/novaclient/tests/functional/base.py
2021-09-03 12:18:38.000000000 +0200
@@ -13,7 +13,7 @@
import os
import time
-from cinderclient.v2 import client as cinderclient
+from cinderclient.v3 import client as cinderclient
import fixtures
from glanceclient import client as glanceclient
from keystoneauth1.exceptions import discovery as discovery_exc
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-novaclient-17.4.0/novaclient/tests/unit/test_client.py
new/python-novaclient-17.6.0/novaclient/tests/unit/test_client.py
--- old/python-novaclient-17.4.0/novaclient/tests/unit/test_client.py
2021-03-11 20:47:21.000000000 +0100
+++ new/python-novaclient-17.6.0/novaclient/tests/unit/test_client.py
2021-09-03 12:18:38.000000000 +0200
@@ -124,3 +124,15 @@
self.assertNotEqual(original_kwargs, actual_kwargs)
self.assertEqual({}, actual_kwargs)
self.assertTrue(mock_warnings.warn.called)
+
+
+class ClientTest(utils.TestCase):
+
+ def test_logger(self):
+ client = novaclient.client.Client('2.1', logger=mock.sentinel.logger)
+ self.assertEqual(mock.sentinel.logger, client.logger)
+ self.assertEqual(mock.sentinel.logger, client.client.logger)
+ client = novaclient.client.Client('2.1')
+ self.assertEqual('novaclient.v2.client', client.logger.name)
+ self.assertIsNotNone(client.client.logger)
+ self.assertEqual('novaclient.v2.client', client.client.logger.name)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-novaclient-17.4.0/novaclient/tests/unit/test_discover.py
new/python-novaclient-17.6.0/novaclient/tests/unit/test_discover.py
--- old/python-novaclient-17.4.0/novaclient/tests/unit/test_discover.py
2021-03-11 20:47:21.000000000 +0100
+++ new/python-novaclient-17.6.0/novaclient/tests/unit/test_discover.py
2021-09-03 12:18:38.000000000 +0200
@@ -13,7 +13,7 @@
# License for the specific language governing permissions and limitations
# under the License.
-import imp
+import importlib
import inspect
from unittest import mock
@@ -31,7 +31,8 @@
def mock_mgr():
fake_ep = mock.Mock()
fake_ep.name = 'foo'
- fake_ep.module = imp.new_module('foo')
+ module_spec = importlib.machinery.ModuleSpec('foo', None)
+ fake_ep.module = importlib.util.module_from_spec(module_spec)
fake_ep.load.return_value = fake_ep.module
fake_ext = extension.Extension(
name='foo',
@@ -52,10 +53,14 @@
def test_discover_extensions(self):
def mock_discover_via_python_path():
- yield 'foo', imp.new_module('foo')
+ module_spec = importlib.machinery.ModuleSpec('foo', None)
+ module = importlib.util.module_from_spec(module_spec)
+ yield 'foo', module
def mock_discover_via_entry_points():
- yield 'baz', imp.new_module('baz')
+ module_spec = importlib.machinery.ModuleSpec('baz', None)
+ module = importlib.util.module_from_spec(module_spec)
+ yield 'baz', module
@mock.patch.object(client,
'_discover_via_python_path',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-novaclient-17.4.0/novaclient/tests/unit/v2/fakes.py
new/python-novaclient-17.6.0/novaclient/tests/unit/v2/fakes.py
--- old/python-novaclient-17.4.0/novaclient/tests/unit/v2/fakes.py
2021-03-11 20:47:21.000000000 +0100
+++ new/python-novaclient-17.6.0/novaclient/tests/unit/v2/fakes.py
2021-09-03 12:18:38.000000000 +0200
@@ -2408,6 +2408,9 @@
def delete_servers_1234_migrations_1(self):
return (202, {}, None)
+ def put_servers_1234(self, **kw):
+ return (201, {}, None)
+
def put_servers_1234_tags_tag(self, **kw):
return (201, {}, None)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-novaclient-17.4.0/novaclient/tests/unit/v2/test_servers.py
new/python-novaclient-17.6.0/novaclient/tests/unit/v2/test_servers.py
--- old/python-novaclient-17.4.0/novaclient/tests/unit/v2/test_servers.py
2021-03-11 20:47:21.000000000 +0100
+++ new/python-novaclient-17.6.0/novaclient/tests/unit/v2/test_servers.py
2021-09-03 12:18:38.000000000 +0200
@@ -1905,3 +1905,90 @@
self.cs.api_version = api_versions.APIVersion('2.77')
s = self.cs.servers.get(1234)
self.assertRaises(exceptions.VersionNotFoundForAPIMethod, s.topology)
+
+
+class ServersV290Test(ServersV278Test):
+
+ api_version = '2.90'
+
+ def test_create_server_with_hostname(self):
+ self.cs.servers.create(
+ name='My server',
+ image=1,
+ flavor=1,
+ nics='auto',
+ hostname='new-hostname',
+ )
+ self.assert_called(
+ 'POST', '/servers',
+ {
+ 'server': {
+ 'flavorRef': '1',
+ 'imageRef': '1',
+ 'max_count': 1,
+ 'min_count': 1,
+ 'name': 'My server',
+ 'networks': 'auto',
+ 'hostname': 'new-hostname'
+ },
+ }
+ )
+
+ def test_create_server_with_hostname_pre_290_fails(self):
+ self.cs.api_version = api_versions.APIVersion('2.89')
+ ex = self.assertRaises(
+ exceptions.UnsupportedAttribute,
+ self.cs.servers.create,
+ name='My server',
+ image=1,
+ flavor=1,
+ nics='auto',
+ hostname='new-hostname')
+ self.assertIn(
+ "'hostname' argument is only allowed since microversion 2.90",
+ str(ex))
+
+ def test_rebuild_server_with_hostname(self):
+ s = self.cs.servers.get(1234)
+ ret = s.rebuild(image="1", hostname='new-hostname')
+ self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST)
+ self.assert_called(
+ 'POST', '/servers/1234/action',
+ {
+ 'rebuild': {
+ 'imageRef': '1',
+ 'hostname': 'new-hostname',
+ },
+ },
+ )
+
+ def test_rebuild_server_with_hostname_pre_290_fails(self):
+ self.cs.api_version = api_versions.APIVersion('2.89')
+ ex = self.assertRaises(
+ exceptions.UnsupportedAttribute,
+ self.cs.servers.rebuild,
+ '1234', fakes.FAKE_IMAGE_UUID_1,
+ hostname='new-hostname')
+ self.assertIn('hostname', str(ex))
+
+ def test_update_server_with_hostname(self):
+ s = self.cs.servers.get(1234)
+
+ s.update(hostname='new-hostname')
+ self.assert_called(
+ 'PUT', '/servers/1234',
+ {
+ 'server': {
+ 'hostname': 'new-hostname',
+ },
+ },
+ )
+
+ def test_update_with_hostname_pre_290_fails(self):
+ self.cs.api_version = api_versions.APIVersion('2.89')
+ s = self.cs.servers.get(1234)
+ ex = self.assertRaises(
+ TypeError,
+ s.update,
+ hostname='new-hostname')
+ self.assertIn('hostname', str(ex))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-novaclient-17.4.0/novaclient/tests/unit/v2/test_shell.py
new/python-novaclient-17.6.0/novaclient/tests/unit/v2/test_shell.py
--- old/python-novaclient-17.4.0/novaclient/tests/unit/v2/test_shell.py
2021-03-11 20:47:21.000000000 +0100
+++ new/python-novaclient-17.6.0/novaclient/tests/unit/v2/test_shell.py
2021-09-03 12:18:38.000000000 +0200
@@ -1502,6 +1502,34 @@
self.assertRaises(SystemExit, self.run_command,
cmd, api_version='2.73')
+ def test_boot_with_hostname(self):
+ self.run_command(
+ 'boot --flavor 1 --image %s '
+ '--hostname my-hostname --nic auto '
+ 'some-server' % FAKE_UUID_1,
+ api_version='2.90')
+ self.assert_called_anytime(
+ 'POST', '/servers',
+ {'server': {
+ 'flavorRef': '1',
+ 'name': 'some-server',
+ 'imageRef': FAKE_UUID_1,
+ 'min_count': 1,
+ 'max_count': 1,
+ 'networks': 'auto',
+ 'hostname': 'my-hostname',
+ }},
+ )
+
+ def test_boot_with_hostname_pre_v290(self):
+ cmd = (
+ 'boot --flavor 1 --image %s --nic auto '
+ '--hostname my-hostname some-server' % FAKE_UUID_1
+ )
+ self.assertRaises(
+ SystemExit, self.run_command,
+ cmd, api_version='2.89')
+
def test_flavor_list(self):
out, _ = self.run_command('flavor-list')
self.assert_called_anytime('GET', '/flavors/detail')
@@ -2258,6 +2286,31 @@
self.assertNotIn('server_groups', out)
self.assertNotIn('a67359fb-d397-4697-88f1-f55e3ee7c499', out)
+ def test_rebuild_with_hostname(self):
+ self.run_command(
+ 'rebuild sample-server %s --hostname new-hostname' % FAKE_UUID_1,
+ api_version='2.90')
+ self.assert_called('GET', '/servers?name=sample-server', pos=0)
+ self.assert_called('GET', '/servers/1234', pos=1)
+ self.assert_called('GET', '/v2/images/%s' % FAKE_UUID_1, pos=2)
+ self.assert_called(
+ 'POST', '/servers/1234/action',
+ {
+ 'rebuild': {
+ 'imageRef': FAKE_UUID_1,
+ 'description': None,
+ 'hostname': 'new-hostname',
+ },
+ },
+ pos=3)
+ self.assert_called('GET', '/v2/images/%s' % FAKE_UUID_2, pos=4)
+
+ def test_rebuild_with_hostname_pre_v290(self):
+ self.assertRaises(
+ SystemExit, self.run_command,
+ 'rebuild sample-server %s --hostname hostname' % FAKE_UUID_1,
+ api_version='2.89')
+
def test_start(self):
self.run_command('start sample-server')
self.assert_called('POST', '/servers/1234/action', {'os-start': None})
@@ -2395,6 +2448,54 @@
self.assert_called('POST', '/servers/1234/action',
{'migrate': {'host': 'target-host'}})
+ def test_update(self):
+ self.run_command('update --name new-name sample-server')
+ expected_put_body = {
+ "server": {
+ "name": "new-name"
+ }
+ }
+ self.assert_called('GET', '/servers/1234', pos=-2)
+ self.assert_called('PUT', '/servers/1234', expected_put_body, pos=-1)
+
+ def test_update_with_description(self):
+ self.run_command(
+ 'update --description new-description sample-server',
+ api_version='2.19')
+ expected_put_body = {
+ "server": {
+ "description": "new-description"
+ }
+ }
+ self.assert_called('GET', '/servers/1234', pos=-2)
+ self.assert_called('PUT', '/servers/1234', expected_put_body, pos=-1)
+
+ def test_update_with_description_pre_v219(self):
+ self.assertRaises(
+ SystemExit,
+ self.run_command,
+ 'update --description new-description sample-server',
+ api_version='2.18')
+
+ def test_update_with_hostname(self):
+ self.run_command(
+ 'update --hostname new-hostname sample-server',
+ api_version='2.90')
+ expected_put_body = {
+ "server": {
+ "hostname": "new-hostname"
+ }
+ }
+ self.assert_called('GET', '/servers/1234', pos=-2)
+ self.assert_called('PUT', '/servers/1234', expected_put_body, pos=-1)
+
+ def test_update_with_hostname_pre_v290(self):
+ self.assertRaises(
+ SystemExit,
+ self.run_command,
+ 'update --hostname new-hostname sample-server',
+ api_version='2.89')
+
def test_resize(self):
self.run_command('resize sample-server 1')
self.assert_called('POST', '/servers/1234/action',
@@ -3994,6 +4095,24 @@
self.assert_called('GET', '/servers/1234/os-volume_attachments')
self.assertIn('DELETE ON TERMINATION', out)
+ def test_volume_attachments_pre_v2_89(self):
+ out = self.run_command(
+ 'volume-attachments 1234', api_version='2.88')[0]
+ self.assert_called('GET', '/servers/1234/os-volume_attachments')
+ # We can't assert just ID here as it's part of various other fields
+ self.assertIn('| ID', out)
+ self.assertNotIn('ATTACHMENT ID', out)
+ self.assertNotIn('BDM UUID', out)
+
+ def test_volume_attachments_v2_89(self):
+ out = self.run_command(
+ 'volume-attachments 1234', api_version='2.89')[0]
+ self.assert_called('GET', '/servers/1234/os-volume_attachments')
+ # We can't assert just ID here as it's part of various other fields
+ self.assertNotIn('| ID', out)
+ self.assertIn('ATTACHMENT ID', out)
+ self.assertIn('BDM UUID', out)
+
def test_volume_attach_with_delete_on_termination_pre_v2_79(self):
self.assertRaises(
SystemExit, self.run_command,
@@ -4577,6 +4696,7 @@
84, # There are no version-wrapped shell method changes for this.
86, # doesn't require any changes in novaclient.
87, # doesn't require any changes in novaclient.
+ 89, # There are no version-wrapped shell method changes for this.
])
versions_supported = set(range(0,
novaclient.API_MAX_VERSION.ver_minor + 1))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-novaclient-17.4.0/novaclient/v2/client.py
new/python-novaclient-17.6.0/novaclient/v2/client.py
--- old/python-novaclient-17.4.0/novaclient/v2/client.py 2021-03-11
20:47:21.000000000 +0100
+++ new/python-novaclient-17.6.0/novaclient/v2/client.py 2021-09-03
12:18:38.000000000 +0200
@@ -192,7 +192,7 @@
endpoint_type=endpoint_type,
http_log_debug=http_log_debug,
insecure=insecure,
- logger=logger,
+ logger=self.logger,
os_cache=self.os_cache,
password=password,
project_domain_id=project_domain_id,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-novaclient-17.4.0/novaclient/v2/servers.py
new/python-novaclient-17.6.0/novaclient/v2/servers.py
--- old/python-novaclient-17.4.0/novaclient/v2/servers.py 2021-03-11
20:47:21.000000000 +0100
+++ new/python-novaclient-17.6.0/novaclient/v2/servers.py 2021-09-03
12:18:38.000000000 +0200
@@ -67,17 +67,17 @@
@api_versions.wraps("2.0", "2.18")
def update(self, name=None):
"""
- Update the name for this server.
+ Update attributes of this server.
:param name: Update the server's name.
:returns: :class:`Server`
"""
return self.manager.update(self, name=name)
- @api_versions.wraps("2.19")
+ @api_versions.wraps("2.19", "2.89")
def update(self, name=None, description=None):
"""
- Update the name and the description for this server.
+ Update attributes of this server.
:param name: Update the server's name.
:param description: Update the server's description.
@@ -88,6 +88,23 @@
update_kwargs["description"] = description
return self.manager.update(self, **update_kwargs)
+ @api_versions.wraps("2.90")
+ def update(self, name=None, description=None, hostname=None):
+ """
+ Update attributes of this server.
+
+ :param name: Update the server's name.
+ :param description: Update the server's description.
+ :param hostname: Update the server's hostname.
+ :returns: :class:`Server`
+ """
+ update_kwargs = {"name": name}
+ if description is not None:
+ update_kwargs["description"] = description
+ if hostname is not None:
+ update_kwargs["hostname"] = hostname
+ return self.manager.update(self, **update_kwargs)
+
def get_console_output(self, length=None):
"""
Get text console log output from Server.
@@ -704,7 +721,7 @@
config_drive=None, admin_pass=None, disk_config=None,
access_ip_v4=None, access_ip_v6=None, description=None,
tags=None, trusted_image_certificates=None,
- host=None, hypervisor_hostname=None, **kwargs):
+ host=None, hypervisor_hostname=None, hostname=None, **kwargs):
"""
Create (boot) a new server.
"""
@@ -833,6 +850,9 @@
if hypervisor_hostname:
body['server']['hypervisor_hostname'] = hypervisor_hostname
+ if hostname:
+ body['server']['hostname'] = hostname
+
return self._create('/servers', body, response_key,
return_raw=return_raw, **kwargs)
@@ -1318,10 +1338,8 @@
config_drive=None, disk_config=None, admin_pass=None,
access_ip_v4=None, access_ip_v6=None,
trusted_image_certificates=None,
- host=None, hypervisor_hostname=None,
+ host=None, hypervisor_hostname=None, hostname=None,
**kwargs):
- # TODO(anthony): indicate in doc string if param is an extension
- # and/or optional
"""
Create (boot) a new server.
@@ -1390,6 +1408,8 @@
(allowed since microversion 2.74)
:param hypervisor_hostname: requested hypervisor hostname to create
servers (allowed since microversion 2.74)
+ :param hostname: requested hostname of server (allowed since
+ microversion 2.90)
"""
if not min_count:
min_count = 1
@@ -1453,6 +1473,10 @@
raise exceptions.UnsupportedAttribute(
"hypervisor_hostname", "2.74")
+ hostname_microversion = api_versions.APIVersion("2.90")
+ if hostname and self.api_version < hostname_microversion:
+ raise exceptions.UnsupportedAttribute("hostname", "2.90")
+
boot_kwargs = dict(
meta=meta, files=files, userdata=userdata,
reservation_id=reservation_id, min_count=min_count,
@@ -1463,7 +1487,7 @@
access_ip_v4=access_ip_v4, access_ip_v6=access_ip_v6,
trusted_image_certificates=trusted_image_certificates,
host=host, hypervisor_hostname=hypervisor_hostname,
- **kwargs)
+ hostname=hostname, **kwargs)
if block_device_mapping:
boot_kwargs['block_device_mapping'] = block_device_mapping
@@ -1479,10 +1503,11 @@
@api_versions.wraps("2.0", "2.18")
def update(self, server, name=None):
"""
- Update the name for a server.
+ Update attributes of a server.
:param server: The :class:`Server` (or its ID) to update.
:param name: Update the server's name.
+ :returns: :class:`Server`
"""
if name is None:
return
@@ -1495,15 +1520,16 @@
return self._update("/servers/%s" % base.getid(server), body, "server")
- @api_versions.wraps("2.19")
+ @api_versions.wraps("2.19", "2.89")
def update(self, server, name=None, description=None):
"""
- Update the name or the description for a server.
+ Update attributes of a server.
:param server: The :class:`Server` (or its ID) to update.
:param name: Update the server's name.
:param description: Update the server's description. If it equals to
empty string(i.g. ""), the server description will be removed.
+ :returns: :class:`Server`
"""
if name is None and description is None:
return
@@ -1518,6 +1544,36 @@
return self._update("/servers/%s" % base.getid(server), body, "server")
+ @api_versions.wraps("2.90")
+ def update(self, server, name=None, description=None, hostname=None):
+ """
+ Update attributes of a server.
+
+ :param server: The :class:`Server` (or its ID) to update.
+ :param name: Update the server's name.
+ :param description: Update the server's description. If it equals to
+ empty string(i.g. ""), the server description will be removed.
+ :param hostname: Update the server's hostname as recorded by the
+ metadata service. Note that a separate utility running on the
+ guest will be necessary to reflect these changes in the guest
+ itself.
+ :returns: :class:`Server`
+ """
+ if name is None and description is None and hostname is None:
+ return
+
+ body = {"server": {}}
+ if name:
+ body["server"]["name"] = name
+ if description == "":
+ body["server"]["description"] = None
+ elif description:
+ body["server"]["description"] = description
+ if hostname:
+ body["server"]["hostname"] = hostname
+
+ return self._update("/servers/%s" % base.getid(server), body, "server")
+
def change_password(self, server, password):
"""
Update the password for a server.
@@ -1548,6 +1604,7 @@
"""
return self._action('reboot', server, {'type': reboot_type})
+ # TODO(stephenfin): Expand out kwargs
def rebuild(self, server, image, password=None, disk_config=None,
preserve_ephemeral=False, name=None, meta=None, files=None,
**kwargs):
@@ -1555,34 +1612,36 @@
Rebuild -- shut down and then re-image -- a server.
:param server: The :class:`Server` (or its ID) to share onto.
- :param image: the :class:`Image` (or its ID) to re-image with.
- :param password: string to set as password on the rebuilt server.
- :param disk_config: partitioning mode to use on the rebuilt server.
- Valid values are 'AUTO' or 'MANUAL'
+ :param image: The :class:`Image` (or its ID) to re-image with.
+ :param password: String to set as password on the rebuilt server.
+ :param disk_config: Partitioning mode to use on the rebuilt server.
+ Valid values are 'AUTO' or 'MANUAL'
:param preserve_ephemeral: If True, request that any ephemeral device
be preserved when rebuilding the instance. Defaults to False.
:param name: Something to name the server.
:param meta: A dict of arbitrary key/value metadata to store for this
- server. Both keys and values must be <=255 characters.
+ server. Both keys and values must be <=255 characters.
:param files: A dict of files to overwrite on the server upon boot.
- Keys are file names (i.e. ``/etc/passwd``) and values
- are the file contents (either as a string or as a
- file-like object). A maximum of five entries is allowed,
- and each file must be 10k or less.
- (deprecated starting with microversion 2.57)
- :param description: optional description of the server (allowed since
- microversion 2.19)
- :param key_name: optional key pair name for rebuild operation; passing
- None will unset the key for the server instance
- (starting from microversion 2.54)
- :param userdata: optional user data to pass to be exposed by the
- metadata server; this can be a file type object as
- well or a string. If None is specified, the existing
- user_data is unset.
- (starting from microversion 2.57)
+ Keys are file names (i.e. ``/etc/passwd``) and values are the file
+ contents (either as a string or as a file-like object). A maximum
+ of five entries is allowed, and each file must be 10k or less.
+ (deprecated starting with microversion 2.57)
+ :param description: Optional description of the server. If None is
+ specified, the existing description will be unset.
+ (starting from microversion 2.19)
+ :param key_name: Optional key pair name for rebuild operation. If None
+ is specified, the existing key will be unset.
+ (starting from microversion 2.54)
+ :param userdata: Optional user data to pass to be exposed by the
+ metadata server; this can be a file type object as well or a
+ string. If None is specified, the existing user_data is unset.
+ (starting from microversion 2.57)
:param trusted_image_certificates: A list of trusted certificate IDs
- or None to unset/reset the servers trusted image
- certificates (allowed since microversion 2.63)
+ or None to unset/reset the servers trusted image certificates
+ (starting from microversion 2.63)
+ :param hostname: Optional hostname to configure for the instance. If
+ None is specified, the existing hostname will be unset.
+ (starting from microversion 2.90)
:returns: :class:`Server`
"""
descr_microversion = api_versions.APIVersion("2.19")
@@ -1612,6 +1671,12 @@
raise exceptions.UnsupportedAttribute("trusted_image_certificates",
"2.63")
+ if (
+ 'hostname' in kwargs and
+ self.api_version < api_versions.APIVersion("2.90")
+ ):
+ raise exceptions.UnsupportedAttribute('hostname', '2.90')
+
body = {'imageRef': base.getid(image)}
if password is not None:
body['adminPass'] = password
@@ -1628,6 +1693,8 @@
if "trusted_image_certificates" in kwargs:
body["trusted_image_certificates"] = kwargs[
"trusted_image_certificates"]
+ if "hostname" in kwargs:
+ body["hostname"] = kwargs["hostname"]
if meta:
body['metadata'] = meta
if files:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-novaclient-17.4.0/novaclient/v2/shell.py
new/python-novaclient-17.6.0/novaclient/v2/shell.py
--- old/python-novaclient-17.4.0/novaclient/v2/shell.py 2021-03-11
20:47:21.000000000 +0100
+++ new/python-novaclient-17.6.0/novaclient/v2/shell.py 2021-09-03
12:18:38.000000000 +0200
@@ -532,8 +532,10 @@
if include_files:
boot_kwargs['files'] = files
- if ('trusted_image_certificates' in args and
- args.trusted_image_certificates):
+ if (
+ 'trusted_image_certificates' in args and
+ args.trusted_image_certificates
+ ):
boot_kwargs['trusted_image_certificates'] = (
args.trusted_image_certificates)
elif utils.env('OS_TRUSTED_IMAGE_CERTIFICATE_IDS'):
@@ -545,6 +547,9 @@
"OS_TRUSTED_IMAGE_CERTIFICATE_IDS",
"2.63")
+ if 'hostname' in args and args.hostname:
+ boot_kwargs['hostname'] = args.hostname
+
return boot_args, boot_kwargs
@@ -970,6 +975,14 @@
help=_('Requested hypervisor hostname to create servers. Admin only by '
'default.'),
start_version="2.74")
[email protected](
+ '--hostname',
+ help=_(
+ 'Hostname for the instance. This sets the hostname stored in the '
+ 'metadata server: a utility such as cloud-init running on the guest '
+ 'is required to propagate these changes to the guest.'
+ ),
+ start_version='2.90')
def do_boot(cs, args):
"""Boot a new server."""
boot_args, boot_kwargs = _boot(cs, args)
@@ -2031,6 +2044,14 @@
help=_("Unset trusted_image_certificates in the server. Cannot be "
"specified with the '--trusted-image-certificate-id' option."),
start_version="2.63")
[email protected](
+ '--hostname',
+ help=_(
+ 'New hostname for the instance. This only updates the hostname '
+ 'stored in the metadata server: a utility running on the guest '
+ 'is required to propagate these changes to the guest.'
+ ),
+ start_version='2.90')
def do_rebuild(cs, args):
"""Shutdown, re-image, and re-boot a server."""
server = _find_server(cs, args.server)
@@ -2121,6 +2142,9 @@
"OS_TRUSTED_IMAGE_CERTIFICATE_IDS",
"2.63")
+ if 'hostname' in args and args.hostname is not None:
+ kwargs['hostname'] = args.hostname
+
server = server.rebuild(image, _password, **kwargs)
_print_server(cs, args, server)
@@ -2145,6 +2169,14 @@
help=_('New description for the server. If it equals to empty string '
'(i.g. ""), the server description will be removed.'),
start_version="2.19")
[email protected](
+ '--hostname',
+ help=_(
+ 'New hostname for the instance. This only updates the hostname '
+ 'stored in the metadata server: a utility running on the guest '
+ 'is required to propagate these changes to the guest.'
+ ),
+ start_version='2.90')
def do_update(cs, args):
"""Update the name or the description for a server."""
update_kwargs = {}
@@ -2152,6 +2184,8 @@
update_kwargs["name"] = args.name
if "description" in args and args.description is not None:
update_kwargs["description"] = args.description
+ if "hostname" in args and args.hostname is not None:
+ update_kwargs["hostname"] = args.hostname
_find_server(cs, args.server).update(**update_kwargs)
@@ -2800,6 +2834,10 @@
_translate_volume_attachments_keys(volumes)
# Microversion >= 2.70 returns the tag value.
fields = ['ID', 'DEVICE', 'SERVER ID', 'VOLUME ID']
+ if cs.api_version >= api_versions.APIVersion('2.89'):
+ fields.remove('ID')
+ fields.append('ATTACHMENT ID')
+ fields.append('BDM UUID')
if cs.api_version >= api_versions.APIVersion('2.70'):
fields.append('TAG')
# Microversion >= 2.79 returns the delete_on_termination value.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-novaclient-17.4.0/novaclient/v2/volumes.py
new/python-novaclient-17.6.0/novaclient/v2/volumes.py
--- old/python-novaclient-17.4.0/novaclient/v2/volumes.py 2021-03-11
20:47:21.000000000 +0100
+++ new/python-novaclient-17.6.0/novaclient/v2/volumes.py 2021-09-03
12:18:38.000000000 +0200
@@ -39,6 +39,20 @@
"""
resource_class = Volume
+ @staticmethod
+ def _get_request_body_for_create(volume_id, device=None, tag=None,
+ delete_on_termination=False):
+ body = {'volumeAttachment': {'volumeId': volume_id}}
+ if device is not None:
+ body['volumeAttachment']['device'] = device
+ if tag is not None:
+ body['volumeAttachment']['tag'] = tag
+ if delete_on_termination:
+ body['volumeAttachment']['delete_on_termination'] = (
+ delete_on_termination)
+
+ return body
+
@api_versions.wraps("2.0", "2.48")
def create_server_volume(self, server_id, volume_id, device=None):
"""
@@ -49,11 +63,10 @@
:param device: The device name (optional)
:rtype: :class:`Volume`
"""
- body = {'volumeAttachment': {'volumeId': volume_id}}
- if device is not None:
- body['volumeAttachment']['device'] = device
- return self._create("/servers/%s/os-volume_attachments" % server_id,
- body, "volumeAttachment")
+ return self._create(
+ "/servers/%s/os-volume_attachments" % server_id,
+ VolumeManager._get_request_body_for_create(volume_id, device),
+ "volumeAttachment")
@api_versions.wraps("2.49", "2.78")
def create_server_volume(self, server_id, volume_id, device=None,
@@ -67,13 +80,10 @@
:param tag: The tag (optional)
:rtype: :class:`Volume`
"""
- body = {'volumeAttachment': {'volumeId': volume_id}}
- if device is not None:
- body['volumeAttachment']['device'] = device
- if tag is not None:
- body['volumeAttachment']['tag'] = tag
- return self._create("/servers/%s/os-volume_attachments" % server_id,
- body, "volumeAttachment")
+ return self._create(
+ "/servers/%s/os-volume_attachments" % server_id,
+ VolumeManager._get_request_body_for_create(volume_id, device, tag),
+ "volumeAttachment")
@api_versions.wraps("2.79")
def create_server_volume(self, server_id, volume_id, device=None,
@@ -90,18 +100,11 @@
(optional).
:rtype: :class:`Volume`
"""
- # TODO(mriedem): Move this body construction into a private common
- # helper method for all versions of create_server_volume to use.
- body = {'volumeAttachment': {'volumeId': volume_id}}
- if device is not None:
- body['volumeAttachment']['device'] = device
- if tag is not None:
- body['volumeAttachment']['tag'] = tag
- if delete_on_termination:
- body['volumeAttachment']['delete_on_termination'] = (
- delete_on_termination)
- return self._create("/servers/%s/os-volume_attachments" % server_id,
- body, "volumeAttachment")
+ return self._create(
+ "/servers/%s/os-volume_attachments" % server_id,
+ VolumeManager._get_request_body_for_create(volume_id, device, tag,
+ delete_on_termination),
+ "volumeAttachment")
@api_versions.wraps("2.0", "2.84")
def update_server_volume(self, server_id, src_volid, dest_volid):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-novaclient-17.4.0/python_novaclient.egg-info/PKG-INFO
new/python-novaclient-17.6.0/python_novaclient.egg-info/PKG-INFO
--- old/python-novaclient-17.4.0/python_novaclient.egg-info/PKG-INFO
2021-03-11 20:48:00.000000000 +0100
+++ new/python-novaclient-17.6.0/python_novaclient.egg-info/PKG-INFO
2021-09-03 12:19:08.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.2
Name: python-novaclient
-Version: 17.4.0
+Version: 17.6.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.4.0/python_novaclient.egg-info/SOURCES.txt
new/python-novaclient-17.6.0/python_novaclient.egg-info/SOURCES.txt
--- old/python-novaclient-17.4.0/python_novaclient.egg-info/SOURCES.txt
2021-03-11 20:48:00.000000000 +0100
+++ new/python-novaclient-17.6.0/python_novaclient.egg-info/SOURCES.txt
2021-09-03 12:19:08.000000000 +0200
@@ -1,5 +1,6 @@
.coveragerc
.mailmap
+.pre-commit-config.yaml
.stestr.conf
.zuul.yaml
AUTHORS
@@ -266,7 +267,9 @@
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_90-259779668e67dfb5.yaml
releasenotes/notes/microversion_v2_70-09cbe0933b3a9335.yaml
+releasenotes/notes/microversion_v2_89-af6223273b2bdfb0.yaml
releasenotes/notes/no-glance-proxy-5c13001a4b13e8ce.yaml
releasenotes/notes/no-neutron-proxy-18fd54febe939a6b.yaml
releasenotes/notes/pike-rm-deprecated-img-d58e9ae2d774cbfc.yaml
@@ -314,6 +317,7 @@
releasenotes/source/unreleased.rst
releasenotes/source/ussuri.rst
releasenotes/source/victoria.rst
+releasenotes/source/wallaby.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.4.0/python_novaclient.egg-info/pbr.json
new/python-novaclient-17.6.0/python_novaclient.egg-info/pbr.json
--- old/python-novaclient-17.4.0/python_novaclient.egg-info/pbr.json
2021-03-11 20:48:00.000000000 +0100
+++ new/python-novaclient-17.6.0/python_novaclient.egg-info/pbr.json
2021-09-03 12:19:08.000000000 +0200
@@ -1 +1 @@
-{"git_version": "54d4da11", "is_release": true}
\ No newline at end of file
+{"git_version": "8066f8c7", "is_release": true}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-novaclient-17.4.0/releasenotes/notes/microversion-v2_88-d91136020e3a3621.yaml
new/python-novaclient-17.6.0/releasenotes/notes/microversion-v2_88-d91136020e3a3621.yaml
---
old/python-novaclient-17.4.0/releasenotes/notes/microversion-v2_88-d91136020e3a3621.yaml
2021-03-11 20:47:21.000000000 +0100
+++
new/python-novaclient-17.6.0/releasenotes/notes/microversion-v2_88-d91136020e3a3621.yaml
2021-09-03 12:18:38.000000000 +0200
@@ -7,7 +7,7 @@
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
+ .. _microversion 2.88:
https://docs.openstack.org/nova/latest/reference/api-microversion-history.html#microversion-2-88
deprecations:
- |
The ``nova hypervisor-stats`` command and underlying
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-novaclient-17.4.0/releasenotes/notes/microversion-v2_90-259779668e67dfb5.yaml
new/python-novaclient-17.6.0/releasenotes/notes/microversion-v2_90-259779668e67dfb5.yaml
---
old/python-novaclient-17.4.0/releasenotes/notes/microversion-v2_90-259779668e67dfb5.yaml
1970-01-01 01:00:00.000000000 +0100
+++
new/python-novaclient-17.6.0/releasenotes/notes/microversion-v2_90-259779668e67dfb5.yaml
2021-09-03 12:18:38.000000000 +0200
@@ -0,0 +1,13 @@
+---
+features:
+ - |
+ Added support for `microversion 2.90`_. This microversion provides the
+ ability to manually configure the instance ``hostname`` attribute when
+ creating a new instance (``nova boot --hostname HOSTNAME ...``), updating
+ an existing instance (``nova update --hostname HOSTNAME ...``), or
+ rebuilding an existing instance (``nova rebuild --hostname HOSTNAME``).
+ This attribute is published via the metadata service and config drive and
+ can be used by init scripts such as ``cloud-init`` to configure the guest's
+ hostname.
+
+ .. _microversion 2.90:
https://docs.openstack.org/nova/latest/reference/api-microversion-history.html#microversion-2-90
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-novaclient-17.4.0/releasenotes/notes/microversion_v2_89-af6223273b2bdfb0.yaml
new/python-novaclient-17.6.0/releasenotes/notes/microversion_v2_89-af6223273b2bdfb0.yaml
---
old/python-novaclient-17.4.0/releasenotes/notes/microversion_v2_89-af6223273b2bdfb0.yaml
1970-01-01 01:00:00.000000000 +0100
+++
new/python-novaclient-17.6.0/releasenotes/notes/microversion_v2_89-af6223273b2bdfb0.yaml
2021-09-03 12:18:38.000000000 +0200
@@ -0,0 +1,11 @@
+---
+features:
+ - |
+ Added support for `microversion 2.89`_. This microversion removes the
+ ``id`` field while adding the ``attachment_id`` and ``bdm_uuid`` fields to
+ the responses of ``GET /servers/{server_id}/os-volume_attachments`` and
+ ``GET /servers/{server_id}/os-volume_attachments/{volume_id}`` with these
+ changes reflected in novaclient under the ``nova volume-attachments``
+ command.
+
+ .. _microversion 2.89:
https://docs.openstack.org/nova/latest/reference/api-microversion-history.html#microversion-2-89
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-novaclient-17.4.0/releasenotes/source/index.rst
new/python-novaclient-17.6.0/releasenotes/source/index.rst
--- old/python-novaclient-17.4.0/releasenotes/source/index.rst 2021-03-11
20:47:21.000000000 +0100
+++ new/python-novaclient-17.6.0/releasenotes/source/index.rst 2021-09-03
12:18:38.000000000 +0200
@@ -8,6 +8,7 @@
:maxdepth: 2
unreleased
+ wallaby
victoria
ussuri
train
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-novaclient-17.4.0/releasenotes/source/wallaby.rst
new/python-novaclient-17.6.0/releasenotes/source/wallaby.rst
--- old/python-novaclient-17.4.0/releasenotes/source/wallaby.rst
1970-01-01 01:00:00.000000000 +0100
+++ new/python-novaclient-17.6.0/releasenotes/source/wallaby.rst
2021-09-03 12:18:38.000000000 +0200
@@ -0,0 +1,6 @@
+============================
+Wallaby Series Release Notes
+============================
+
+.. release-notes::
+ :branch: stable/wallaby
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-novaclient-17.4.0/setup.cfg
new/python-novaclient-17.6.0/setup.cfg
--- old/python-novaclient-17.4.0/setup.cfg 2021-03-11 20:48:00.661249600
+0100
+++ new/python-novaclient-17.6.0/setup.cfg 2021-09-03 12:19:08.998951000
+0200
@@ -1,13 +1,13 @@
[metadata]
name = python-novaclient
summary = Client library for OpenStack Compute API
-description-file =
+description_file =
README.rst
license = Apache License, Version 2.0
author = OpenStack
-author-email = [email protected]
-home-page = https://docs.openstack.org/python-novaclient/latest
-python-requires = >=3.6
+author_email = [email protected]
+home_page = https://docs.openstack.org/python-novaclient/latest
+python_requires = >=3.6
classifier =
Development Status :: 5 - Production/Stable
Environment :: Console
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-novaclient-17.4.0/tox.ini
new/python-novaclient-17.6.0/tox.ini
--- old/python-novaclient-17.4.0/tox.ini 2021-03-11 20:47:21.000000000
+0100
+++ new/python-novaclient-17.6.0/tox.ini 2021-09-03 12:18:38.000000000
+0200
@@ -1,6 +1,6 @@
[tox]
-envlist = py38,pep8,docs
-minversion = 3.1
+envlist = py3,pep8,docs
+minversion = 3.18.0
skipsdist = true
ignore_basepython_conflict = true
@@ -8,7 +8,7 @@
basepython = python3
usedevelop = true
# tox is silly... these need to be separated by a newline....
-whitelist_externals =
+allowlist_externals =
find
rm
make