Hello community, here is the log from the commit of package python-openstackclient for openSUSE:Factory checked in at 2018-12-06 12:17:26 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-openstackclient (Old) and /work/SRC/openSUSE:Factory/.python-openstackclient.new.19453 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-openstackclient" Thu Dec 6 12:17:26 2018 rev:17 rq:655280 version:3.16.2 Changes: -------- --- /work/SRC/openSUSE:Factory/python-openstackclient/python-openstackclient.changes 2018-11-29 23:01:15.147443396 +0100 +++ /work/SRC/openSUSE:Factory/.python-openstackclient.new.19453/python-openstackclient.changes 2018-12-06 12:17:29.289508768 +0100 @@ -1,0 +2,9 @@ +Wed Dec 5 09:50:05 UTC 2018 - cloud-de...@suse.de + +- update to version 3.16.2 + - Fix 'project purge' deleting wrong project's servers and volumes + - Allow endpoint filtering on both project and project-domain + - Handle multiple ports in AddFloatingIP + - Default --nic to 'auto' if creating a server with >= 2.37 + +------------------------------------------------------------------- Old: ---- python-openstackclient-3.16.1.tar.gz New: ---- python-openstackclient-3.16.2.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-openstackclient.spec ++++++ --- /var/tmp/diff_new_pack.sPAOlV/_old 2018-12-06 12:17:29.801508218 +0100 +++ /var/tmp/diff_new_pack.sPAOlV/_new 2018-12-06 12:17:29.801508218 +0100 @@ -17,13 +17,13 @@ Name: python-openstackclient -Version: 3.16.1 +Version: 3.16.2 Release: 0 Summary: OpenStack Command-line Client License: Apache-2.0 Group: Development/Languages/Python URL: https://launchpad.net/python-openstackclient -Source0: https://files.pythonhosted.org/packages/source/p/python-openstackclient/python-openstackclient-3.16.1.tar.gz +Source0: https://files.pythonhosted.org/packages/source/p/python-openstackclient/python-openstackclient-3.16.2.tar.gz BuildRequires: openstack-macros BuildRequires: python-devel BuildRequires: python2-cinderclient >= 3.3.0 @@ -122,15 +122,15 @@ This package contains auto-generated documentation. %prep -%autosetup -p1 -n python-openstackclient-3.16.1 +%autosetup -p1 -n python-openstackclient-3.16.2 %py_req_cleanup sed -i 's/^warning-is-error.*/warning-is-error = 0/g' setup.cfg %build %{python_build} -PBR_VERSION=3.16.1 sphinx-build -b html doc/source doc/build/html -PBR_VERSION=3.16.1 sphinx-build -b man doc/source doc/build/man +PBR_VERSION=3.16.2 sphinx-build -b html doc/source doc/build/html +PBR_VERSION=3.16.2 sphinx-build -b man doc/source doc/build/man # remove the sphinx-build leftovers rm -rf doc/build/html/.{doctrees,buildinfo} ++++++ python-openstackclient-3.16.1.tar.gz -> python-openstackclient-3.16.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-openstackclient-3.16.1/AUTHORS new/python-openstackclient-3.16.2/AUTHORS --- old/python-openstackclient-3.16.1/AUTHORS 2018-09-05 21:39:11.000000000 +0200 +++ new/python-openstackclient-3.16.2/AUTHORS 2018-11-19 21:59:57.000000000 +0100 @@ -303,7 +303,6 @@ ZhaoBo <zhao...@huawei.com> Zhenguo Niu <niu.zgli...@gmail.com> Zhou Zhihong <zhouzhih...@cmss.chinamobile.com> -Zuul <z...@review.openstack.org> adrian-turjak <adri...@catalyst.net.nz> blue55 <yl...@fiberhome.com> caoyuan <cao.y...@99cloud.net> @@ -339,6 +338,7 @@ liyingjun <liyingjun1...@gmail.com> lrqrun <lrq...@gmail.com> lvjiawei <lvjia...@cmss.chinamobile.com> +melanie witt <melwi...@gmail.com> melissaml <ma....@99cloud.net> nidhimittalhada <nidhimitta...@gmail.com> npraveen35 <npravee...@gmail.com> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-openstackclient-3.16.1/ChangeLog new/python-openstackclient-3.16.2/ChangeLog --- old/python-openstackclient-3.16.1/ChangeLog 2018-09-05 21:39:11.000000000 +0200 +++ new/python-openstackclient-3.16.2/ChangeLog 2018-11-19 21:59:57.000000000 +0100 @@ -1,6 +1,14 @@ CHANGES ======= +3.16.2 +------ + +* Handle multiple ports in AddFloatingIP +* Default --nic to 'auto' if creating a server with >= 2.37 +* Allow endpoint filtering on both project and project-domain +* Fix 'project purge' deleting wrong project's servers and volumes + 3.16.1 ------ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-openstackclient-3.16.1/PKG-INFO new/python-openstackclient-3.16.2/PKG-INFO --- old/python-openstackclient-3.16.1/PKG-INFO 2018-09-05 21:39:16.000000000 +0200 +++ new/python-openstackclient-3.16.2/PKG-INFO 2018-11-19 21:59:58.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: python-openstackclient -Version: 3.16.1 +Version: 3.16.2 Summary: OpenStack Command-line Client Home-page: https://docs.openstack.org/python-openstackclient/latest/ Author: OpenStack diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-openstackclient-3.16.1/RELEASENOTES.rst new/python-openstackclient-3.16.2/RELEASENOTES.rst --- old/python-openstackclient-3.16.1/RELEASENOTES.rst 2018-09-05 21:39:16.000000000 +0200 +++ new/python-openstackclient-3.16.2/RELEASENOTES.rst 1970-01-01 01:00:00.000000000 +0100 @@ -1,3 +0,0 @@ -====================== -python-openstackclient -====================== diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-openstackclient-3.16.1/openstackclient/common/project_purge.py new/python-openstackclient-3.16.2/openstackclient/common/project_purge.py --- old/python-openstackclient-3.16.1/openstackclient/common/project_purge.py 2018-09-05 21:35:12.000000000 +0200 +++ new/python-openstackclient-3.16.2/openstackclient/common/project_purge.py 2018-11-19 21:57:57.000000000 +0100 @@ -85,7 +85,7 @@ # servers try: compute_client = self.app.client_manager.compute - search_opts = {'tenant_id': project_id} + search_opts = {'tenant_id': project_id, 'all_tenants': True} data = compute_client.servers.list(search_opts=search_opts) self.delete_objects( compute_client.servers.delete, data, 'server', dry_run) @@ -110,7 +110,7 @@ # volumes, snapshots, backups volume_client = self.app.client_manager.volume - search_opts = {'project_id': project_id} + search_opts = {'project_id': project_id, 'all_tenants': True} try: data = volume_client.volume_snapshots.list(search_opts=search_opts) self.delete_objects( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-openstackclient-3.16.1/openstackclient/compute/v2/server.py new/python-openstackclient-3.16.2/openstackclient/compute/v2/server.py --- old/python-openstackclient-3.16.1/openstackclient/compute/v2/server.py 2018-09-05 21:35:12.000000000 +0200 +++ new/python-openstackclient-3.16.2/openstackclient/compute/v2/server.py 2018-11-19 21:58:02.000000000 +0100 @@ -23,6 +23,7 @@ from novaclient import api_versions from novaclient.v2 import servers +from openstack import exceptions as sdk_exceptions from osc_lib.cli import parseractions from osc_lib.command import command from osc_lib import exceptions @@ -251,13 +252,16 @@ parser.add_argument( "ip_address", metavar="<ip-address>", - help=_("Floating IP address to assign to server (IP only)"), + help=_("Floating IP address to assign to the first available " + "server port (IP only)"), ) parser.add_argument( "--fixed-ip-address", metavar="<ip-address>", help=_( - "Fixed IP address to associate with this floating IP address" + "Fixed IP address to associate with this floating IP address. " + "The first server port containing the fixed IP address will " + "be used" ), ) return parser @@ -274,12 +278,45 @@ compute_client.servers, parsed_args.server, ) - port = list(client.ports(device_id=server.id))[0] - attrs['port_id'] = port.id + ports = list(client.ports(device_id=server.id)) + # If the fixed IP address was specified, we need to find the + # corresponding port. if parsed_args.fixed_ip_address: - attrs['fixed_ip_address'] = parsed_args.fixed_ip_address - - client.update_ip(obj, **attrs) + fip_address = parsed_args.fixed_ip_address + attrs['fixed_ip_address'] = fip_address + for port in ports: + for ip in port.fixed_ips: + if ip['ip_address'] == fip_address: + attrs['port_id'] = port.id + break + else: + continue + break + if 'port_id' not in attrs: + msg = _('No port found for fixed IP address %s') + raise exceptions.CommandError(msg % fip_address) + client.update_ip(obj, **attrs) + else: + # It's possible that one or more ports are not connected to a + # router and thus could fail association with a floating IP. + # Try each port until one succeeds. If none succeed, re-raise the + # last exception. + error = None + for port in ports: + attrs['port_id'] = port.id + try: + client.update_ip(obj, **attrs) + except sdk_exceptions.NotFoundException as exp: + # 404 ExternalGatewayForFloatingIPNotFound from neutron + LOG.info('Skipped port %s because it is not attached to ' + 'an external gateway', port.id) + error = exp + continue + else: + error = None + break + if error: + raise error def take_action_compute(self, client, parsed_args): client.api.floating_ip_add( @@ -809,9 +846,14 @@ raise exceptions.CommandError(msg) nics = nics[0] else: - # Default to empty list if nothing was specified, let nova side to - # decide the default behavior. - nics = [] + # Compute API version >= 2.37 requires a value, so default to + # 'auto' to maintain legacy behavior if a nic wasn't specified. + if compute_client.api_version >= api_versions.APIVersion('2.37'): + nics = 'auto' + else: + # Default to empty list if nothing was specified, let nova + # side to decide the default behavior. + nics = [] # Check security group exist and convert ID to name security_group_names = [] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-openstackclient-3.16.1/openstackclient/identity/v3/endpoint.py new/python-openstackclient-3.16.2/openstackclient/identity/v3/endpoint.py --- old/python-openstackclient-3.16.1/openstackclient/identity/v3/endpoint.py 2018-09-05 21:35:12.000000000 +0200 +++ new/python-openstackclient-3.16.2/openstackclient/identity/v3/endpoint.py 2018-11-19 21:57:57.000000000 +0100 @@ -199,7 +199,7 @@ metavar='<project>', help=_('Project to list filters (name or ID)'), ) - common.add_project_domain_option_to_parser(list_group) + common.add_project_domain_option_to_parser(parser) return parser def take_action(self, parsed_args): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-openstackclient-3.16.1/openstackclient/tests/functional/compute/v2/test_server.py new/python-openstackclient-3.16.2/openstackclient/tests/functional/compute/v2/test_server.py --- old/python-openstackclient-3.16.1/openstackclient/tests/functional/compute/v2/test_server.py 2018-09-05 21:35:12.000000000 +0200 +++ new/python-openstackclient-3.16.2/openstackclient/tests/functional/compute/v2/test_server.py 2018-11-19 21:57:57.000000000 +0100 @@ -618,7 +618,9 @@ server_name ) except exceptions.CommandFailed as e: - self.assertIn('nics are required after microversion 2.36', - e.stderr) - else: - self.fail('CommandFailed should be raised.') + # If we got here, it shouldn't be because a nics value wasn't + # provided to the server; it is likely due to something else in + # the functional tests like there being multiple available + # networks and the test didn't specify a specific network. + self.assertNotIn('nics are required after microversion 2.36', + e.stderr) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-openstackclient-3.16.1/openstackclient/tests/unit/common/test_project_purge.py new/python-openstackclient-3.16.2/openstackclient/tests/unit/common/test_project_purge.py --- old/python-openstackclient-3.16.1/openstackclient/tests/unit/common/test_project_purge.py 2018-09-05 21:35:12.000000000 +0200 +++ new/python-openstackclient-3.16.2/openstackclient/tests/unit/common/test_project_purge.py 2018-11-19 21:57:57.000000000 +0100 @@ -117,10 +117,11 @@ self.projects_mock.get.assert_called_once_with(self.project.id) self.projects_mock.delete.assert_called_once_with(self.project.id) self.servers_mock.list.assert_called_once_with( - search_opts={'tenant_id': self.project.id}) + search_opts={'tenant_id': self.project.id, 'all_tenants': True}) kwargs = {'filters': {'owner': self.project.id}} self.images_mock.list.assert_called_once_with(**kwargs) - volume_search_opts = {'project_id': self.project.id} + volume_search_opts = {'project_id': self.project.id, + 'all_tenants': True} self.volumes_mock.list.assert_called_once_with( search_opts=volume_search_opts) self.snapshots_mock.list.assert_called_once_with( @@ -152,10 +153,11 @@ self.projects_mock.get.assert_called_once_with(self.project.id) self.projects_mock.delete.assert_not_called() self.servers_mock.list.assert_called_once_with( - search_opts={'tenant_id': self.project.id}) + search_opts={'tenant_id': self.project.id, 'all_tenants': True}) kwargs = {'filters': {'owner': self.project.id}} self.images_mock.list.assert_called_once_with(**kwargs) - volume_search_opts = {'project_id': self.project.id} + volume_search_opts = {'project_id': self.project.id, + 'all_tenants': True} self.volumes_mock.list.assert_called_once_with( search_opts=volume_search_opts) self.snapshots_mock.list.assert_called_once_with( @@ -187,10 +189,11 @@ self.projects_mock.get.assert_called_once_with(self.project.id) self.projects_mock.delete.assert_not_called() self.servers_mock.list.assert_called_once_with( - search_opts={'tenant_id': self.project.id}) + search_opts={'tenant_id': self.project.id, 'all_tenants': True}) kwargs = {'filters': {'owner': self.project.id}} self.images_mock.list.assert_called_once_with(**kwargs) - volume_search_opts = {'project_id': self.project.id} + volume_search_opts = {'project_id': self.project.id, + 'all_tenants': True} self.volumes_mock.list.assert_called_once_with( search_opts=volume_search_opts) self.snapshots_mock.list.assert_called_once_with( @@ -223,10 +226,11 @@ self.projects_mock.get.assert_not_called() self.projects_mock.delete.assert_called_once_with(self.project.id) self.servers_mock.list.assert_called_once_with( - search_opts={'tenant_id': self.project.id}) + search_opts={'tenant_id': self.project.id, 'all_tenants': True}) kwargs = {'filters': {'owner': self.project.id}} self.images_mock.list.assert_called_once_with(**kwargs) - volume_search_opts = {'project_id': self.project.id} + volume_search_opts = {'project_id': self.project.id, + 'all_tenants': True} self.volumes_mock.list.assert_called_once_with( search_opts=volume_search_opts) self.snapshots_mock.list.assert_called_once_with( @@ -259,10 +263,11 @@ self.projects_mock.get.assert_called_once_with(self.project.id) self.projects_mock.delete.assert_called_once_with(self.project.id) self.servers_mock.list.assert_called_once_with( - search_opts={'tenant_id': self.project.id}) + search_opts={'tenant_id': self.project.id, 'all_tenants': True}) kwargs = {'filters': {'owner': self.project.id}} self.images_mock.list.assert_called_once_with(**kwargs) - volume_search_opts = {'project_id': self.project.id} + volume_search_opts = {'project_id': self.project.id, + 'all_tenants': True} self.volumes_mock.list.assert_called_once_with( search_opts=volume_search_opts) self.snapshots_mock.list.assert_called_once_with( @@ -295,10 +300,11 @@ self.projects_mock.get.assert_called_once_with(self.project.id) self.projects_mock.delete.assert_called_once_with(self.project.id) self.servers_mock.list.assert_called_once_with( - search_opts={'tenant_id': self.project.id}) + search_opts={'tenant_id': self.project.id, 'all_tenants': True}) kwargs = {'filters': {'owner': self.project.id}} self.images_mock.list.assert_called_once_with(**kwargs) - volume_search_opts = {'project_id': self.project.id} + volume_search_opts = {'project_id': self.project.id, + 'all_tenants': True} self.volumes_mock.list.assert_called_once_with( search_opts=volume_search_opts) self.snapshots_mock.list.assert_called_once_with( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-openstackclient-3.16.1/openstackclient/tests/unit/compute/v2/fakes.py new/python-openstackclient-3.16.2/openstackclient/tests/unit/compute/v2/fakes.py --- old/python-openstackclient-3.16.1/openstackclient/tests/unit/compute/v2/fakes.py 2018-09-05 21:35:12.000000000 +0200 +++ new/python-openstackclient-3.16.2/openstackclient/tests/unit/compute/v2/fakes.py 2018-11-19 21:57:57.000000000 +0100 @@ -17,6 +17,7 @@ import uuid import mock +from novaclient import api_versions from openstackclient.api import compute_v2 from openstackclient.tests.unit import fakes @@ -201,6 +202,8 @@ self.management_url = kwargs['endpoint'] + self.api_version = api_versions.APIVersion('2.1') + class TestComputev2(utils.TestCommand): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-openstackclient-3.16.1/openstackclient/tests/unit/compute/v2/test_server.py new/python-openstackclient-3.16.2/openstackclient/tests/unit/compute/v2/test_server.py --- old/python-openstackclient-3.16.1/openstackclient/tests/unit/compute/v2/test_server.py 2018-09-05 21:35:12.000000000 +0200 +++ new/python-openstackclient-3.16.2/openstackclient/tests/unit/compute/v2/test_server.py 2018-11-19 21:58:02.000000000 +0100 @@ -19,6 +19,7 @@ import mock from mock import call from novaclient import api_versions +from openstack import exceptions as sdk_exceptions from osc_lib import exceptions from osc_lib import utils as common_utils from oslo_utils import timeutils @@ -222,11 +223,11 @@ self.network.ports = mock.Mock(return_value=[_port]) arglist = [ _server.id, - _floating_ip['ip'], + _floating_ip['floating_ip_address'], ] verifylist = [ ('server', _server.id), - ('ip_address', _floating_ip['ip']), + ('ip_address', _floating_ip['floating_ip_address']), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -237,7 +238,7 @@ } self.network.find_ip.assert_called_once_with( - _floating_ip['ip'], + _floating_ip['floating_ip_address'], ignore_missing=False, ) self.network.ports.assert_called_once_with( @@ -248,6 +249,64 @@ **attrs ) + def test_server_add_floating_ip_default_no_external_gateway(self, + success=False): + _server = compute_fakes.FakeServer.create_one_server() + self.servers_mock.get.return_value = _server + _port = network_fakes.FakePort.create_one_port() + _floating_ip = network_fakes.FakeFloatingIP.create_one_floating_ip() + self.network.find_ip = mock.Mock(return_value=_floating_ip) + return_value = [_port] + # In the success case, we'll have two ports, where the first port is + # not attached to an external gateway but the second port is. + if success: + return_value.append(_port) + self.network.ports = mock.Mock(return_value=return_value) + side_effect = [sdk_exceptions.NotFoundException()] + if success: + side_effect.append(None) + self.network.update_ip = mock.Mock(side_effect=side_effect) + arglist = [ + _server.id, + _floating_ip['floating_ip_address'], + ] + verifylist = [ + ('server', _server.id), + ('ip_address', _floating_ip['floating_ip_address']), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + if success: + self.cmd.take_action(parsed_args) + else: + self.assertRaises(sdk_exceptions.NotFoundException, + self.cmd.take_action, parsed_args) + + attrs = { + 'port_id': _port.id, + } + + self.network.find_ip.assert_called_once_with( + _floating_ip['floating_ip_address'], + ignore_missing=False, + ) + self.network.ports.assert_called_once_with( + device_id=_server.id, + ) + if success: + self.assertEqual(2, self.network.update_ip.call_count) + calls = [mock.call(_floating_ip, **attrs)] * 2 + self.network.update_ip.assert_has_calls(calls) + else: + self.network.update_ip.assert_called_once_with( + _floating_ip, + **attrs + ) + + def test_server_add_floating_ip_default_one_external_gateway(self): + self.test_server_add_floating_ip_default_no_external_gateway( + success=True) + def test_server_add_floating_ip_fixed(self): _server = compute_fakes.FakeServer.create_one_server() self.servers_mock.get.return_value = _server @@ -255,26 +314,31 @@ _floating_ip = network_fakes.FakeFloatingIP.create_one_floating_ip() self.network.find_ip = mock.Mock(return_value=_floating_ip) self.network.ports = mock.Mock(return_value=[_port]) + # The user has specified a fixed ip that matches one of the ports + # already attached to the instance. arglist = [ - '--fixed-ip-address', _floating_ip['fixed_ip'], + '--fixed-ip-address', _port.fixed_ips[0]['ip_address'], _server.id, - _floating_ip['ip'], + _floating_ip['floating_ip_address'], ] verifylist = [ - ('fixed_ip_address', _floating_ip['fixed_ip']), + ('fixed_ip_address', _port.fixed_ips[0]['ip_address']), ('server', _server.id), - ('ip_address', _floating_ip['ip']), + ('ip_address', _floating_ip['floating_ip_address']), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) self.cmd.take_action(parsed_args) + # We expect the update_ip call to specify a new fixed_ip_address which + # will overwrite the floating ip's existing fixed_ip_address. attrs = { 'port_id': _port.id, + 'fixed_ip_address': _port.fixed_ips[0]['ip_address'], } self.network.find_ip.assert_called_once_with( - _floating_ip['ip'], + _floating_ip['floating_ip_address'], ignore_missing=False, ) self.network.ports.assert_called_once_with( @@ -285,6 +349,40 @@ **attrs ) + def test_server_add_floating_ip_fixed_no_port_found(self): + _server = compute_fakes.FakeServer.create_one_server() + self.servers_mock.get.return_value = _server + _port = network_fakes.FakePort.create_one_port() + _floating_ip = network_fakes.FakeFloatingIP.create_one_floating_ip() + self.network.find_ip = mock.Mock(return_value=_floating_ip) + self.network.ports = mock.Mock(return_value=[_port]) + # The user has specified a fixed ip that does not match any of the + # ports already attached to the instance. + nonexistent_ip = '10.0.0.9' + arglist = [ + '--fixed-ip-address', nonexistent_ip, + _server.id, + _floating_ip['floating_ip_address'], + ] + verifylist = [ + ('fixed_ip_address', nonexistent_ip), + ('server', _server.id), + ('ip_address', _floating_ip['floating_ip_address']), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + self.assertRaises(exceptions.CommandError, self.cmd.take_action, + parsed_args) + + self.network.find_ip.assert_called_once_with( + _floating_ip['floating_ip_address'], + ignore_missing=False, + ) + self.network.ports.assert_called_once_with( + device_id=_server.id, + ) + self.network.update_ip.assert_not_called() + class TestServerAddPort(TestServer): @@ -820,6 +918,55 @@ # Set expected values kwargs = dict( + meta=None, + files={}, + reservation_id=None, + min_count=1, + max_count=1, + security_groups=[], + userdata=None, + key_name=None, + availability_zone=None, + block_device_mapping_v2=[], + nics='auto', + scheduler_hints={}, + config_drive=None, + ) + # ServerManager.create(name, image, flavor, **kwargs) + self.servers_mock.create.assert_called_with( + self.new_server.name, + self.image, + self.flavor, + **kwargs + ) + + self.assertEqual(self.columns, columns) + self.assertEqual(self.datalist(), data) + + def test_server_create_with_auto_network_default_v2_37(self): + """Tests creating a server without specifying --nic using 2.37.""" + arglist = [ + '--image', 'image1', + '--flavor', 'flavor1', + self.new_server.name, + ] + verifylist = [ + ('image', 'image1'), + ('flavor', 'flavor1'), + ('config_drive', False), + ('server_name', self.new_server.name), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + # Since check_parser doesn't handle compute global options like + # --os-compute-api-version, we have to mock the construction of + # the novaclient client object with our own APIVersion. + with mock.patch.object(self.app.client_manager.compute, 'api_version', + api_versions.APIVersion('2.37')): + columns, data = self.cmd.take_action(parsed_args) + + # Set expected values + kwargs = dict( meta=None, files={}, reservation_id=None, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-openstackclient-3.16.1/openstackclient/tests/unit/identity/v3/test_endpoint.py new/python-openstackclient-3.16.2/openstackclient/tests/unit/identity/v3/test_endpoint.py --- old/python-openstackclient-3.16.1/openstackclient/tests/unit/identity/v3/test_endpoint.py 2018-09-05 21:35:12.000000000 +0200 +++ new/python-openstackclient-3.16.2/openstackclient/tests/unit/identity/v3/test_endpoint.py 2018-11-19 21:57:57.000000000 +0100 @@ -439,6 +439,47 @@ ) self.assertEqual(datalist, tuple(data)) + def test_endpoint_list_project_with_project_domain(self): + project = identity_fakes.FakeProject.create_one_project() + domain = identity_fakes.FakeDomain.create_one_domain() + + self.ep_filter_mock.list_endpoints_for_project.return_value = [ + self.endpoint + ] + self.projects_mock.get.return_value = project + + arglist = [ + '--project', project.name, + '--project-domain', domain.name + ] + verifylist = [ + ('project', project.name), + ('project_domain', domain.name), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + # In base command class Lister in cliff, abstract method take_action() + # returns a tuple containing the column names and an iterable + # containing the data to be listed. + columns, data = self.cmd.take_action(parsed_args) + self.ep_filter_mock.list_endpoints_for_project.assert_called_with( + project=project.id + ) + + self.assertEqual(self.columns, columns) + datalist = ( + ( + self.endpoint.id, + self.endpoint.region, + self.service.name, + self.service.type, + True, + self.endpoint.interface, + self.endpoint.url, + ), + ) + self.assertEqual(datalist, tuple(data)) + class TestEndpointSet(TestEndpoint): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-openstackclient-3.16.1/python_openstackclient.egg-info/PKG-INFO new/python-openstackclient-3.16.2/python_openstackclient.egg-info/PKG-INFO --- old/python-openstackclient-3.16.1/python_openstackclient.egg-info/PKG-INFO 2018-09-05 21:39:11.000000000 +0200 +++ new/python-openstackclient-3.16.2/python_openstackclient.egg-info/PKG-INFO 2018-11-19 21:59:57.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: python-openstackclient -Version: 3.16.1 +Version: 3.16.2 Summary: OpenStack Command-line Client Home-page: https://docs.openstack.org/python-openstackclient/latest/ Author: OpenStack diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-openstackclient-3.16.1/python_openstackclient.egg-info/SOURCES.txt new/python-openstackclient-3.16.2/python_openstackclient.egg-info/SOURCES.txt --- old/python-openstackclient-3.16.1/python_openstackclient.egg-info/SOURCES.txt 2018-09-05 21:39:13.000000000 +0200 +++ new/python-openstackclient-3.16.2/python_openstackclient.egg-info/SOURCES.txt 2018-11-19 21:59:57.000000000 +0100 @@ -903,6 +903,7 @@ releasenotes/notes/fix-network-rbac-create-d1f4de77ad2dd421.yaml releasenotes/notes/flavor-add-description-b618abd4a7fb6545.yaml releasenotes/notes/flavor-create-with-project-19d41bfa93e3c6d0.yaml +releasenotes/notes/floating-ip-multi-port-9779e88f590cae23.yaml releasenotes/notes/floating-ip-set-unset-port-28e33875937b69cf.yaml releasenotes/notes/image-set-to-update-image-membership-68221f226ca3b6e0.yaml releasenotes/notes/image_set_visibility-babf4ff2f687d465.yaml diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-openstackclient-3.16.1/python_openstackclient.egg-info/pbr.json new/python-openstackclient-3.16.2/python_openstackclient.egg-info/pbr.json --- old/python-openstackclient-3.16.1/python_openstackclient.egg-info/pbr.json 2018-09-05 21:39:11.000000000 +0200 +++ new/python-openstackclient-3.16.2/python_openstackclient.egg-info/pbr.json 2018-11-19 21:59:57.000000000 +0100 @@ -1 +1 @@ -{"git_version": "3e5a2d2", "is_release": true} \ No newline at end of file +{"git_version": "e09c358", "is_release": true} \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-openstackclient-3.16.1/releasenotes/notes/floating-ip-multi-port-9779e88f590cae23.yaml new/python-openstackclient-3.16.2/releasenotes/notes/floating-ip-multi-port-9779e88f590cae23.yaml --- old/python-openstackclient-3.16.1/releasenotes/notes/floating-ip-multi-port-9779e88f590cae23.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/python-openstackclient-3.16.2/releasenotes/notes/floating-ip-multi-port-9779e88f590cae23.yaml 2018-11-19 21:57:57.000000000 +0100 @@ -0,0 +1,14 @@ +--- +fixes: + - | + The ``openstack server add floating ip`` command has been fixed to handle + servers with multiple ports attached. Previously, the command was using + the first port in the port list when attempting to associate the floating + ip. This could fail if the server had multiple ports and the first port + in the list was not attached to an external gateway. Another way it could + fail is if the ``--fixed-ip-address`` option was passed and the first port + did not have the specified fixed IP address attached to it. + Now, the ``openstack server add floating ip`` command will find the port + attached to the specified ``--fixed-ip-address``, if provided, else it will + try multiple ports until one is found attached to an external gateway. If + a suitable port is not found in the port list, an error will be returned. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-openstackclient-3.16.1/releasenotes/notes/reno.cache new/python-openstackclient-3.16.2/releasenotes/notes/reno.cache --- old/python-openstackclient-3.16.1/releasenotes/notes/reno.cache 2018-09-05 21:39:16.000000000 +0200 +++ new/python-openstackclient-3.16.2/releasenotes/notes/reno.cache 1970-01-01 01:00:00.000000000 +0100 @@ -1,3 +0,0 @@ ---- -file-contents: {} -notes: [] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-openstackclient-3.16.1/setup.cfg new/python-openstackclient-3.16.2/setup.cfg --- old/python-openstackclient-3.16.1/setup.cfg 2018-09-05 21:39:16.000000000 +0200 +++ new/python-openstackclient-3.16.2/setup.cfg 2018-11-19 21:59:58.000000000 +0100 @@ -53,6 +53,7 @@ compute_agent_delete = openstackclient.compute.v2.agent:DeleteAgent compute_agent_list = openstackclient.compute.v2.agent:ListAgent compute_agent_set = openstackclient.compute.v2.agent:SetAgent + aggregate_add_host = openstackclient.compute.v2.aggregate:AddAggregateHost aggregate_create = openstackclient.compute.v2.aggregate:CreateAggregate aggregate_delete = openstackclient.compute.v2.aggregate:DeleteAggregate @@ -61,31 +62,41 @@ aggregate_set = openstackclient.compute.v2.aggregate:SetAggregate aggregate_show = openstackclient.compute.v2.aggregate:ShowAggregate aggregate_unset = openstackclient.compute.v2.aggregate:UnsetAggregate + compute_service_delete = openstackclient.compute.v2.service:DeleteService compute_service_list = openstackclient.compute.v2.service:ListService compute_service_set = openstackclient.compute.v2.service:SetService + console_log_show = openstackclient.compute.v2.console:ShowConsoleLog console_url_show = openstackclient.compute.v2.console:ShowConsoleURL + flavor_create = openstackclient.compute.v2.flavor:CreateFlavor flavor_delete = openstackclient.compute.v2.flavor:DeleteFlavor flavor_list = openstackclient.compute.v2.flavor:ListFlavor flavor_show = openstackclient.compute.v2.flavor:ShowFlavor flavor_set = openstackclient.compute.v2.flavor:SetFlavor flavor_unset = openstackclient.compute.v2.flavor:UnsetFlavor + host_list = openstackclient.compute.v2.host:ListHost host_set = openstackclient.compute.v2.host:SetHost host_show = openstackclient.compute.v2.host:ShowHost + hypervisor_list = openstackclient.compute.v2.hypervisor:ListHypervisor hypervisor_show = openstackclient.compute.v2.hypervisor:ShowHypervisor + hypervisor_stats_show = openstackclient.compute.v2.hypervisor_stats:ShowHypervisorStats + ip_fixed_add = openstackclient.compute.v2.fixedip:AddFixedIP ip_fixed_remove = openstackclient.compute.v2.fixedip:RemoveFixedIP + ip_floating_add = openstackclient.compute.v2.floatingip:AddFloatingIP ip_floating_remove = openstackclient.compute.v2.floatingip:RemoveFloatingIP + keypair_create = openstackclient.compute.v2.keypair:CreateKeypair keypair_delete = openstackclient.compute.v2.keypair:DeleteKeypair keypair_list = openstackclient.compute.v2.keypair:ListKeypair keypair_show = openstackclient.compute.v2.keypair:ShowKeypair + server_add_fixed_ip = openstackclient.compute.v2.server:AddFixedIP server_add_floating_ip = openstackclient.compute.v2.server:AddFloatingIP server_add_port = openstackclient.compute.v2.server:AddPort @@ -123,33 +134,42 @@ server_unrescue = openstackclient.compute.v2.server:UnrescueServer server_unset = openstackclient.compute.v2.server:UnsetServer server_unshelve = openstackclient.compute.v2.server:UnshelveServer + server_backup_create = openstackclient.compute.v2.server_backup:CreateServerBackup + server_event_list = openstackclient.compute.v2.server_event:ListServerEvent server_event_show = openstackclient.compute.v2.server_event:ShowServerEvent + server_group_create = openstackclient.compute.v2.server_group:CreateServerGroup server_group_delete = openstackclient.compute.v2.server_group:DeleteServerGroup server_group_list = openstackclient.compute.v2.server_group:ListServerGroup server_group_show = openstackclient.compute.v2.server_group:ShowServerGroup + server_image_create = openstackclient.compute.v2.server_image:CreateServerImage + usage_list = openstackclient.compute.v2.usage:ListUsage usage_show = openstackclient.compute.v2.usage:ShowUsage openstack.identity.v2 = catalog_list = openstackclient.identity.v2_0.catalog:ListCatalog catalog_show = openstackclient.identity.v2_0.catalog:ShowCatalog + ec2_credentials_create = openstackclient.identity.v2_0.ec2creds:CreateEC2Creds ec2_credentials_delete = openstackclient.identity.v2_0.ec2creds:DeleteEC2Creds ec2_credentials_list = openstackclient.identity.v2_0.ec2creds:ListEC2Creds ec2_credentials_show = openstackclient.identity.v2_0.ec2creds:ShowEC2Creds + endpoint_create = openstackclient.identity.v2_0.endpoint:CreateEndpoint endpoint_delete = openstackclient.identity.v2_0.endpoint:DeleteEndpoint endpoint_list = openstackclient.identity.v2_0.endpoint:ListEndpoint endpoint_show = openstackclient.identity.v2_0.endpoint:ShowEndpoint + project_create = openstackclient.identity.v2_0.project:CreateProject project_delete = openstackclient.identity.v2_0.project:DeleteProject project_list = openstackclient.identity.v2_0.project:ListProject project_set = openstackclient.identity.v2_0.project:SetProject project_show = openstackclient.identity.v2_0.project:ShowProject project_unset = openstackclient.identity.v2_0.project:UnsetProject + role_add = openstackclient.identity.v2_0.role:AddRole role_create = openstackclient.identity.v2_0.role:CreateRole role_delete = openstackclient.identity.v2_0.role:DeleteRole @@ -157,45 +177,56 @@ role_remove = openstackclient.identity.v2_0.role:RemoveRole role_show = openstackclient.identity.v2_0.role:ShowRole role_assignment_list = openstackclient.identity.v2_0.role_assignment:ListRoleAssignment + service_create = openstackclient.identity.v2_0.service:CreateService service_delete = openstackclient.identity.v2_0.service:DeleteService service_list = openstackclient.identity.v2_0.service:ListService service_show = openstackclient.identity.v2_0.service:ShowService + token_issue = openstackclient.identity.v2_0.token:IssueToken token_revoke = openstackclient.identity.v2_0.token:RevokeToken + user_create = openstackclient.identity.v2_0.user:CreateUser user_delete = openstackclient.identity.v2_0.user:DeleteUser user_list = openstackclient.identity.v2_0.user:ListUser user_set = openstackclient.identity.v2_0.user:SetUser user_show = openstackclient.identity.v2_0.user:ShowUser + user_role_list = openstackclient.identity.v2_0.role:ListUserRole openstack.identity.v3 = access_token_create = openstackclient.identity.v3.token:CreateAccessToken + application_credential_create = openstackclient.identity.v3.application_credential:CreateApplicationCredential application_credential_delete = openstackclient.identity.v3.application_credential:DeleteApplicationCredential application_credential_list = openstackclient.identity.v3.application_credential:ListApplicationCredential application_credential_show = openstackclient.identity.v3.application_credential:ShowApplicationCredential + catalog_list = openstackclient.identity.v3.catalog:ListCatalog catalog_show = openstackclient.identity.v3.catalog:ShowCatalog + consumer_create = openstackclient.identity.v3.consumer:CreateConsumer consumer_delete = openstackclient.identity.v3.consumer:DeleteConsumer consumer_list = openstackclient.identity.v3.consumer:ListConsumer consumer_set = openstackclient.identity.v3.consumer:SetConsumer consumer_show = openstackclient.identity.v3.consumer:ShowConsumer + credential_create = openstackclient.identity.v3.credential:CreateCredential credential_delete = openstackclient.identity.v3.credential:DeleteCredential credential_list = openstackclient.identity.v3.credential:ListCredential credential_set = openstackclient.identity.v3.credential:SetCredential credential_show = openstackclient.identity.v3.credential:ShowCredential + domain_create = openstackclient.identity.v3.domain:CreateDomain domain_delete = openstackclient.identity.v3.domain:DeleteDomain domain_list = openstackclient.identity.v3.domain:ListDomain domain_set = openstackclient.identity.v3.domain:SetDomain domain_show = openstackclient.identity.v3.domain:ShowDomain + ec2_credentials_create = openstackclient.identity.v3.ec2creds:CreateEC2Creds ec2_credentials_delete = openstackclient.identity.v3.ec2creds:DeleteEC2Creds ec2_credentials_list = openstackclient.identity.v3.ec2creds:ListEC2Creds ec2_credentials_show = openstackclient.identity.v3.ec2creds:ShowEC2Creds + endpoint_add_project = openstackclient.identity.v3.endpoint:AddProjectToEndpoint endpoint_create = openstackclient.identity.v3.endpoint:CreateEndpoint endpoint_delete = openstackclient.identity.v3.endpoint:DeleteEndpoint @@ -203,6 +234,7 @@ endpoint_remove_project = openstackclient.identity.v3.endpoint:RemoveProjectFromEndpoint endpoint_set = openstackclient.identity.v3.endpoint:SetEndpoint endpoint_show = openstackclient.identity.v3.endpoint:ShowEndpoint + endpoint_group_add_project = openstackclient.identity.v3.endpoint_group:AddProjectToEndpointGroup endpoint_group_create = openstackclient.identity.v3.endpoint_group:CreateEndpointGroup endpoint_group_delete = openstackclient.identity.v3.endpoint_group:DeleteEndpointGroup @@ -210,6 +242,7 @@ endpoint_group_remove_project = openstackclient.identity.v3.endpoint_group:RemoveProjectFromEndpointGroup endpoint_group_set = openstackclient.identity.v3.endpoint_group:SetEndpointGroup endpoint_group_show = openstackclient.identity.v3.endpoint_group:ShowEndpointGroup + group_add_user = openstackclient.identity.v3.group:AddUserToGroup group_contains_user = openstackclient.identity.v3.group:CheckUserInGroup group_create = openstackclient.identity.v3.group:CreateGroup @@ -218,53 +251,65 @@ group_remove_user = openstackclient.identity.v3.group:RemoveUserFromGroup group_set = openstackclient.identity.v3.group:SetGroup group_show = openstackclient.identity.v3.group:ShowGroup + identity_provider_create = openstackclient.identity.v3.identity_provider:CreateIdentityProvider identity_provider_delete = openstackclient.identity.v3.identity_provider:DeleteIdentityProvider identity_provider_list = openstackclient.identity.v3.identity_provider:ListIdentityProvider identity_provider_set = openstackclient.identity.v3.identity_provider:SetIdentityProvider identity_provider_show = openstackclient.identity.v3.identity_provider:ShowIdentityProvider + implied_role_create = openstackclient.identity.v3.implied_role:CreateImpliedRole implied_role_delete = openstackclient.identity.v3.implied_role:DeleteImpliedRole implied_role_list = openstackclient.identity.v3.implied_role:ListImpliedRole + limit_create = openstackclient.identity.v3.limit:CreateLimit limit_delete = openstackclient.identity.v3.limit:DeleteLimit limit_list = openstackclient.identity.v3.limit:ListLimit limit_set = openstackclient.identity.v3.limit:SetLimit limit_show = openstackclient.identity.v3.limit:ShowLimit + mapping_create = openstackclient.identity.v3.mapping:CreateMapping mapping_delete = openstackclient.identity.v3.mapping:DeleteMapping mapping_list = openstackclient.identity.v3.mapping:ListMapping mapping_set = openstackclient.identity.v3.mapping:SetMapping mapping_show = openstackclient.identity.v3.mapping:ShowMapping + policy_create = openstackclient.identity.v3.policy:CreatePolicy policy_delete = openstackclient.identity.v3.policy:DeletePolicy policy_list = openstackclient.identity.v3.policy:ListPolicy policy_set = openstackclient.identity.v3.policy:SetPolicy policy_show = openstackclient.identity.v3.policy:ShowPolicy + project_create = openstackclient.identity.v3.project:CreateProject project_delete = openstackclient.identity.v3.project:DeleteProject project_list = openstackclient.identity.v3.project:ListProject project_set = openstackclient.identity.v3.project:SetProject project_show = openstackclient.identity.v3.project:ShowProject + federation_protocol_create = openstackclient.identity.v3.federation_protocol:CreateProtocol federation_protocol_delete = openstackclient.identity.v3.federation_protocol:DeleteProtocol federation_protocol_list = openstackclient.identity.v3.federation_protocol:ListProtocols federation_protocol_set = openstackclient.identity.v3.federation_protocol:SetProtocol federation_protocol_show = openstackclient.identity.v3.federation_protocol:ShowProtocol + federation_domain_list = openstackclient.identity.v3.unscoped_saml:ListAccessibleDomains federation_project_list = openstackclient.identity.v3.unscoped_saml:ListAccessibleProjects + region_create = openstackclient.identity.v3.region:CreateRegion region_delete = openstackclient.identity.v3.region:DeleteRegion region_list = openstackclient.identity.v3.region:ListRegion region_set = openstackclient.identity.v3.region:SetRegion region_show = openstackclient.identity.v3.region:ShowRegion + registered_limit_create = openstackclient.identity.v3.registered_limit:CreateRegisteredLimit registered_limit_delete = openstackclient.identity.v3.registered_limit:DeleteRegisteredLimit registered_limit_list = openstackclient.identity.v3.registered_limit:ListRegisteredLimit registered_limit_set = openstackclient.identity.v3.registered_limit:SetRegisteredLimit registered_limit_show = openstackclient.identity.v3.registered_limit:ShowRegisteredLimit + request_token_authorize = openstackclient.identity.v3.token:AuthorizeRequestToken request_token_create = openstackclient.identity.v3.token:CreateRequestToken + role_add = openstackclient.identity.v3.role:AddRole role_create = openstackclient.identity.v3.role:CreateRole role_delete = openstackclient.identity.v3.role:DeleteRole @@ -273,22 +318,27 @@ role_show = openstackclient.identity.v3.role:ShowRole role_set = openstackclient.identity.v3.role:SetRole role_assignment_list = openstackclient.identity.v3.role_assignment:ListRoleAssignment + service_create = openstackclient.identity.v3.service:CreateService service_delete = openstackclient.identity.v3.service:DeleteService service_list = openstackclient.identity.v3.service:ListService service_show = openstackclient.identity.v3.service:ShowService service_set = openstackclient.identity.v3.service:SetService + service_provider_create = openstackclient.identity.v3.service_provider:CreateServiceProvider service_provider_delete = openstackclient.identity.v3.service_provider:DeleteServiceProvider service_provider_list = openstackclient.identity.v3.service_provider:ListServiceProvider service_provider_set = openstackclient.identity.v3.service_provider:SetServiceProvider service_provider_show = openstackclient.identity.v3.service_provider:ShowServiceProvider + token_issue = openstackclient.identity.v3.token:IssueToken token_revoke = openstackclient.identity.v3.token:RevokeToken + trust_create = openstackclient.identity.v3.trust:CreateTrust trust_delete = openstackclient.identity.v3.trust:DeleteTrust trust_list = openstackclient.identity.v3.trust:ListTrust trust_show = openstackclient.identity.v3.trust:ShowTrust + user_create = openstackclient.identity.v3.user:CreateUser user_delete = openstackclient.identity.v3.user:DeleteUser user_list = openstackclient.identity.v3.user:ListUser @@ -319,15 +369,19 @@ address_scope_list = openstackclient.network.v2.address_scope:ListAddressScope address_scope_set = openstackclient.network.v2.address_scope:SetAddressScope address_scope_show = openstackclient.network.v2.address_scope:ShowAddressScope + floating_ip_create = openstackclient.network.v2.floating_ip:CreateFloatingIP floating_ip_delete = openstackclient.network.v2.floating_ip:DeleteFloatingIP floating_ip_list = openstackclient.network.v2.floating_ip:ListFloatingIP floating_ip_set = openstackclient.network.v2.floating_ip:SetFloatingIP floating_ip_show = openstackclient.network.v2.floating_ip:ShowFloatingIP floating_ip_unset = openstackclient.network.v2.floating_ip:UnsetFloatingIP + floating_ip_pool_list = openstackclient.network.v2.floating_ip_pool:ListFloatingIPPool + ip_availability_list = openstackclient.network.v2.ip_availability:ListIPAvailability ip_availability_show = openstackclient.network.v2.ip_availability:ShowIPAvailability + network_agent_add_network = openstackclient.network.v2.network_agent:AddNetworkToAgent network_agent_add_router = openstackclient.network.v2.network_agent:AddRouterToAgent network_agent_delete = openstackclient.network.v2.network_agent:DeleteNetworkAgent @@ -336,8 +390,10 @@ network_agent_remove_router = openstackclient.network.v2.network_agent:RemoveRouterFromAgent network_agent_set = openstackclient.network.v2.network_agent:SetNetworkAgent network_agent_show = openstackclient.network.v2.network_agent:ShowNetworkAgent + network_auto_allocated_topology_create = openstackclient.network.v2.network_auto_allocated_topology:CreateAutoAllocatedTopology network_auto_allocated_topology_delete = openstackclient.network.v2.network_auto_allocated_topology:DeleteAutoAllocatedTopology + network_flavor_add_profile = openstackclient.network.v2.network_flavor:AddNetworkFlavorToProfile network_flavor_create = openstackclient.network.v2.network_flavor:CreateNetworkFlavor network_flavor_delete = openstackclient.network.v2.network_flavor:DeleteNetworkFlavor @@ -345,54 +401,66 @@ network_flavor_remove_profile = openstackclient.network.v2.network_flavor:RemoveNetworkFlavorFromProfile network_flavor_set = openstackclient.network.v2.network_flavor:SetNetworkFlavor network_flavor_show = openstackclient.network.v2.network_flavor:ShowNetworkFlavor + network_flavor_profile_create = openstackclient.network.v2.network_flavor_profile:CreateNetworkFlavorProfile network_flavor_profile_delete = openstackclient.network.v2.network_flavor_profile:DeleteNetworkFlavorProfile network_flavor_profile_list = openstackclient.network.v2.network_flavor_profile:ListNetworkFlavorProfile network_flavor_profile_set = openstackclient.network.v2.network_flavor_profile:SetNetworkFlavorProfile network_flavor_profile_show = openstackclient.network.v2.network_flavor_profile:ShowNetworkFlavorProfile + network_create = openstackclient.network.v2.network:CreateNetwork network_delete = openstackclient.network.v2.network:DeleteNetwork network_list = openstackclient.network.v2.network:ListNetwork network_set = openstackclient.network.v2.network:SetNetwork network_show = openstackclient.network.v2.network:ShowNetwork network_unset = openstackclient.network.v2.network:UnsetNetwork + network_meter_create = openstackclient.network.v2.network_meter:CreateMeter network_meter_delete = openstackclient.network.v2.network_meter:DeleteMeter network_meter_list = openstackclient.network.v2.network_meter:ListMeter network_meter_show = openstackclient.network.v2.network_meter:ShowMeter + network_meter_rule_create = openstackclient.network.v2.network_meter_rule:CreateMeterRule network_meter_rule_delete = openstackclient.network.v2.network_meter_rule:DeleteMeterRule network_meter_rule_list = openstackclient.network.v2.network_meter_rule:ListMeterRule network_meter_rule_show = openstackclient.network.v2.network_meter_rule:ShowMeterRule + network_qos_policy_create = openstackclient.network.v2.network_qos_policy:CreateNetworkQosPolicy network_qos_policy_delete = openstackclient.network.v2.network_qos_policy:DeleteNetworkQosPolicy network_qos_policy_list = openstackclient.network.v2.network_qos_policy:ListNetworkQosPolicy network_qos_policy_set = openstackclient.network.v2.network_qos_policy:SetNetworkQosPolicy network_qos_policy_show = openstackclient.network.v2.network_qos_policy:ShowNetworkQosPolicy + network_qos_rule_create = openstackclient.network.v2.network_qos_rule:CreateNetworkQosRule network_qos_rule_delete = openstackclient.network.v2.network_qos_rule:DeleteNetworkQosRule network_qos_rule_list = openstackclient.network.v2.network_qos_rule:ListNetworkQosRule network_qos_rule_set = openstackclient.network.v2.network_qos_rule:SetNetworkQosRule network_qos_rule_show = openstackclient.network.v2.network_qos_rule:ShowNetworkQosRule + network_qos_rule_type_list = openstackclient.network.v2.network_qos_rule_type:ListNetworkQosRuleType network_qos_rule_type_show = openstackclient.network.v2.network_qos_rule_type:ShowNetworkQosRuleType + network_rbac_create = openstackclient.network.v2.network_rbac:CreateNetworkRBAC network_rbac_delete = openstackclient.network.v2.network_rbac:DeleteNetworkRBAC network_rbac_list = openstackclient.network.v2.network_rbac:ListNetworkRBAC network_rbac_set = openstackclient.network.v2.network_rbac:SetNetworkRBAC network_rbac_show = openstackclient.network.v2.network_rbac:ShowNetworkRBAC + network_segment_create = openstackclient.network.v2.network_segment:CreateNetworkSegment network_segment_delete = openstackclient.network.v2.network_segment:DeleteNetworkSegment network_segment_list = openstackclient.network.v2.network_segment:ListNetworkSegment network_segment_set = openstackclient.network.v2.network_segment:SetNetworkSegment network_segment_show = openstackclient.network.v2.network_segment:ShowNetworkSegment + network_service_provider_list = openstackclient.network.v2.network_service_provider:ListNetworkServiceProvider + port_create = openstackclient.network.v2.port:CreatePort port_delete = openstackclient.network.v2.port:DeletePort port_list = openstackclient.network.v2.port:ListPort port_set = openstackclient.network.v2.port:SetPort port_show = openstackclient.network.v2.port:ShowPort port_unset = openstackclient.network.v2.port:UnsetPort + router_add_port = openstackclient.network.v2.router:AddPortToRouter router_add_subnet = openstackclient.network.v2.router:AddSubnetToRouter router_create = openstackclient.network.v2.router:CreateRouter @@ -403,22 +471,26 @@ router_set = openstackclient.network.v2.router:SetRouter router_show = openstackclient.network.v2.router:ShowRouter router_unset = openstackclient.network.v2.router:UnsetRouter + security_group_create = openstackclient.network.v2.security_group:CreateSecurityGroup security_group_delete = openstackclient.network.v2.security_group:DeleteSecurityGroup security_group_list = openstackclient.network.v2.security_group:ListSecurityGroup security_group_set = openstackclient.network.v2.security_group:SetSecurityGroup security_group_show = openstackclient.network.v2.security_group:ShowSecurityGroup security_group_unset = openstackclient.network.v2.security_group:UnsetSecurityGroup + security_group_rule_create = openstackclient.network.v2.security_group_rule:CreateSecurityGroupRule security_group_rule_delete = openstackclient.network.v2.security_group_rule:DeleteSecurityGroupRule security_group_rule_list = openstackclient.network.v2.security_group_rule:ListSecurityGroupRule security_group_rule_show = openstackclient.network.v2.security_group_rule:ShowSecurityGroupRule + subnet_create = openstackclient.network.v2.subnet:CreateSubnet subnet_delete = openstackclient.network.v2.subnet:DeleteSubnet subnet_list = openstackclient.network.v2.subnet:ListSubnet subnet_set = openstackclient.network.v2.subnet:SetSubnet subnet_show = openstackclient.network.v2.subnet:ShowSubnet subnet_unset = openstackclient.network.v2.subnet:UnsetSubnet + subnet_pool_create = openstackclient.network.v2.subnet_pool:CreateSubnetPool subnet_pool_delete = openstackclient.network.v2.subnet_pool:DeleteSubnetPool subnet_pool_list = openstackclient.network.v2.subnet_pool:ListSubnetPool @@ -449,12 +521,14 @@ backup_list = openstackclient.volume.v1.backup:ListBackup backup_restore = openstackclient.volume.v1.backup:RestoreBackup backup_show = openstackclient.volume.v1.backup:ShowBackup + snapshot_create = openstackclient.volume.v1.snapshot:CreateSnapshot snapshot_delete = openstackclient.volume.v1.snapshot:DeleteSnapshot snapshot_list = openstackclient.volume.v1.snapshot:ListSnapshot snapshot_set = openstackclient.volume.v1.snapshot:SetSnapshot snapshot_show = openstackclient.volume.v1.snapshot:ShowSnapshot snapshot_unset = openstackclient.volume.v1.snapshot:UnsetSnapshot + volume_create = openstackclient.volume.v1.volume:CreateVolume volume_delete = openstackclient.volume.v1.volume:DeleteVolume volume_list = openstackclient.volume.v1.volume:ListVolume @@ -462,23 +536,27 @@ volume_set = openstackclient.volume.v1.volume:SetVolume volume_show = openstackclient.volume.v1.volume:ShowVolume volume_unset = openstackclient.volume.v1.volume:UnsetVolume + volume_backup_create = openstackclient.volume.v1.backup:CreateVolumeBackup volume_backup_delete = openstackclient.volume.v1.backup:DeleteVolumeBackup volume_backup_list = openstackclient.volume.v1.backup:ListVolumeBackup volume_backup_restore = openstackclient.volume.v1.backup:RestoreVolumeBackup volume_backup_show = openstackclient.volume.v1.backup:ShowVolumeBackup + volume_snapshot_create = openstackclient.volume.v1.volume_snapshot:CreateVolumeSnapshot volume_snapshot_delete = openstackclient.volume.v1.volume_snapshot:DeleteVolumeSnapshot volume_snapshot_list = openstackclient.volume.v1.volume_snapshot:ListVolumeSnapshot volume_snapshot_set = openstackclient.volume.v1.volume_snapshot:SetVolumeSnapshot volume_snapshot_show = openstackclient.volume.v1.volume_snapshot:ShowVolumeSnapshot volume_snapshot_unset = openstackclient.volume.v1.volume_snapshot:UnsetVolumeSnapshot + volume_type_create = openstackclient.volume.v1.volume_type:CreateVolumeType volume_type_delete = openstackclient.volume.v1.volume_type:DeleteVolumeType volume_type_list = openstackclient.volume.v1.volume_type:ListVolumeType volume_type_set = openstackclient.volume.v1.volume_type:SetVolumeType volume_type_show = openstackclient.volume.v1.volume_type:ShowVolumeType volume_type_unset = openstackclient.volume.v1.volume_type:UnsetVolumeType + volume_qos_associate = openstackclient.volume.v1.qos_specs:AssociateQos volume_qos_create = openstackclient.volume.v1.qos_specs:CreateQos volume_qos_delete = openstackclient.volume.v1.qos_specs:DeleteQos @@ -487,8 +565,10 @@ volume_qos_set = openstackclient.volume.v1.qos_specs:SetQos volume_qos_show = openstackclient.volume.v1.qos_specs:ShowQos volume_qos_unset = openstackclient.volume.v1.qos_specs:UnsetQos + volume_service_list = openstackclient.volume.v1.service:ListService volume_service_set = openstackclient.volume.v1.service:SetService + volume_transfer_request_accept = openstackclient.volume.v1.volume_transfer_request:AcceptTransferRequest volume_transfer_request_create = openstackclient.volume.v1.volume_transfer_request:CreateTransferRequest volume_transfer_request_delete = openstackclient.volume.v1.volume_transfer_request:DeleteTransferRequest @@ -500,6 +580,7 @@ backup_list = openstackclient.volume.v2.backup:ListBackup backup_restore = openstackclient.volume.v2.backup:RestoreBackup backup_show = openstackclient.volume.v2.backup:ShowBackup + consistency_group_add_volume = openstackclient.volume.v2.consistency_group:AddVolumeToConsistencyGroup consistency_group_create = openstackclient.volume.v2.consistency_group:CreateConsistencyGroup consistency_group_delete = openstackclient.volume.v2.consistency_group:DeleteConsistencyGroup @@ -507,16 +588,19 @@ consistency_group_remove_volume = openstackclient.volume.v2.consistency_group:RemoveVolumeFromConsistencyGroup consistency_group_set = openstackclient.volume.v2.consistency_group:SetConsistencyGroup consistency_group_show = openstackclient.volume.v2.consistency_group:ShowConsistencyGroup + consistency_group_snapshot_create = openstackclient.volume.v2.consistency_group_snapshot:CreateConsistencyGroupSnapshot consistency_group_snapshot_delete = openstackclient.volume.v2.consistency_group_snapshot:DeleteConsistencyGroupSnapshot consistency_group_snapshot_list = openstackclient.volume.v2.consistency_group_snapshot:ListConsistencyGroupSnapshot consistency_group_snapshot_show = openstackclient.volume.v2.consistency_group_snapshot:ShowConsistencyGroupSnapshot + snapshot_create = openstackclient.volume.v2.snapshot:CreateSnapshot snapshot_delete = openstackclient.volume.v2.snapshot:DeleteSnapshot snapshot_list = openstackclient.volume.v2.snapshot:ListSnapshot snapshot_set = openstackclient.volume.v2.snapshot:SetSnapshot snapshot_show = openstackclient.volume.v2.snapshot:ShowSnapshot snapshot_unset = openstackclient.volume.v2.snapshot:UnsetSnapshot + volume_create = openstackclient.volume.v2.volume:CreateVolume volume_delete = openstackclient.volume.v2.volume:DeleteVolume volume_list = openstackclient.volume.v2.volume:ListVolume @@ -524,26 +608,31 @@ volume_set = openstackclient.volume.v2.volume:SetVolume volume_show = openstackclient.volume.v2.volume:ShowVolume volume_unset = openstackclient.volume.v2.volume:UnsetVolume + volume_backup_create = openstackclient.volume.v2.backup:CreateVolumeBackup volume_backup_delete = openstackclient.volume.v2.backup:DeleteVolumeBackup volume_backup_list = openstackclient.volume.v2.backup:ListVolumeBackup volume_backup_restore = openstackclient.volume.v2.backup:RestoreVolumeBackup volume_backup_set = openstackclient.volume.v2.backup:SetVolumeBackup volume_backup_show = openstackclient.volume.v2.backup:ShowVolumeBackup + volume_host_failover = openstackclient.volume.v2.volume_host:FailoverVolumeHost volume_host_set = openstackclient.volume.v2.volume_host:SetVolumeHost + volume_snapshot_create = openstackclient.volume.v2.volume_snapshot:CreateVolumeSnapshot volume_snapshot_delete = openstackclient.volume.v2.volume_snapshot:DeleteVolumeSnapshot volume_snapshot_list = openstackclient.volume.v2.volume_snapshot:ListVolumeSnapshot volume_snapshot_set = openstackclient.volume.v2.volume_snapshot:SetVolumeSnapshot volume_snapshot_show = openstackclient.volume.v2.volume_snapshot:ShowVolumeSnapshot volume_snapshot_unset = openstackclient.volume.v2.volume_snapshot:UnsetVolumeSnapshot + volume_type_create = openstackclient.volume.v2.volume_type:CreateVolumeType volume_type_delete = openstackclient.volume.v2.volume_type:DeleteVolumeType volume_type_list = openstackclient.volume.v2.volume_type:ListVolumeType volume_type_set = openstackclient.volume.v2.volume_type:SetVolumeType volume_type_show = openstackclient.volume.v2.volume_type:ShowVolumeType volume_type_unset = openstackclient.volume.v2.volume_type:UnsetVolumeType + volume_qos_associate = openstackclient.volume.v2.qos_specs:AssociateQos volume_qos_create = openstackclient.volume.v2.qos_specs:CreateQos volume_qos_delete = openstackclient.volume.v2.qos_specs:DeleteQos @@ -552,8 +641,10 @@ volume_qos_set = openstackclient.volume.v2.qos_specs:SetQos volume_qos_show = openstackclient.volume.v2.qos_specs:ShowQos volume_qos_unset = openstackclient.volume.v2.qos_specs:UnsetQos + volume_service_list = openstackclient.volume.v2.service:ListService volume_service_set = openstackclient.volume.v2.service:SetService + volume_transfer_request_accept = openstackclient.volume.v2.volume_transfer_request:AcceptTransferRequest volume_transfer_request_create = openstackclient.volume.v2.volume_transfer_request:CreateTransferRequest volume_transfer_request_delete = openstackclient.volume.v2.volume_transfer_request:DeleteTransferRequest @@ -567,10 +658,12 @@ consistency_group_remove_volume = openstackclient.volume.v2.consistency_group:RemoveVolumeFromConsistencyGroup consistency_group_set = openstackclient.volume.v2.consistency_group:SetConsistencyGroup consistency_group_show = openstackclient.volume.v2.consistency_group:ShowConsistencyGroup + consistency_group_snapshot_create = openstackclient.volume.v2.consistency_group_snapshot:CreateConsistencyGroupSnapshot consistency_group_snapshot_delete = openstackclient.volume.v2.consistency_group_snapshot:DeleteConsistencyGroupSnapshot consistency_group_snapshot_list = openstackclient.volume.v2.consistency_group_snapshot:ListConsistencyGroupSnapshot consistency_group_snapshot_show = openstackclient.volume.v2.consistency_group_snapshot:ShowConsistencyGroupSnapshot + volume_create = openstackclient.volume.v2.volume:CreateVolume volume_delete = openstackclient.volume.v2.volume:DeleteVolume volume_list = openstackclient.volume.v2.volume:ListVolume @@ -578,25 +671,30 @@ volume_set = openstackclient.volume.v2.volume:SetVolume volume_show = openstackclient.volume.v2.volume:ShowVolume volume_unset = openstackclient.volume.v2.volume:UnsetVolume + volume_backup_create = openstackclient.volume.v2.backup:CreateVolumeBackup volume_backup_delete = openstackclient.volume.v2.backup:DeleteVolumeBackup volume_backup_list = openstackclient.volume.v2.backup:ListVolumeBackup volume_backup_restore = openstackclient.volume.v2.backup:RestoreVolumeBackup volume_backup_set = openstackclient.volume.v2.backup:SetVolumeBackup volume_backup_show = openstackclient.volume.v2.backup:ShowVolumeBackup + volume_host_set = openstackclient.volume.v2.volume_host:SetVolumeHost + volume_snapshot_create = openstackclient.volume.v2.volume_snapshot:CreateVolumeSnapshot volume_snapshot_delete = openstackclient.volume.v2.volume_snapshot:DeleteVolumeSnapshot volume_snapshot_list = openstackclient.volume.v2.volume_snapshot:ListVolumeSnapshot volume_snapshot_set = openstackclient.volume.v2.volume_snapshot:SetVolumeSnapshot volume_snapshot_show = openstackclient.volume.v2.volume_snapshot:ShowVolumeSnapshot volume_snapshot_unset = openstackclient.volume.v2.volume_snapshot:UnsetVolumeSnapshot + volume_type_create = openstackclient.volume.v2.volume_type:CreateVolumeType volume_type_delete = openstackclient.volume.v2.volume_type:DeleteVolumeType volume_type_list = openstackclient.volume.v2.volume_type:ListVolumeType volume_type_set = openstackclient.volume.v2.volume_type:SetVolumeType volume_type_show = openstackclient.volume.v2.volume_type:ShowVolumeType volume_type_unset = openstackclient.volume.v2.volume_type:UnsetVolumeType + volume_qos_associate = openstackclient.volume.v2.qos_specs:AssociateQos volume_qos_create = openstackclient.volume.v2.qos_specs:CreateQos volume_qos_delete = openstackclient.volume.v2.qos_specs:DeleteQos @@ -605,8 +703,10 @@ volume_qos_set = openstackclient.volume.v2.qos_specs:SetQos volume_qos_show = openstackclient.volume.v2.qos_specs:ShowQos volume_qos_unset = openstackclient.volume.v2.qos_specs:UnsetQos + volume_service_list = openstackclient.volume.v2.service:ListService volume_service_set = openstackclient.volume.v2.service:SetService + volume_transfer_request_accept = openstackclient.volume.v2.volume_transfer_request:AcceptTransferRequest volume_transfer_request_create = openstackclient.volume.v2.volume_transfer_request:CreateTransferRequest volume_transfer_request_delete = openstackclient.volume.v2.volume_transfer_request:DeleteTransferRequest