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


Reply via email to