Hello community, here is the log from the commit of package python-novaclient for openSUSE:Factory checked in at 2017-06-08 15:03:08 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-novaclient (Old) and /work/SRC/openSUSE:Factory/.python-novaclient.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-novaclient" Thu Jun 8 15:03:08 2017 rev:25 rq:501641 version:7.1.1 Changes: -------- --- /work/SRC/openSUSE:Factory/python-novaclient/python-novaclient.changes 2017-02-21 13:46:28.297112573 +0100 +++ /work/SRC/openSUSE:Factory/.python-novaclient.new/python-novaclient.changes 2017-06-08 15:03:09.161756798 +0200 @@ -1,0 +2,13 @@ +Wed Jun 7 09:49:44 UTC 2017 - [email protected] + +- update to version 7.1.1 + - Fix cinder volume leakage + - Fix ValueError when incorrect metadata passed + - Fix devstack python-novaclient warning + - Fix aggregate_update name and availability_zone clash + - Update .gitreview for stable/ocata + - Update UPPER_CONSTRAINTS_FILE for stable/ocata + - Updated from global requirements + - Tags and Metadata fields with unicode cannot be correctly displayed + +------------------------------------------------------------------- Old: ---- python-novaclient-7.1.0.tar.gz New: ---- python-novaclient-7.1.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-novaclient.spec ++++++ --- /var/tmp/diff_new_pack.PC8PD9/_old 2017-06-08 15:03:09.913650684 +0200 +++ /var/tmp/diff_new_pack.PC8PD9/_new 2017-06-08 15:03:09.913650684 +0200 @@ -17,7 +17,7 @@ Name: python-novaclient -Version: 7.1.0 +Version: 7.1.1 Release: 0 Summary: Python API and CLI for OpenStack Nova License: Apache-2.0 @@ -44,7 +44,7 @@ Requires: python-Babel >= 2.3.4 Requires: python-PrettyTable >= 0.7.1 Requires: python-iso8601 >= 0.1.11 -Requires: python-keystoneauth1 >= 2.17.0 +Requires: python-keystoneauth1 >= 2.18.0 Requires: python-oslo.i18n >= 2.1.0 Requires: python-oslo.serialization >= 1.10.0 Requires: python-oslo.utils >= 3.18.0 ++++++ python-novaclient-7.1.0.tar.gz -> python-novaclient-7.1.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-novaclient-7.1.0/AUTHORS new/python-novaclient-7.1.1/AUTHORS --- old/python-novaclient-7.1.0/AUTHORS 2017-01-26 23:25:19.000000000 +0100 +++ new/python-novaclient-7.1.1/AUTHORS 2017-05-08 23:49:59.000000000 +0200 @@ -108,6 +108,7 @@ David Wittman <[email protected]> Dean Troyer <[email protected]> Diana Clarke <[email protected]> +Dinesh Bhor <[email protected]> Dirk Mueller <[email protected]> Dominik Heidler <[email protected]> Doug Hellmann <[email protected]> @@ -247,6 +248,7 @@ Noorul Islam K M <[email protected]> Ollie Leahy <[email protected]> Ondřej Nový <[email protected]> +OpenStack Release Bot <[email protected]> Paul Voccio <[email protected]> Paul Voccio <[email protected]> Pavel Kholkin <[email protected]> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-novaclient-7.1.0/ChangeLog new/python-novaclient-7.1.1/ChangeLog --- old/python-novaclient-7.1.0/ChangeLog 2017-01-26 23:25:19.000000000 +0100 +++ new/python-novaclient-7.1.1/ChangeLog 2017-05-08 23:49:59.000000000 +0200 @@ -1,6 +1,18 @@ CHANGES ======= +7.1.1 +----- + +* Fix devstack python-novaclient warning +* Fix cinder volume leakage +* Updated from global requirements +* Fix aggregate_update name and availability_zone clash +* Fix ValueError when incorrect metadata passed +* Update UPPER_CONSTRAINTS_FILE for stable/ocata +* Tags and Metadata fields with unicode cannot be correctly displayed +* Update .gitreview for stable/ocata + 7.1.0 ----- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-novaclient-7.1.0/PKG-INFO new/python-novaclient-7.1.1/PKG-INFO --- old/python-novaclient-7.1.0/PKG-INFO 2017-01-26 23:25:20.000000000 +0100 +++ new/python-novaclient-7.1.1/PKG-INFO 2017-05-08 23:50:00.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: python-novaclient -Version: 7.1.0 +Version: 7.1.1 Summary: Client library for OpenStack Compute API Home-page: http://docs.openstack.org/developer/python-novaclient Author: OpenStack diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-novaclient-7.1.0/novaclient/shell.py new/python-novaclient-7.1.1/novaclient/shell.py --- old/python-novaclient-7.1.0/novaclient/shell.py 2017-01-26 23:24:23.000000000 +0100 +++ new/python-novaclient-7.1.1/novaclient/shell.py 2017-05-08 23:48:26.000000000 +0200 @@ -840,8 +840,8 @@ # Recreate client object with discovered version. self.cs = client.Client( api_version, - os_username, os_password, os_project_name, - tenant_id=os_project_id, user_id=os_user_id, + os_username, os_password, project_id=os_project_id, + project_name=os_project_name, user_id=os_user_id, auth_url=os_auth_url, insecure=insecure, region_name=os_region_name, endpoint_type=endpoint_type, extensions=self.extensions, service_type=service_type, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-novaclient-7.1.0/novaclient/tests/functional/v2/legacy/test_servers.py new/python-novaclient-7.1.1/novaclient/tests/functional/v2/legacy/test_servers.py --- old/python-novaclient-7.1.0/novaclient/tests/functional/v2/legacy/test_servers.py 2017-01-26 23:24:23.000000000 +0100 +++ new/python-novaclient-7.1.1/novaclient/tests/functional/v2/legacy/test_servers.py 2017-05-08 23:48:27.000000000 +0200 @@ -31,6 +31,11 @@ imageRef=self.image.id) self.wait_for_volume_status(volume, "available") + if (len(bdm_params) >= 3 and bdm_params[2] == '1'): + delete_volume = False + else: + delete_volume = True + bdm_params = ':'.join(bdm_params) if bdm_params: bdm_params = ''.join((':', bdm_params)) @@ -51,6 +56,10 @@ self.client.servers.delete(server_id) self.wait_for_resource_delete(server_id, self.client.servers) + if delete_volume: + self.cinder.volumes.delete(volume.id) + self.wait_for_resource_delete(volume.id, self.cinder.volumes) + def test_boot_server_with_legacy_bdm(self): # bdm v1 format # <id>:<type>:<size(GB)>:<delete-on-terminate> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-novaclient-7.1.0/novaclient/tests/functional/v2/test_aggregates.py new/python-novaclient-7.1.1/novaclient/tests/functional/v2/test_aggregates.py --- old/python-novaclient-7.1.0/novaclient/tests/functional/v2/test_aggregates.py 1970-01-01 01:00:00.000000000 +0100 +++ new/python-novaclient-7.1.1/novaclient/tests/functional/v2/test_aggregates.py 2017-05-08 23:48:27.000000000 +0200 @@ -0,0 +1,64 @@ +# -*- coding: utf-8 -*- +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from oslo_utils import uuidutils + +from novaclient.tests.functional import base + + +class TestAggregatesNovaClient(base.ClientTestBase): + COMPUTE_API_VERSION = '2.1' + + def setUp(self): + super(TestAggregatesNovaClient, self).setUp() + self.agg1 = 'agg-%s' % uuidutils.generate_uuid() + self.agg2 = 'agg-%s' % uuidutils.generate_uuid() + self.addCleanup(self._clean_aggregates) + + def _clean_aggregates(self): + for a in (self.agg1, self.agg2): + try: + self.nova('aggregate-delete', params=a) + except Exception: + pass + + def test_aggregate_update_name_legacy(self): + self.nova('aggregate-create', params=self.agg1) + self.nova('aggregate-update', params='%s %s' % (self.agg1, self.agg2)) + output = self.nova('aggregate-show', params=self.agg2) + self.assertIn(self.agg2, output) + self.nova('aggregate-delete', params=self.agg2) + + def test_aggregate_update_name(self): + self.nova('aggregate-create', params=self.agg1) + self.nova('aggregate-update', + params='--name=%s %s' % (self.agg2, self.agg1)) + output = self.nova('aggregate-show', params=self.agg2) + self.assertIn(self.agg2, output) + self.nova('aggregate-delete', params=self.agg2) + + def test_aggregate_update_az_legacy(self): + self.nova('aggregate-create', params=self.agg2) + self.nova('aggregate-update', + params='%s %s myaz' % (self.agg2, self.agg2)) + output = self.nova('aggregate-show', params=self.agg2) + self.assertIn('myaz', output) + self.nova('aggregate-delete', params=self.agg2) + + def test_aggregate_update_az(self): + self.nova('aggregate-create', params=self.agg2) + self.nova('aggregate-update', + params='--availability-zone=myaz %s' % self.agg2) + output = self.nova('aggregate-show', params=self.agg2) + self.assertIn('myaz', output) + self.nova('aggregate-delete', params=self.agg2) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-novaclient-7.1.0/novaclient/tests/functional/v2/test_servers.py new/python-novaclient-7.1.1/novaclient/tests/functional/v2/test_servers.py --- old/python-novaclient-7.1.0/novaclient/tests/functional/v2/test_servers.py 2017-01-26 23:24:23.000000000 +0100 +++ new/python-novaclient-7.1.1/novaclient/tests/functional/v2/test_servers.py 2017-05-08 23:48:26.000000000 +0200 @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at @@ -134,9 +135,9 @@ COMPUTE_API_VERSION = "2.26" - def _boot_server_with_tags(self): + def _boot_server_with_tags(self, tags=["t1", "t2"]): uuid = self._create_server().id - self.client.servers.set_tags(uuid, ["t1", "t2"]) + self.client.servers.set_tags(uuid, tags) return uuid def test_show(self): @@ -145,6 +146,20 @@ self.assertEqual('["t1", "t2"]', self._get_value_from_the_table( output, "tags")) + def test_unicode_tag_correctly_displayed(self): + """Regression test for bug #1669683. + + List and dict fields with unicode cannot be correctly + displayed. + + Ensure that once we fix this it doesn't regress. + """ + # create an instance with chinese tag + uuid = self._boot_server_with_tags(tags=["中文标签"]) + output = self.nova("show %s" % uuid) + self.assertEqual('["中文标签"]', self._get_value_from_the_table( + output, "tags")) + def test_list(self): uuid = self._boot_server_with_tags() output = self.nova("server-tag-list %s" % uuid) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-novaclient-7.1.0/novaclient/tests/unit/v2/test_shell.py new/python-novaclient-7.1.1/novaclient/tests/unit/v2/test_shell.py --- old/python-novaclient-7.1.0/novaclient/tests/unit/v2/test_shell.py 2017-01-26 23:24:23.000000000 +0100 +++ new/python-novaclient-7.1.1/novaclient/tests/unit/v2/test_shell.py 2017-05-08 23:48:27.000000000 +0200 @@ -614,6 +614,14 @@ }}, ) + def test_boot_with_incorrect_metadata(self): + cmd = ('boot --image %s --flavor 1 --meta foo ' + 'some-server ' % FAKE_UUID_1) + result = self.assertRaises(argparse.ArgumentTypeError, + self.run_command, cmd) + expected = "'['foo']' is not in the format of 'key=value'" + self.assertEqual(expected, result.args[0]) + def test_boot_hints(self): self.run_command('boot --image %s --flavor 1 ' '--hint a=b0=c0 --hint a=b1=c1 some-server ' % @@ -1235,6 +1243,13 @@ {'createImage': {'name': 'mysnapshot', 'metadata': {}}}, ) + def test_create_image_with_incorrect_metadata(self): + cmd = 'image-create sample-server mysnapshot --metadata foo' + result = self.assertRaises(argparse.ArgumentTypeError, + self.run_command, cmd) + expected = "'['foo']' is not in the format of 'key=value'" + self.assertEqual(expected, result.args[0]) + def test_create_image_with_metadata(self): self.run_command( 'image-create sample-server mysnapshot --metadata mykey=123') @@ -1483,6 +1498,13 @@ self.assert_called('GET', '/flavors/1', pos=4) self.assert_called('GET', '/v2/images/%s' % FAKE_UUID_2, pos=5) + def test_rebuild_with_incorrect_metadata(self): + cmd = 'rebuild sample-server %s --name asdf --meta foo' % FAKE_UUID_1 + result = self.assertRaises(argparse.ArgumentTypeError, + self.run_command, cmd) + expected = "'['foo']' is not in the format of 'key=value'" + self.assertEqual(expected, result.args[0]) + def test_start(self): self.run_command('start sample-server') self.assert_called('POST', '/servers/1234/action', {'os-start': None}) @@ -2015,30 +2037,6 @@ body = {"aggregate": {"name": "foo", "availability_zone": "new_zone"}} self.assert_called('PUT', '/os-aggregates/1', body, pos=-2) self.assert_called('GET', '/os-aggregates/1', pos=-1) - - def test_aggregate_update_by_id_legacy(self): - self.run_command('aggregate-update 1 new_name') - body = {"aggregate": {"name": "new_name"}} - self.assert_called('PUT', '/os-aggregates/1', body, pos=-2) - self.assert_called('GET', '/os-aggregates/1', pos=-1) - - def test_aggregate_update_by_name_legacy(self): - self.run_command('aggregate-update test new_name') - body = {"aggregate": {"name": "new_name"}} - self.assert_called('PUT', '/os-aggregates/1', body, pos=-2) - self.assert_called('GET', '/os-aggregates/1', pos=-1) - - def test_aggregate_update_with_availability_zone_by_id_legacy(self): - self.run_command('aggregate-update 1 foo new_zone') - body = {"aggregate": {"name": "foo", "availability_zone": "new_zone"}} - self.assert_called('PUT', '/os-aggregates/1', body, pos=-2) - self.assert_called('GET', '/os-aggregates/1', pos=-1) - - def test_aggregate_update_with_availability_zone_by_name_legacy(self): - self.run_command('aggregate-update test foo new_zone') - body = {"aggregate": {"name": "foo", "availability_zone": "new_zone"}} - self.assert_called('PUT', '/os-aggregates/1', body, pos=-2) - self.assert_called('GET', '/os-aggregates/1', pos=-1) def test_aggregate_set_metadata_add_by_id(self): out, err = self.run_command('aggregate-set-metadata 3 foo=bar') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-novaclient-7.1.0/novaclient/utils.py new/python-novaclient-7.1.1/novaclient/utils.py --- old/python-novaclient-7.1.0/novaclient/utils.py 2017-01-26 23:24:23.000000000 +0100 +++ new/python-novaclient-7.1.1/novaclient/utils.py 2017-05-08 23:48:26.000000000 +0200 @@ -246,7 +246,7 @@ for k, v in sorted(d.items()): # convert dict to str to check length if isinstance(v, (dict, list)): - v = jsonutils.dumps(v) + v = jsonutils.dumps(v, ensure_ascii=False) if wrap > 0: v = textwrap.fill(six.text_type(v), wrap) # if value has a newline, add in multiple rows diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-novaclient-7.1.0/novaclient/v2/shell.py new/python-novaclient-7.1.1/novaclient/v2/shell.py --- old/python-novaclient-7.1.0/novaclient/v2/shell.py 2017-01-26 23:24:23.000000000 +0100 +++ new/python-novaclient-7.1.1/novaclient/v2/shell.py 2017-05-08 23:48:27.000000000 +0200 @@ -114,7 +114,11 @@ def _meta_parsing(metadata): - return dict(v.split('=', 1) for v in metadata) + try: + return dict(v.split('=', 1) for v in metadata) + except ValueError: + msg = _("'%s' is not in the format of 'key=value'") % metadata + raise argparse.ArgumentTypeError(msg) def _match_image(cs, wanted_properties): @@ -3771,7 +3775,8 @@ metavar='<aggregate>', help=_('Name or ID of aggregate to update.')) @utils.arg( - 'name', + 'old_name', + metavar='<name>', nargs='?', action=shell.DeprecatedAction, use=_('use "%s"; this option will be removed in ' @@ -3782,7 +3787,7 @@ dest='name', help=_('Name of aggregate.')) @utils.arg( - 'availability_zone', + 'old_availability_zone', metavar='<availability-zone>', nargs='?', default=None, @@ -3799,10 +3804,11 @@ """Update the aggregate's name and optionally availability zone.""" aggregate = _find_aggregate(cs, args.aggregate) updates = {} - if args.name: - updates["name"] = args.name - if args.availability_zone: - updates["availability_zone"] = args.availability_zone + if args.name or args.old_name: + updates["name"] = args.name or args.old_name + if args.availability_zone or args.old_availability_zone: + updates["availability_zone"] = (args.availability_zone or + args.old_availability_zone) aggregate = cs.aggregates.update(aggregate.id, updates) print(_("Aggregate %s has been successfully updated.") % aggregate.id) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-novaclient-7.1.0/python_novaclient.egg-info/PKG-INFO new/python-novaclient-7.1.1/python_novaclient.egg-info/PKG-INFO --- old/python-novaclient-7.1.0/python_novaclient.egg-info/PKG-INFO 2017-01-26 23:25:19.000000000 +0100 +++ new/python-novaclient-7.1.1/python_novaclient.egg-info/PKG-INFO 2017-05-08 23:49:59.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: python-novaclient -Version: 7.1.0 +Version: 7.1.1 Summary: Client library for OpenStack Compute API Home-page: http://docs.openstack.org/developer/python-novaclient Author: OpenStack diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-novaclient-7.1.0/python_novaclient.egg-info/SOURCES.txt new/python-novaclient-7.1.1/python_novaclient.egg-info/SOURCES.txt --- old/python-novaclient-7.1.0/python_novaclient.egg-info/SOURCES.txt 2017-01-26 23:25:20.000000000 +0100 +++ new/python-novaclient-7.1.1/python_novaclient.egg-info/SOURCES.txt 2017-05-08 23:50:00.000000000 +0200 @@ -43,6 +43,7 @@ novaclient/tests/functional/hooks/post_test_hook.sh novaclient/tests/functional/v2/__init__.py novaclient/tests/functional/v2/fake_crypto.py +novaclient/tests/functional/v2/test_aggregates.py novaclient/tests/functional/v2/test_consoles.py novaclient/tests/functional/v2/test_device_tagging.py novaclient/tests/functional/v2/test_extended_attributes.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-novaclient-7.1.0/python_novaclient.egg-info/pbr.json new/python-novaclient-7.1.1/python_novaclient.egg-info/pbr.json --- old/python-novaclient-7.1.0/python_novaclient.egg-info/pbr.json 2017-01-26 23:25:19.000000000 +0100 +++ new/python-novaclient-7.1.1/python_novaclient.egg-info/pbr.json 2017-05-08 23:49:59.000000000 +0200 @@ -1 +1 @@ -{"is_release": true, "git_version": "f6e0128"} \ No newline at end of file +{"is_release": true, "git_version": "0063ebc"} \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-novaclient-7.1.0/python_novaclient.egg-info/requires.txt new/python-novaclient-7.1.1/python_novaclient.egg-info/requires.txt --- old/python-novaclient-7.1.0/python_novaclient.egg-info/requires.txt 2017-01-26 23:25:19.000000000 +0100 +++ new/python-novaclient-7.1.1/python_novaclient.egg-info/requires.txt 2017-05-08 23:49:59.000000000 +0200 @@ -1,4 +1,4 @@ -pbr>=1.8 +pbr<2.0.0,>=1.8 keystoneauth1>=2.18.0 iso8601>=0.1.11 oslo.i18n>=2.1.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-novaclient-7.1.0/requirements.txt new/python-novaclient-7.1.1/requirements.txt --- old/python-novaclient-7.1.0/requirements.txt 2017-01-26 23:24:23.000000000 +0100 +++ new/python-novaclient-7.1.1/requirements.txt 2017-05-08 23:48:27.000000000 +0200 @@ -1,7 +1,7 @@ # The order of packages is significant, because pip processes them in the order # of appearance. Changing the order has an impact on the overall integration # process, which may cause wedges in the gate later. -pbr>=1.8 # Apache-2.0 +pbr<2.0.0,>=1.8 # Apache-2.0 keystoneauth1>=2.18.0 # Apache-2.0 iso8601>=0.1.11 # MIT oslo.i18n>=2.1.0 # Apache-2.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-novaclient-7.1.0/tox.ini new/python-novaclient-7.1.1/tox.ini --- old/python-novaclient-7.1.0/tox.ini 2017-01-26 23:24:23.000000000 +0100 +++ new/python-novaclient-7.1.1/tox.ini 2017-05-08 23:48:27.000000000 +0200 @@ -11,9 +11,9 @@ bash passenv = ZUUL_CACHE_DIR REQUIREMENTS_PIP_LOCATION -install_command = {toxinidir}/tools/tox_install.sh {env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt} {opts} {packages} +install_command = {toxinidir}/tools/tox_install.sh {env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt?h=stable/ocata} {opts} {packages} setenv = VIRTUAL_ENV={envdir} - BRANCH_NAME=master + BRANCH_NAME=stable/ocata CLIENT_NAME=python-novaclient deps = -r{toxinidir}/test-requirements.txt
