Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-octaviaclient for 
openSUSE:Factory checked in at 2021-12-12 00:57:30
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-octaviaclient (Old)
 and      /work/SRC/openSUSE:Factory/.python-octaviaclient.new.2520 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-octaviaclient"

Sun Dec 12 00:57:30 2021 rev:8 rq:939530 version:2.4.0

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-octaviaclient/python-octaviaclient.changes    
    2021-05-10 15:39:44.301476262 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-octaviaclient.new.2520/python-octaviaclient.changes
      2021-12-12 00:57:34.806583165 +0100
@@ -1,0 +2,11 @@
+Mon Dec  6 09:31:13 UTC 2021 - [email protected]
+
+- update to version 2.4.0
+  - Support pagination for 'list' API calls
+  - Improve the client performance on large clouds
+  - Update master for stable/wallaby
+  - Fix some typos
+  - Add Python3 xena unit tests
+  - setup.cfg: Replace dashes with underscores
+
+-------------------------------------------------------------------

Old:
----
  python-octaviaclient-2.3.0.tar.gz

New:
----
  python-octaviaclient-2.4.0.tar.gz

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

Other differences:
------------------
++++++ python-octaviaclient.spec ++++++
--- /var/tmp/diff_new_pack.LNDzOM/_old  2021-12-12 00:57:35.198583434 +0100
+++ /var/tmp/diff_new_pack.LNDzOM/_new  2021-12-12 00:57:35.202583437 +0100
@@ -17,13 +17,13 @@
 
 
 Name:           python-octaviaclient
-Version:        2.3.0
+Version:        2.4.0
 Release:        0
 Summary:        Octavia Plugin for the OpenStack Command-line Client
 License:        Apache-2.0
 Group:          Development/Languages/Python
 URL:            https://docs.openstack.org/python-octaviaclient
-Source0:        
https://files.pythonhosted.org/packages/source/p/python-octaviaclient/python-octaviaclient-2.3.0.tar.gz
+Source0:        
https://files.pythonhosted.org/packages/source/p/python-octaviaclient/python-octaviaclient-2.4.0.tar.gz
 BuildRequires:  openstack-macros
 BuildRequires:  python3-mock
 BuildRequires:  python3-openstackclient >= 3.12.0
@@ -71,13 +71,13 @@
 This package contains auto-generated documentation.
 
 %prep
-%autosetup -p1 -n python-octaviaclient-2.3.0
+%autosetup -p1 -n python-octaviaclient-2.4.0
 %py_req_cleanup
 
 %build
 %{py3_build}
 
-PBR_VERSION=2.3.0 %sphinx_build -b html doc/source doc/build/html
+PBR_VERSION=2.4.0 %sphinx_build -b html doc/source doc/build/html
 # remove the sphinx-build leftovers
 rm -rf doc/build/html/.{doctrees,buildinfo}
 

++++++ _service ++++++
--- /var/tmp/diff_new_pack.LNDzOM/_old  2021-12-12 00:57:35.230583456 +0100
+++ /var/tmp/diff_new_pack.LNDzOM/_new  2021-12-12 00:57:35.230583456 +0100
@@ -1,8 +1,8 @@
 <services>
   <service mode="disabled" name="renderspec">
-    <param 
name="input-template">https://opendev.org/openstack/rpm-packaging/raw/branch/stable/wallaby/openstack/python-octaviaclient/python-octaviaclient.spec.j2</param>
+    <param 
name="input-template">https://opendev.org/openstack/rpm-packaging/raw/master/openstack/python-octaviaclient/python-octaviaclient.spec.j2</param>
     <param name="output-name">python-octaviaclient.spec</param>
-    <param 
name="requirements">https://opendev.org/openstack/python-octaviaclient/raw/branch/stable/wallaby/requirements.txt</param>
+    <param 
name="requirements">https://opendev.org/openstack/python-octaviaclient/raw/master/requirements.txt</param>
     <param name="changelog-email">[email protected]</param>
     <param name="changelog-provider">gh,openstack,python-octaviaclient</param>
   </service>

++++++ python-octaviaclient-2.3.0.tar.gz -> python-octaviaclient-2.4.0.tar.gz 
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-octaviaclient-2.3.0/AUTHORS 
new/python-octaviaclient-2.4.0/AUTHORS
--- old/python-octaviaclient-2.3.0/AUTHORS      2021-03-11 12:09:14.000000000 
+0100
+++ new/python-octaviaclient-2.4.0/AUTHORS      2021-07-15 12:27:16.000000000 
+0200
@@ -33,6 +33,7 @@
 Thomas Bechtold <[email protected]>
 Tony Breeds <[email protected]>
 Yang JianFeng <[email protected]>
+YuehuiLei <[email protected]>
 Zane Bitter <[email protected]>
 ZhaoBo <[email protected]>
 ZhongShengping <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-octaviaclient-2.3.0/ChangeLog 
new/python-octaviaclient-2.4.0/ChangeLog
--- old/python-octaviaclient-2.3.0/ChangeLog    2021-03-11 12:09:14.000000000 
+0100
+++ new/python-octaviaclient-2.4.0/ChangeLog    2021-07-15 12:27:16.000000000 
+0200
@@ -1,6 +1,16 @@
 CHANGES
 =======
 
+2.4.0
+-----
+
+* Fix some typos
+* Improve the client performance on large clouds
+* Support pagination for 'list' API calls
+* setup.cfg: Replace dashes with underscores
+* Add Python3 xena unit tests
+* Update master for stable/wallaby
+
 2.3.0
 -----
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-octaviaclient-2.3.0/PKG-INFO 
new/python-octaviaclient-2.4.0/PKG-INFO
--- old/python-octaviaclient-2.3.0/PKG-INFO     2021-03-11 12:09:14.972966200 
+0100
+++ new/python-octaviaclient-2.4.0/PKG-INFO     2021-07-15 12:27:17.029564100 
+0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.2
 Name: python-octaviaclient
-Version: 2.3.0
+Version: 2.4.0
 Summary: Octavia client for OpenStack Load Balancing
 Home-page: https://docs.openstack.org/python-octaviaclient/latest/
 Author: OpenStack
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-octaviaclient-2.3.0/octaviaclient/api/constants.py 
new/python-octaviaclient-2.4.0/octaviaclient/api/constants.py
--- old/python-octaviaclient-2.3.0/octaviaclient/api/constants.py       
2021-03-11 12:08:42.000000000 +0100
+++ new/python-octaviaclient-2.4.0/octaviaclient/api/constants.py       
2021-07-15 12:26:46.000000000 +0200
@@ -11,54 +11,72 @@
 #   under the License.
 #
 
+LOADBALANCER_RESOURCES = 'loadbalancers'
+LISTENER_RESOURCES = 'listeners'
+POOL_RESOURCES = 'pools'
+MEMBER_RESOURCES = 'members'
+HEALTH_MONITOR_RESOURCES = 'healthmonitors'
+L7POLICY_RESOURCES = 'l7policies'
+L7RULE_RESOURCES = 'rules'
+QUOTA_RESOURCES = 'quotas'
+AMPHORA_RESOURCES = 'amphorae'
+PROVIDER_RESOURCES = 'providers'
+PROVIDER_FLAVOR_CAPABILITY_RESOURCES = 'flavor_capabilities'
+PROVIDER_AVAILABILITY_ZONE_CAPABILITY_RESOURCES = (
+    'availability_zone_capabilities')
+FLAVOR_RESOURCES = 'flavors'
+FLAVORPROFILE_RESOURCES = 'flavorprofiles'
+AVAILABILITYZONE_RESOURCES = 'availability_zones'
+AVAILABILITYZONEPROFILE_RESOURCES = 'availability_zone_profiles'
+
 BASE_LBAAS_ENDPOINT = '/lbaas'
 BASE_OCTAVIA_ENDPOINT = '/octavia'
 
-BASE_LOADBALANCER_URL = BASE_LBAAS_ENDPOINT + '/loadbalancers'
+BASE_LOADBALANCER_URL = BASE_LBAAS_ENDPOINT + '/' + LOADBALANCER_RESOURCES
 BASE_SINGLE_LB_URL = BASE_LOADBALANCER_URL + '/{uuid}'
 BASE_LB_STATS_URL = BASE_SINGLE_LB_URL + '/stats'
 BASE_LOADBALANCER_STATUS_URL = BASE_SINGLE_LB_URL + '/status'
 BASE_LOADBALANCER_FAILOVER_URL = BASE_SINGLE_LB_URL + '/failover'
 
-BASE_LISTENER_URL = BASE_LBAAS_ENDPOINT + '/listeners'
+BASE_LISTENER_URL = BASE_LBAAS_ENDPOINT + '/' + LISTENER_RESOURCES
 BASE_SINGLE_LISTENER_URL = BASE_LISTENER_URL + '/{uuid}'
 BASE_LISTENER_STATS_URL = BASE_SINGLE_LISTENER_URL + '/stats'
 
-BASE_POOL_URL = BASE_LBAAS_ENDPOINT + '/pools'
+BASE_POOL_URL = BASE_LBAAS_ENDPOINT + '/' + POOL_RESOURCES
 BASE_SINGLE_POOL_URL = BASE_POOL_URL + '/{pool_id}'
 
-BASE_MEMBER_URL = BASE_SINGLE_POOL_URL + '/members'
+BASE_MEMBER_URL = BASE_SINGLE_POOL_URL + '/' + MEMBER_RESOURCES
 BASE_SINGLE_MEMBER_URL = BASE_MEMBER_URL + '/{member_id}'
 
-BASE_HEALTH_MONITOR_URL = BASE_LBAAS_ENDPOINT + '/healthmonitors'
+BASE_HEALTH_MONITOR_URL = BASE_LBAAS_ENDPOINT + '/' + HEALTH_MONITOR_RESOURCES
 BASE_SINGLE_HEALTH_MONITOR_URL = BASE_HEALTH_MONITOR_URL + '/{uuid}'
 
-BASE_L7POLICY_URL = BASE_LBAAS_ENDPOINT + '/l7policies'
+BASE_L7POLICY_URL = BASE_LBAAS_ENDPOINT + '/' + L7POLICY_RESOURCES
 BASE_SINGLE_L7POLICY_URL = BASE_L7POLICY_URL + '/{policy_uuid}'
-BASE_L7RULE_URL = BASE_SINGLE_L7POLICY_URL + '/rules'
-BASE_SINGLE_L7RULE_URL = BASE_SINGLE_L7POLICY_URL + '/rules/{rule_uuid}'
+BASE_L7RULE_URL = BASE_SINGLE_L7POLICY_URL + '/' + L7RULE_RESOURCES
+BASE_SINGLE_L7RULE_URL = BASE_L7RULE_URL + '/{rule_uuid}'
 
-BASE_QUOTA_URL = BASE_LBAAS_ENDPOINT + '/quotas'
+BASE_QUOTA_URL = BASE_LBAAS_ENDPOINT + '/' + QUOTA_RESOURCES
 BASE_SINGLE_QUOTA_URL = BASE_QUOTA_URL + '/{uuid}'
 BASE_QUOTA_DEFAULT_URL = BASE_QUOTA_URL + '/defaults'
 
-BASE_AMPHORA_URL = BASE_OCTAVIA_ENDPOINT + "/amphorae"
+BASE_AMPHORA_URL = BASE_OCTAVIA_ENDPOINT + "/" + AMPHORA_RESOURCES
 BASE_SINGLE_AMPHORA_URL = BASE_AMPHORA_URL + "/{uuid}"
 BASE_AMPHORA_CONFIGURE_URL = BASE_SINGLE_AMPHORA_URL + '/config'
 BASE_AMPHORA_FAILOVER_URL = BASE_SINGLE_AMPHORA_URL + '/failover'
 BASE_AMPHORA_STATS_URL = BASE_SINGLE_AMPHORA_URL + '/stats'
 
-BASE_PROVIDER_URL = BASE_LBAAS_ENDPOINT + "/providers"
+BASE_PROVIDER_URL = BASE_LBAAS_ENDPOINT + "/" + PROVIDER_RESOURCES
 BASE_PROVIDER_FLAVOR_CAPABILITY_URL = (
-    BASE_LBAAS_ENDPOINT + "/providers/{provider}/flavor_capabilities")
+    BASE_PROVIDER_URL + "/{provider}/" + PROVIDER_FLAVOR_CAPABILITY_RESOURCES)
 BASE_PROVIDER_AVAILABILITY_ZONE_CAPABILITY_URL = (
-    BASE_LBAAS_ENDPOINT + "/providers/{provider}"
-                          "/availability_zone_capabilities"
+    BASE_PROVIDER_URL + "/{provider}/" +
+    PROVIDER_AVAILABILITY_ZONE_CAPABILITY_RESOURCES
 )
 
-BASE_FLAVOR_URL = BASE_LBAAS_ENDPOINT + "/flavors"
+BASE_FLAVOR_URL = BASE_LBAAS_ENDPOINT + "/" + FLAVOR_RESOURCES
 BASE_SINGLE_FLAVOR_URL = BASE_FLAVOR_URL + "/{uuid}"
-BASE_FLAVORPROFILE_URL = BASE_LBAAS_ENDPOINT + "/flavorprofiles"
+BASE_FLAVORPROFILE_URL = BASE_LBAAS_ENDPOINT + "/" + FLAVORPROFILE_RESOURCES
 BASE_SINGLE_FLAVORPROFILE_URL = BASE_FLAVORPROFILE_URL + "/{uuid}"
 
 BASE_AVAILABILITYZONE_URL = BASE_LBAAS_ENDPOINT + "/availabilityzones"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-octaviaclient-2.3.0/octaviaclient/api/v2/octavia.py 
new/python-octaviaclient-2.4.0/octaviaclient/api/v2/octavia.py
--- old/python-octaviaclient-2.3.0/octaviaclient/api/v2/octavia.py      
2021-03-11 12:08:42.000000000 +0100
+++ new/python-octaviaclient-2.4.0/octaviaclient/api/v2/octavia.py      
2021-07-15 12:26:46.000000000 +0200
@@ -12,6 +12,7 @@
 #
 """Octavia API Library"""
 import functools
+import urllib.parse as urlparse
 
 from osc_lib.api import api
 from osc_lib import exceptions as osc_exc
@@ -66,17 +67,39 @@
 
     _endpoint_suffix = '/v2.0'
 
+    # Make sure we are always requesting JSON responses
+    JSON_HEADER = {'Accept': 'application/json'}
+
     def __init__(self, endpoint=None, **kwargs):
         super().__init__(endpoint=endpoint, **kwargs)
         self.endpoint = self.endpoint.rstrip('/')
         self._build_url()
 
-        # Make sure we are always requesting JSON responses
-        JSON_HEADER = {'Accept': 'application/json'}
-        self._create = functools.partial(self.create, headers=JSON_HEADER)
-        self._delete = functools.partial(self.delete, headers=JSON_HEADER)
-        self._find = functools.partial(self.find, headers=JSON_HEADER)
-        self._list = functools.partial(self.list, headers=JSON_HEADER)
+        self._create = functools.partial(self.create, headers=self.JSON_HEADER)
+        self._delete = functools.partial(self.delete, headers=self.JSON_HEADER)
+        self._find = functools.partial(self.find, headers=self.JSON_HEADER)
+
+    def _list(self, path, **params):
+        get_all = params.pop('get_all', False)
+        if not get_all:
+            return self.list(path, **params, headers=self.JSON_HEADER)
+
+        # Enable pagination for 'resources'
+        resource_key = params.pop('resources')
+        res = []
+        while True:
+            response = self.list(path, **params, headers=self.JSON_HEADER)
+            res.extend(response[resource_key])
+
+            links = response.get("{}_links".format(resource_key), [])
+            for link in links:
+                if link.get('rel') == 'next':
+                    query_str = urlparse.urlparse(link['href']).query
+                    params = urlparse.parse_qs(query_str)
+                    break
+            else:
+                break
+        return {resource_key: res}
 
     def _build_url(self):
         if not self.endpoint.endswith(self._endpoint_suffix):
@@ -92,7 +115,9 @@
             List of load balancers
         """
         url = const.BASE_LOADBALANCER_URL
-        response = self._list(url, **params)
+        response = self._list(url, get_all=True,
+                              resources=const.LOADBALANCER_RESOURCES,
+                              **params)
 
         return response
 
@@ -207,7 +232,9 @@
             List of listeners
         """
         url = const.BASE_LISTENER_URL
-        response = self._list(url, **kwargs)
+        response = self._list(url, get_all=True,
+                              resources=const.LISTENER_RESOURCES,
+                              **kwargs)
 
         return response
 
@@ -292,7 +319,9 @@
             List of pools
         """
         url = const.BASE_POOL_URL
-        response = self._list(url, **kwargs)
+        response = self._list(url, get_all=True,
+                              resources=const.POOL_RESOURCES,
+                              **kwargs)
 
         return response
 
@@ -365,7 +394,9 @@
             Response list members
         """
         url = const.BASE_MEMBER_URL.format(pool_id=pool_id)
-        response = self._list(url, **kwargs)
+        response = self._list(url, get_all=True,
+                              resources=const.MEMBER_RESOURCES,
+                              **kwargs)
 
         return response
 
@@ -449,7 +480,9 @@
             List of l7policies
         """
         url = const.BASE_L7POLICY_URL
-        response = self._list(url, **kwargs)
+        response = self._list(url, get_all=True,
+                              resources=const.L7POLICY_RESOURCES,
+                              **kwargs)
 
         return response
 
@@ -520,7 +553,9 @@
             List of l7rules
         """
         url = const.BASE_L7RULE_URL.format(policy_uuid=l7policy_id)
-        response = self._list(url, **kwargs)
+        response = self._list(url, get_all=True,
+                              resources=const.L7RULE_RESOURCES,
+                              **kwargs)
 
         return response
 
@@ -602,7 +637,9 @@
             A dict containing a list of health monitors
         """
         url = const.BASE_HEALTH_MONITOR_URL
-        response = self._list(url, **kwargs)
+        response = self._list(url, get_all=True,
+                              resources=const.HEALTH_MONITOR_RESOURCES,
+                              **kwargs)
 
         return response
 
@@ -676,7 +713,9 @@
             A ``dict`` representing a list of quotas for the project
         """
         url = const.BASE_QUOTA_URL
-        response = self._list(url, **params)
+        response = self._list(url, get_all=True,
+                              resources=const.QUOTA_RESOURCES,
+                              **params)
 
         return response
 
@@ -759,7 +798,9 @@
             A ``dict`` containing a list of amphorae
         """
         url = const.BASE_AMPHORA_URL
-        response = self._list(path=url, **kwargs)
+        response = self._list(path=url, get_all=True,
+                              resources=const.AMPHORA_RESOURCES,
+                              **kwargs)
 
         return response
 
@@ -827,7 +868,8 @@
             A ``dict`` containing a list of provider
         """
         url = const.BASE_PROVIDER_URL
-        response = self._list(path=url)
+        response = self._list(path=url, get_all=True,
+                              resources=const.PROVIDER_RESOURCES)
 
         return response
 
@@ -842,7 +884,9 @@
         """
         url = const.BASE_PROVIDER_FLAVOR_CAPABILITY_URL.format(
             provider=provider)
-        response = self._list(url)
+        resources = const.PROVIDER_FLAVOR_CAPABILITY_RESOURCES
+        response = self._list(url, get_all=True,
+                              resources=resources)
 
         return response
 
@@ -857,7 +901,9 @@
         """
         url = const.BASE_PROVIDER_AVAILABILITY_ZONE_CAPABILITY_URL.format(
             provider=provider)
-        response = self._list(url)
+        resources = const.PROVIDER_AVAILABILITY_ZONE_CAPABILITY_RESOURCES
+        response = self._list(url, get_all=True,
+                              resources=resources)
 
         return response
 
@@ -871,7 +917,8 @@
             A ``dict`` containing a list of flavor
         """
         url = const.BASE_FLAVOR_URL
-        response = self._list(path=url, **kwargs)
+        response = self._list(path=url, get_all=True,
+                              resources=const.FLAVOR_RESOURCES, **kwargs)
 
         return response
 
@@ -956,7 +1003,9 @@
             List of flavor profile
         """
         url = const.BASE_FLAVORPROFILE_URL
-        response = self._list(url, **kwargs)
+        response = self._list(url, get_all=True,
+                              resources=const.FLAVORPROFILE_RESOURCES,
+                              **kwargs)
 
         return response
 
@@ -1014,7 +1063,9 @@
             A ``dict`` containing a list of availabilityzone
         """
         url = const.BASE_AVAILABILITYZONE_URL
-        response = self._list(path=url, **kwargs)
+        response = self._list(path=url, get_all=True,
+                              resources=const.AVAILABILITYZONE_RESOURCES,
+                              **kwargs)
 
         return response
 
@@ -1103,7 +1154,10 @@
             List of availabilityzone profile
         """
         url = const.BASE_AVAILABILITYZONEPROFILE_URL
-        response = self._list(url, **kwargs)
+        resources = const.AVAILABILITYZONEPROFILE_RESOURCES
+        response = self._list(url, get_all=True,
+                              resources=resources,
+                              **kwargs)
 
         return response
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-octaviaclient-2.3.0/octaviaclient/osc/v2/amphora.py 
new/python-octaviaclient-2.4.0/octaviaclient/osc/v2/amphora.py
--- old/python-octaviaclient-2.3.0/octaviaclient/osc/v2/amphora.py      
2021-03-11 12:08:42.000000000 +0100
+++ new/python-octaviaclient-2.4.0/octaviaclient/osc/v2/amphora.py      
2021-07-15 12:26:46.000000000 +0200
@@ -137,7 +137,7 @@
         parser.add_argument(
             '--wait',
             action='store_true',
-            help='Wait for action to complete',
+            help='Wait for action to complete.',
         )
 
         return parser
@@ -176,7 +176,7 @@
         parser.add_argument(
             '--wait',
             action='store_true',
-            help='Wait for action to complete',
+            help='Wait for action to complete.',
         )
 
         return parser
@@ -214,12 +214,12 @@
         parser.add_argument(
             '--listener',
             metavar='<listener>',
-            help='Filter by listener (name or ID)',
+            help='Filter by listener (name or ID).',
         )
         parser.add_argument(
             'amphora_id',
             metavar='<amphora-id>',
-            help='UUID of the amphora'
+            help='UUID of the amphora.'
         )
 
         return parser
@@ -267,7 +267,7 @@
         parser.add_argument(
             '--wait',
             action='store_true',
-            help='Wait for action to complete',
+            help='Wait for action to complete.',
         )
 
         return parser
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-octaviaclient-2.3.0/octaviaclient/osc/v2/availabilityzoneprofile.py 
new/python-octaviaclient-2.4.0/octaviaclient/osc/v2/availabilityzoneprofile.py
--- 
old/python-octaviaclient-2.3.0/octaviaclient/osc/v2/availabilityzoneprofile.py  
    2021-03-11 12:08:42.000000000 +0100
+++ 
new/python-octaviaclient-2.4.0/octaviaclient/osc/v2/availabilityzoneprofile.py  
    2021-07-15 12:26:46.000000000 +0200
@@ -75,7 +75,7 @@
         parser.add_argument(
             'availabilityzoneprofile',
             metavar='<availabilityzone_profile>',
-            help="Availability zone profile to delete (name or ID)"
+            help="Availability zone profile to delete (name or ID)."
         )
 
         return parser
@@ -98,7 +98,7 @@
         parser.add_argument(
             '--name',
             metavar='<name>',
-            help="List availabilityzone profiles by profile name."
+            help="List availability zone profiles by profile name."
         )
         parser.add_argument(
             '--provider',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-octaviaclient-2.3.0/octaviaclient/osc/v2/flavor.py 
new/python-octaviaclient-2.4.0/octaviaclient/osc/v2/flavor.py
--- old/python-octaviaclient-2.3.0/octaviaclient/osc/v2/flavor.py       
2021-03-11 12:08:42.000000000 +0100
+++ new/python-octaviaclient-2.4.0/octaviaclient/osc/v2/flavor.py       
2021-07-15 12:26:46.000000000 +0200
@@ -90,7 +90,7 @@
         parser.add_argument(
             'flavor',
             metavar='<flavor>',
-            help="Flavor to delete (name or ID)"
+            help="Flavor to delete (name or ID)."
         )
 
         return parser
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-octaviaclient-2.3.0/octaviaclient/osc/v2/flavorprofile.py 
new/python-octaviaclient-2.4.0/octaviaclient/osc/v2/flavorprofile.py
--- old/python-octaviaclient-2.3.0/octaviaclient/osc/v2/flavorprofile.py        
2021-03-11 12:08:42.000000000 +0100
+++ new/python-octaviaclient-2.4.0/octaviaclient/osc/v2/flavorprofile.py        
2021-07-15 12:26:46.000000000 +0200
@@ -74,7 +74,7 @@
         parser.add_argument(
             'flavorprofile',
             metavar='<flavor_profile>',
-            help="Flavor profiles to delete (name or ID)"
+            help="Flavor profiles to delete (name or ID)."
         )
 
         return parser
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-octaviaclient-2.3.0/octaviaclient/osc/v2/health_monitor.py 
new/python-octaviaclient-2.4.0/octaviaclient/osc/v2/health_monitor.py
--- old/python-octaviaclient-2.3.0/octaviaclient/osc/v2/health_monitor.py       
2021-03-11 12:08:42.000000000 +0100
+++ new/python-octaviaclient-2.4.0/octaviaclient/osc/v2/health_monitor.py       
2021-07-15 12:26:46.000000000 +0200
@@ -138,7 +138,7 @@
         parser.add_argument(
             '--wait',
             action='store_true',
-            help='Wait for action to complete',
+            help='Wait for action to complete.',
         )
 
         _tag.add_tag_option_to_parser_for_create(
@@ -191,7 +191,7 @@
         parser.add_argument(
             '--wait',
             action='store_true',
-            help='Wait for action to complete',
+            help='Wait for action to complete.',
         )
 
         return parser
@@ -369,7 +369,7 @@
         parser.add_argument(
             '--wait',
             action='store_true',
-            help='Wait for action to complete',
+            help='Wait for action to complete.',
         )
 
         _tag.add_tag_option_to_parser_for_set(parser, 'health monitor')
@@ -449,7 +449,7 @@
         parser.add_argument(
             '--wait',
             action='store_true',
-            help='Wait for action to complete',
+            help='Wait for action to complete.',
         )
 
         _tag.add_tag_option_to_parser_for_unset(parser, 'health monitor')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-octaviaclient-2.3.0/octaviaclient/osc/v2/l7policy.py 
new/python-octaviaclient-2.4.0/octaviaclient/osc/v2/l7policy.py
--- old/python-octaviaclient-2.3.0/octaviaclient/osc/v2/l7policy.py     
2021-03-11 12:08:42.000000000 +0100
+++ new/python-octaviaclient-2.4.0/octaviaclient/osc/v2/l7policy.py     
2021-07-15 12:26:46.000000000 +0200
@@ -85,7 +85,7 @@
             metavar='<redirect_http_code>',
             choices=REDIRECT_CODE_CHOICES,
             type=int,
-            help="Set the HTTP response code for REDIRECT_URL or"
+            help="Set the HTTP response code for REDIRECT_URL or "
                  "REDIRECT_PREFIX action."
         )
         parser.add_argument(
@@ -110,7 +110,7 @@
         parser.add_argument(
             '--wait',
             action='store_true',
-            help='Wait for action to complete',
+            help='Wait for action to complete.',
         )
 
         _tag.add_tag_option_to_parser_for_create(
@@ -163,7 +163,7 @@
         parser.add_argument(
             '--wait',
             action='store_true',
-            help='Wait for action to complete',
+            help='Wait for action to complete.',
         )
 
         return parser
@@ -305,7 +305,7 @@
             metavar='<redirect_http_code>',
             choices=REDIRECT_CODE_CHOICES,
             type=int,
-            help="Set the HTTP response code for REDIRECT_URL or"
+            help="Set the HTTP response code for REDIRECT_URL or "
                  "REDIRECT_PREFIX action."
         )
         parser.add_argument(
@@ -330,7 +330,7 @@
         parser.add_argument(
             '--wait',
             action='store_true',
-            help='Wait for action to complete',
+            help='Wait for action to complete.',
         )
 
         _tag.add_tag_option_to_parser_for_set(parser, 'l7policy')
@@ -390,7 +390,7 @@
         parser.add_argument(
             '--wait',
             action='store_true',
-            help='Wait for action to complete',
+            help='Wait for action to complete.',
         )
 
         _tag.add_tag_option_to_parser_for_unset(parser, 'l7policy')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-octaviaclient-2.3.0/octaviaclient/osc/v2/l7rule.py 
new/python-octaviaclient-2.4.0/octaviaclient/osc/v2/l7rule.py
--- old/python-octaviaclient-2.3.0/octaviaclient/osc/v2/l7rule.py       
2021-03-11 12:08:42.000000000 +0100
+++ new/python-octaviaclient-2.4.0/octaviaclient/osc/v2/l7rule.py       
2021-07-15 12:26:46.000000000 +0200
@@ -93,7 +93,7 @@
         parser.add_argument(
             '--wait',
             action='store_true',
-            help='Wait for action to complete',
+            help='Wait for action to complete.',
         )
 
         _tag.add_tag_option_to_parser_for_create(
@@ -155,7 +155,7 @@
         parser.add_argument(
             '--wait',
             action='store_true',
-            help='Wait for action to complete',
+            help='Wait for action to complete.',
         )
 
         return parser
@@ -313,7 +313,7 @@
         parser.add_argument(
             '--wait',
             action='store_true',
-            help='Wait for action to complete',
+            help='Wait for action to complete.',
         )
 
         _tag.add_tag_option_to_parser_for_set(parser, 'l7rule')
@@ -380,7 +380,7 @@
         parser.add_argument(
             '--wait',
             action='store_true',
-            help='Wait for action to complete',
+            help='Wait for action to complete.',
         )
         _tag.add_tag_option_to_parser_for_unset(parser, 'l7rule')
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-octaviaclient-2.3.0/octaviaclient/osc/v2/listener.py 
new/python-octaviaclient-2.4.0/octaviaclient/osc/v2/listener.py
--- old/python-octaviaclient-2.3.0/octaviaclient/osc/v2/listener.py     
2021-03-11 12:08:42.000000000 +0100
+++ new/python-octaviaclient-2.4.0/octaviaclient/osc/v2/listener.py     
2021-07-15 12:26:46.000000000 +0200
@@ -174,7 +174,7 @@
         parser.add_argument(
             '--wait',
             action='store_true',
-            help='Wait for action to complete',
+            help='Wait for action to complete.',
         )
         parser.add_argument(
             '--tls-ciphers',
@@ -251,12 +251,12 @@
         parser.add_argument(
             'listener',
             metavar="<listener>",
-            help="Listener to delete (name or ID)"
+            help="Listener to delete (name or ID)."
         )
         parser.add_argument(
             '--wait',
             action='store_true',
-            help='Wait for action to complete',
+            help='Wait for action to complete.',
         )
 
         return parser
@@ -338,7 +338,7 @@
         parser.add_argument(
             'listener',
             metavar='<listener>',
-            help='Name or UUID of the listener'
+            help='Name or UUID of the listener.'
         )
 
         return parser
@@ -410,7 +410,7 @@
             '--default-tls-container-ref',
             metavar='<container-ref>',
             help="The URI to the key manager service secrets container "
-                 "containing the certificate and key for TERMINATED_TLS"
+                 "containing the certificate and key for TERMINATED_TLS "
                  "listeners."
         )
         parser.add_argument(
@@ -501,7 +501,7 @@
         parser.add_argument(
             '--wait',
             action='store_true',
-            help='Wait for action to complete',
+            help='Wait for action to complete.',
         )
         parser.add_argument(
             '--tls-ciphers',
@@ -702,7 +702,7 @@
         parser.add_argument(
             'listener',
             metavar='<listener>',
-            help='Name or UUID of the listener'
+            help='Name or UUID of the listener.'
         )
 
         return parser
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-octaviaclient-2.3.0/octaviaclient/osc/v2/load_balancer.py 
new/python-octaviaclient-2.4.0/octaviaclient/osc/v2/load_balancer.py
--- old/python-octaviaclient-2.3.0/octaviaclient/osc/v2/load_balancer.py        
2021-03-11 12:08:42.000000000 +0100
+++ new/python-octaviaclient-2.4.0/octaviaclient/osc/v2/load_balancer.py        
2021-07-15 12:26:46.000000000 +0200
@@ -130,7 +130,7 @@
         parser.add_argument(
             '--wait',
             action='store_true',
-            help='Wait for action to complete',
+            help='Wait for action to complete.',
         )
 
         _tag.add_tag_option_to_parser_for_create(
@@ -181,7 +181,7 @@
         parser.add_argument(
             'loadbalancer',
             metavar='<load_balancer>',
-            help="Load balancers to delete (name or ID)"
+            help="Load balancers to delete (name or ID)."
         )
         parser.add_argument(
             '--cascade',
@@ -193,7 +193,7 @@
         parser.add_argument(
             '--wait',
             action='store_true',
-            help='Wait for action to complete',
+            help='Wait for action to complete.',
         )
 
         return parser
@@ -228,7 +228,7 @@
         parser.add_argument(
             '--wait',
             action='store_true',
-            help='Wait for action to complete',
+            help='Wait for action to complete.',
         )
 
         return parser
@@ -438,7 +438,7 @@
         parser.add_argument(
             '--wait',
             action='store_true',
-            help='Wait for action to complete',
+            help='Wait for action to complete.',
         )
 
         _tag.add_tag_option_to_parser_for_set(parser, 'load balancer')
@@ -496,7 +496,7 @@
         parser.add_argument(
             '--wait',
             action='store_true',
-            help='Wait for action to complete',
+            help='Wait for action to complete.',
         )
 
         _tag.add_tag_option_to_parser_for_unset(parser, 'load balancer')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-octaviaclient-2.3.0/octaviaclient/osc/v2/member.py 
new/python-octaviaclient-2.4.0/octaviaclient/osc/v2/member.py
--- old/python-octaviaclient-2.3.0/octaviaclient/osc/v2/member.py       
2021-03-11 12:08:42.000000000 +0100
+++ new/python-octaviaclient-2.4.0/octaviaclient/osc/v2/member.py       
2021-07-15 12:26:46.000000000 +0200
@@ -126,13 +126,13 @@
             '--disable-backup',
             action='store_true',
             default=None,
-            help="Disable member backup (default)"
+            help="Disable member backup (default)."
         )
         backup.add_argument(
             '--enable-backup',
             action='store_true',
             default=None,
-            help="Enable member backup"
+            help="Enable member backup."
         )
         parser.add_argument(
             '--weight',
@@ -145,7 +145,7 @@
         parser.add_argument(
             '--address',
             metavar='<ip_address>',
-            help="The IP address of the backend member server",
+            help="The IP address of the backend member server.",
             required=True
         )
         parser.add_argument(
@@ -179,18 +179,18 @@
             '--enable',
             action='store_true',
             default=None,
-            help="Enable member (default)"
+            help="Enable member (default)."
         )
         admin_group.add_argument(
             '--disable',
             action='store_true',
             default=None,
-            help="Disable member"
+            help="Disable member."
         )
         parser.add_argument(
             '--wait',
             action='store_true',
-            help='Wait for action to complete',
+            help='Wait for action to complete.',
         )
 
         _tag.add_tag_option_to_parser_for_create(
@@ -246,38 +246,38 @@
         parser.add_argument(
             'member',
             metavar='<member>',
-            help="Name or ID of the member to update"
+            help="Name or ID of the member to update."
         )
         parser.add_argument(
             '--name',
             metavar='<name>',
-            help="Set the name of the member"
+            help="Set the name of the member."
         )
         backup = parser.add_mutually_exclusive_group()
         backup.add_argument(
             '--disable-backup',
             action='store_true',
             default=None,
-            help="Disable member backup (default)"
+            help="Disable member backup (default)."
         )
         backup.add_argument(
             '--enable-backup',
             action='store_true',
             default=None,
-            help="Enable member backup"
+            help="Enable member backup."
         )
         parser.add_argument(
             '--weight',
             metavar='<weight>',
             type=int,
-            help="Set the weight of member in the pool"
+            help="Set the weight of member in the pool."
         )
         parser.add_argument(
             '--monitor-port',
             metavar='<monitor_port>',
             type=int,
             help="An alternate protocol port used for health monitoring a "
-                 "backend member",
+                 "backend member.",
         )
         parser.add_argument(
             '--monitor-address',
@@ -290,17 +290,17 @@
             '--enable',
             action='store_true',
             default=None,
-            help="Set the admin_state_up to True"
+            help="Set the admin_state_up to True."
         )
         admin_group.add_argument(
             '--disable',
             action='store_true',
             default=None,
-            help="Set the admin_state_up to False")
+            help="Set the admin_state_up to False.")
         parser.add_argument(
             '--wait',
             action='store_true',
-            help='Wait for action to complete',
+            help='Wait for action to complete.',
         )
 
         _tag.add_tag_option_to_parser_for_set(parser, 'member')
@@ -357,7 +357,7 @@
         parser.add_argument(
             '--wait',
             action='store_true',
-            help='Wait for action to complete',
+            help='Wait for action to complete.',
         )
 
         return parser
@@ -427,7 +427,7 @@
         parser.add_argument(
             '--wait',
             action='store_true',
-            help='Wait for action to complete',
+            help='Wait for action to complete.',
         )
         _tag.add_tag_option_to_parser_for_unset(parser, 'member')
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-octaviaclient-2.3.0/octaviaclient/osc/v2/pool.py 
new/python-octaviaclient-2.4.0/octaviaclient/osc/v2/pool.py
--- old/python-octaviaclient-2.3.0/octaviaclient/osc/v2/pool.py 2021-03-11 
12:08:42.000000000 +0100
+++ new/python-octaviaclient-2.4.0/octaviaclient/osc/v2/pool.py 2021-07-15 
12:26:46.000000000 +0200
@@ -64,7 +64,7 @@
         parent_group.add_argument(
             '--loadbalancer',
             metavar='<load_balancer>',
-            help="Load balncer to add the pool to (name or ID)"
+            help="Load balancer to add the pool to (name or ID)."
         )
         parser.add_argument(
             '--session-persistence',
@@ -104,7 +104,7 @@
             metavar='<ca_tls_container_ref>',
             help="The reference to the key manager service secrets container "
                  "containing the CA certificate for ``tls_enabled`` pools "
-                 "to check the backend member servers certificates"
+                 "to check the backend member servers certificates."
         )
         parser.add_argument(
             '--crl-container-ref',
@@ -129,7 +129,7 @@
         parser.add_argument(
             '--wait',
             action='store_true',
-            help='Wait for action to complete',
+            help='Wait for action to complete.',
         )
         parser.add_argument(
             '--tls-ciphers',
@@ -206,7 +206,7 @@
         parser.add_argument(
             '--wait',
             action='store_true',
-            help='Wait for action to complete',
+            help='Wait for action to complete.',
         )
 
         return parser
@@ -380,7 +380,7 @@
         parser.add_argument(
             '--wait',
             action='store_true',
-            help='Wait for action to complete',
+            help='Wait for action to complete.',
         )
         parser.add_argument(
             '--tls-ciphers',
@@ -487,7 +487,7 @@
         parser.add_argument(
             '--wait',
             action='store_true',
-            help='Wait for action to complete',
+            help='Wait for action to complete.',
         )
         parser.add_argument(
             '--alpn-protocols',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-octaviaclient-2.3.0/octaviaclient/osc/v2/quota.py 
new/python-octaviaclient-2.4.0/octaviaclient/osc/v2/quota.py
--- old/python-octaviaclient-2.3.0/octaviaclient/osc/v2/quota.py        
2021-03-11 12:08:42.000000000 +0100
+++ new/python-octaviaclient-2.4.0/octaviaclient/osc/v2/quota.py        
2021-07-15 12:26:46.000000000 +0200
@@ -195,7 +195,7 @@
         parser.add_argument(
             'project',
             metavar="<project>",
-            help="Project to reset quotas (name or ID)"
+            help="Project to reset quotas (name or ID)."
         )
 
         return parser
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-octaviaclient-2.3.0/octaviaclient/osc/v2/utils.py 
new/python-octaviaclient-2.4.0/octaviaclient/osc/v2/utils.py
--- old/python-octaviaclient-2.3.0/octaviaclient/osc/v2/utils.py        
2021-03-11 12:08:42.000000000 +0100
+++ new/python-octaviaclient-2.4.0/octaviaclient/osc/v2/utils.py        
2021-07-15 12:26:46.000000000 +0200
@@ -16,6 +16,7 @@
 from openstackclient.identity import common as identity_common
 from osc_lib import exceptions as osc_exc
 from osc_lib import utils
+from oslo_utils import uuidutils
 
 from octaviaclient.api import exceptions
 from octaviaclient.osc.v2 import constants
@@ -62,6 +63,62 @@
     return res
 
 
+def _find_resource(list_funct, resource_name, root_tag, name, parent=None):
+    """Search for a resource by name and ID.
+
+    This function will search for a resource by both the name and ID,
+    returning the resource once it finds a match. If no match is found,
+    an exception will be raised.
+
+    :param list_funct: The resource list method to call during searches.
+    :param resource_name: The name of the resource type we are searching for.
+    :param root_tag: The root tag of the resource returned from the API.
+    :param name: The value we are searching for, a resource name or ID.
+    :param parent: The parent resource ID, when required.
+    :return: The resource found for the name or ID.
+    :raises osc_exc.CommandError: If more than one match or none are found.
+    """
+    if parent:
+        parent_args = [parent]
+    else:
+        parent_args = []
+    # Optimize the API call order if we got a UUID-like name or not
+    if uuidutils.is_uuid_like(name):
+        # Try by ID first
+        resource = list_funct(*parent_args, id=name)[root_tag]
+        if len(resource) == 1:
+            return resource[0]
+
+        # Try by name next
+        resource = list_funct(*parent_args, name=name)[root_tag]
+        if len(resource) == 1:
+            return resource[0]
+        if len(resource) > 1:
+            msg = ("{0} {1} found with name or ID of {2}. Please try "
+                   "again with UUID".format(len(resource), resource_name,
+                                            name))
+            raise osc_exc.CommandError(msg)
+    else:
+        # Try by name first
+        resource = list_funct(*parent_args, name=name)[root_tag]
+        if len(resource) == 1:
+            return resource[0]
+        if len(resource) > 1:
+            msg = ("{0} {1} found with name or ID of {2}. Please try "
+                   "again with UUID".format(len(resource), resource_name,
+                                            name))
+            raise osc_exc.CommandError(msg)
+
+        # Try by ID next
+        resource = list_funct(*parent_args, id=name)[root_tag]
+        if len(resource) == 1:
+            return resource[0]
+
+    # We didn't find what we were looking for, raise a consistent error.
+    msg = "Unable to locate {0} in {1}".format(name, resource_name)
+    raise osc_exc.CommandError(msg)
+
+
 def get_resource_id(resource, resource_name, name):
     """Converts a resource name into a UUID for consumption for the API
 
@@ -94,30 +151,20 @@
                 ).id
                 return project_id
             return 'non-uuid'
+
         if resource_name == 'members':
-            names = [re for re in resource(name['pool_id'])['members']
-                     if re.get('id') == name['member_id'] or
-                     re.get('name') == name['member_id']]
-            name = name['member_id']
-            if len(names) > 1:
-                msg = ("{0} {1} found with name or ID of {2}. Please try "
-                       "again with UUID".format(len(names), resource_name,
-                                                name))
-                raise osc_exc.CommandError(msg)
-            return names[0].get('id')
+            member = _find_resource(resource, resource_name, 'members',
+                                    name['member_id'], parent=name['pool_id'])
+            return member.get('id')
+
         if resource_name == 'l7rules':
-            names = [re for re in resource(name['l7policy_id'])['rules']
-                     if re.get('id') == name['l7rule_id']]
-            name = name['l7rule_id']
-            return names[0].get('id')
-        names = [re for re in resource()[resource_name]
-                 if re.get('name') == name or re.get('id') == name]
-        if len(names) > 1:
-            msg = ("{0} {1} found with name or ID of {2}. Please try "
-                   "again with UUID".format(len(names), resource_name,
-                                            name))
-            raise osc_exc.CommandError(msg)
-        return names[0].get(primary_key)
+            l7rule = _find_resource(resource, resource_name, 'rules',
+                                    name['l7rule_id'],
+                                    parent=name['l7policy_id'])
+            return l7rule.get('id')
+
+        resource = _find_resource(resource, resource_name, resource_name, name)
+        return resource.get(primary_key)
 
     except IndexError as e:
         msg = "Unable to locate {0} in {1}".format(name, resource_name)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-octaviaclient-2.3.0/octaviaclient/tests/unit/api/test_octavia.py 
new/python-octaviaclient-2.4.0/octaviaclient/tests/unit/api/test_octavia.py
--- old/python-octaviaclient-2.3.0/octaviaclient/tests/unit/api/test_octavia.py 
2021-03-11 12:08:42.000000000 +0100
+++ new/python-octaviaclient-2.4.0/octaviaclient/tests/unit/api/test_octavia.py 
2021-07-15 12:26:46.000000000 +0200
@@ -68,10 +68,11 @@
          {'name': 'mem2'}]
 }
 
-LIST_L7PO_RESP = [
-    {'name': 'l71'},
-    {'name': 'l72'},
-]
+LIST_L7PO_RESP = {
+    'l7policies':
+        [{'name': 'l71'},
+         {'name': 'l72'}]
+}
 
 LIST_L7RU_RESP = {
     'rules':
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-octaviaclient-2.3.0/octaviaclient/tests/unit/osc/v2/test_availabilityzone.py
 
new/python-octaviaclient-2.4.0/octaviaclient/tests/unit/osc/v2/test_availabilityzone.py
--- 
old/python-octaviaclient-2.3.0/octaviaclient/tests/unit/osc/v2/test_availabilityzone.py
     2021-03-11 12:08:42.000000000 +0100
+++ 
new/python-octaviaclient-2.4.0/octaviaclient/tests/unit/osc/v2/test_availabilityzone.py
     2021-07-15 12:26:46.000000000 +0200
@@ -94,6 +94,8 @@
         verifylist = [
             ('availabilityzone', 'unknown_availabilityzone')
         ]
+        self.api_mock.availabilityzone_list.return_value = {
+            'availability_zones': []}
         parsed_args = self.check_parser(self.cmd, arglist, verifylist)
         self.assertRaises(exceptions.CommandError, self.cmd.take_action,
                           parsed_args)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-octaviaclient-2.3.0/octaviaclient/tests/unit/osc/v2/test_availabilityzoneprofile.py
 
new/python-octaviaclient-2.4.0/octaviaclient/tests/unit/osc/v2/test_availabilityzoneprofile.py
--- 
old/python-octaviaclient-2.3.0/octaviaclient/tests/unit/osc/v2/test_availabilityzoneprofile.py
      2021-03-11 12:08:42.000000000 +0100
+++ 
new/python-octaviaclient-2.4.0/octaviaclient/tests/unit/osc/v2/test_availabilityzoneprofile.py
      2021-07-15 12:26:46.000000000 +0200
@@ -99,6 +99,8 @@
         verifylist = [
             ('availabilityzoneprofile', 'unknown_availabilityzoneprofile')
         ]
+        self.api_mock.availabilityzoneprofile_list.return_value = {
+            'availability_zone_profiles': []}
         parsed_args = self.check_parser(self.cmd, arglist, verifylist)
         self.assertRaises(exceptions.CommandError, self.cmd.take_action,
                           parsed_args)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-octaviaclient-2.3.0/octaviaclient/tests/unit/osc/v2/test_flavor.py 
new/python-octaviaclient-2.4.0/octaviaclient/tests/unit/osc/v2/test_flavor.py
--- 
old/python-octaviaclient-2.3.0/octaviaclient/tests/unit/osc/v2/test_flavor.py   
    2021-03-11 12:08:42.000000000 +0100
+++ 
new/python-octaviaclient-2.4.0/octaviaclient/tests/unit/osc/v2/test_flavor.py   
    2021-07-15 12:26:46.000000000 +0200
@@ -92,6 +92,7 @@
         verifylist = [
             ('flavor', 'unknown_flavor')
         ]
+        self.api_mock.flavor_list.return_value = {'flavors': []}
         parsed_args = self.check_parser(self.cmd, arglist, verifylist)
         self.assertRaises(exceptions.CommandError, self.cmd.take_action,
                           parsed_args)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-octaviaclient-2.3.0/octaviaclient/tests/unit/osc/v2/test_flavorprofile.py
 
new/python-octaviaclient-2.4.0/octaviaclient/tests/unit/osc/v2/test_flavorprofile.py
--- 
old/python-octaviaclient-2.3.0/octaviaclient/tests/unit/osc/v2/test_flavorprofile.py
        2021-03-11 12:08:42.000000000 +0100
+++ 
new/python-octaviaclient-2.4.0/octaviaclient/tests/unit/osc/v2/test_flavorprofile.py
        2021-07-15 12:26:46.000000000 +0200
@@ -94,6 +94,8 @@
         verifylist = [
             ('flavorprofile', 'unknown_flavorprofile')
         ]
+        self.api_mock.flavorprofile_list.return_value = {
+            'flavorprofiles': []}
         parsed_args = self.check_parser(self.cmd, arglist, verifylist)
         self.assertRaises(exceptions.CommandError, self.cmd.take_action,
                           parsed_args)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-octaviaclient-2.3.0/octaviaclient/tests/unit/osc/v2/test_health_monitor.py
 
new/python-octaviaclient-2.4.0/octaviaclient/tests/unit/osc/v2/test_health_monitor.py
--- 
old/python-octaviaclient-2.3.0/octaviaclient/tests/unit/osc/v2/test_health_monitor.py
       2021-03-11 12:08:42.000000000 +0100
+++ 
new/python-octaviaclient-2.4.0/octaviaclient/tests/unit/osc/v2/test_health_monitor.py
       2021-07-15 12:26:46.000000000 +0200
@@ -157,6 +157,8 @@
         verifylist = [
             ('health_monitor', 'unknown_hm')
         ]
+        self.api_mock.health_monitor_list.return_value = {
+            'healthmonitors': []}
         parsed_args = self.check_parser(self.cmd, arglist, verifylist)
         self.assertRaises(exceptions.CommandError, self.cmd.take_action,
                           parsed_args)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-octaviaclient-2.3.0/octaviaclient/tests/unit/osc/v2/test_l7policy.py 
new/python-octaviaclient-2.4.0/octaviaclient/tests/unit/osc/v2/test_l7policy.py
--- 
old/python-octaviaclient-2.3.0/octaviaclient/tests/unit/osc/v2/test_l7policy.py 
    2021-03-11 12:08:42.000000000 +0100
+++ 
new/python-octaviaclient-2.4.0/octaviaclient/tests/unit/osc/v2/test_l7policy.py 
    2021-07-15 12:26:46.000000000 +0200
@@ -173,6 +173,7 @@
         verifylist = [
             ('l7policy', 'unknown_policy')
         ]
+        self.api_mock.l7policy_list.return_value = {'l7policies': []}
         parsed_args = self.check_parser(self.cmd, arglist, verifylist)
         self.assertRaises(exceptions.CommandError, self.cmd.take_action,
                           parsed_args)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-octaviaclient-2.3.0/octaviaclient/tests/unit/osc/v2/test_listener.py 
new/python-octaviaclient-2.4.0/octaviaclient/tests/unit/osc/v2/test_listener.py
--- 
old/python-octaviaclient-2.3.0/octaviaclient/tests/unit/osc/v2/test_listener.py 
    2021-03-11 12:08:42.000000000 +0100
+++ 
new/python-octaviaclient-2.4.0/octaviaclient/tests/unit/osc/v2/test_listener.py 
    2021-07-15 12:26:46.000000000 +0200
@@ -162,6 +162,7 @@
         verifylist = [
             ('listener', 'unknown_lb')
         ]
+        self.api_mock.listener_list.return_value = {'listeners': []}
         parsed_args = self.check_parser(self.cmd, arglist, verifylist)
         self.assertRaises(exceptions.CommandError, self.cmd.take_action,
                           parsed_args)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-octaviaclient-2.3.0/octaviaclient/tests/unit/osc/v2/test_load_balancer.py
 
new/python-octaviaclient-2.4.0/octaviaclient/tests/unit/osc/v2/test_load_balancer.py
--- 
old/python-octaviaclient-2.3.0/octaviaclient/tests/unit/osc/v2/test_load_balancer.py
        2021-03-11 12:08:42.000000000 +0100
+++ 
new/python-octaviaclient-2.4.0/octaviaclient/tests/unit/osc/v2/test_load_balancer.py
        2021-07-15 12:26:46.000000000 +0200
@@ -305,6 +305,8 @@
         verifylist = [
             ('loadbalancer', 'unknown_lb')
         ]
+        self.api_mock.load_balancer_list.return_value = {
+            'loadbalancers': []}
         parsed_args = self.check_parser(self.cmd, arglist, verifylist)
         self.assertRaises(exceptions.CommandError, self.cmd.take_action,
                           parsed_args)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-octaviaclient-2.3.0/octaviaclient/tests/unit/osc/v2/test_pool.py 
new/python-octaviaclient-2.4.0/octaviaclient/tests/unit/osc/v2/test_pool.py
--- old/python-octaviaclient-2.3.0/octaviaclient/tests/unit/osc/v2/test_pool.py 
2021-03-11 12:08:42.000000000 +0100
+++ new/python-octaviaclient-2.4.0/octaviaclient/tests/unit/osc/v2/test_pool.py 
2021-07-15 12:26:46.000000000 +0200
@@ -155,6 +155,7 @@
         verifylist = [
             ('pool', 'unknown_pool')
         ]
+        self.api_mock.pool_list.return_value = {'pools': []}
         parsed_args = self.check_parser(self.cmd, arglist, verifylist)
         self.assertRaises(exceptions.CommandError, self.cmd.take_action,
                           parsed_args)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-octaviaclient-2.3.0/python_octaviaclient.egg-info/PKG-INFO 
new/python-octaviaclient-2.4.0/python_octaviaclient.egg-info/PKG-INFO
--- old/python-octaviaclient-2.3.0/python_octaviaclient.egg-info/PKG-INFO       
2021-03-11 12:09:14.000000000 +0100
+++ new/python-octaviaclient-2.4.0/python_octaviaclient.egg-info/PKG-INFO       
2021-07-15 12:27:16.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.2
 Name: python-octaviaclient
-Version: 2.3.0
+Version: 2.4.0
 Summary: Octavia client for OpenStack Load Balancing
 Home-page: https://docs.openstack.org/python-octaviaclient/latest/
 Author: OpenStack
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-octaviaclient-2.3.0/python_octaviaclient.egg-info/SOURCES.txt 
new/python-octaviaclient-2.4.0/python_octaviaclient.egg-info/SOURCES.txt
--- old/python-octaviaclient-2.3.0/python_octaviaclient.egg-info/SOURCES.txt    
2021-03-11 12:09:14.000000000 +0100
+++ new/python-octaviaclient-2.4.0/python_octaviaclient.egg-info/SOURCES.txt    
2021-07-15 12:27:17.000000000 +0200
@@ -95,6 +95,7 @@
 releasenotes/notes/Add-support-for-UDP-5476caa65b1253a6.yaml
 releasenotes/notes/Add-unset-commands-15490df414a70df0.yaml
 releasenotes/notes/Client-to-request-JSON-responses-8d942dafca785c70.yaml
+releasenotes/notes/Improve-client-performance-when-using-a-name-instead-of-ID-51a6637050386a90.yaml
 releasenotes/notes/add-ability-set-listener-cipher-list-fe379d0d0821ed42.yaml
 releasenotes/notes/add-ability-set-pool-cipher-list-70128f983506fbdb.yaml
 releasenotes/notes/add-alpn-support-listeners-6508704b5c8944d2.yaml
@@ -126,6 +127,7 @@
 releasenotes/notes/amphora-list-long-option-55390b5abef5b82e.yaml
 releasenotes/notes/drop-python-2-7-7b427838d72ef248.yaml
 releasenotes/notes/exposed-timeouts-eb29f55de5e56261.yaml
+releasenotes/notes/fix-cli-pagination-792ad8cd386eb0e7.yaml
 
releasenotes/notes/improve-error-messages-for-invalid-calls-bc9eb3d18d3e4fdf.yaml
 releasenotes/notes/initial-list-command-90c9fa39fc10540e.yaml
 releasenotes/notes/list-l7policies-by-listener-a11322c8e03a11e9.yaml
@@ -142,6 +144,7 @@
 releasenotes/source/unreleased.rst
 releasenotes/source/ussuri.rst
 releasenotes/source/victoria.rst
+releasenotes/source/wallaby.rst
 releasenotes/source/_static/.placeholder
 releasenotes/source/_templates/.placeholder
 tools/coding-checks.sh
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-octaviaclient-2.3.0/python_octaviaclient.egg-info/pbr.json 
new/python-octaviaclient-2.4.0/python_octaviaclient.egg-info/pbr.json
--- old/python-octaviaclient-2.3.0/python_octaviaclient.egg-info/pbr.json       
2021-03-11 12:09:14.000000000 +0100
+++ new/python-octaviaclient-2.4.0/python_octaviaclient.egg-info/pbr.json       
2021-07-15 12:27:16.000000000 +0200
@@ -1 +1 @@
-{"git_version": "e7922ac", "is_release": true}
\ No newline at end of file
+{"git_version": "6ef3eed", "is_release": true}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-octaviaclient-2.3.0/releasenotes/notes/Improve-client-performance-when-using-a-name-instead-of-ID-51a6637050386a90.yaml
 
new/python-octaviaclient-2.4.0/releasenotes/notes/Improve-client-performance-when-using-a-name-instead-of-ID-51a6637050386a90.yaml
--- 
old/python-octaviaclient-2.3.0/releasenotes/notes/Improve-client-performance-when-using-a-name-instead-of-ID-51a6637050386a90.yaml
  1970-01-01 01:00:00.000000000 +0100
+++ 
new/python-octaviaclient-2.4.0/releasenotes/notes/Improve-client-performance-when-using-a-name-instead-of-ID-51a6637050386a90.yaml
  2021-07-15 12:26:46.000000000 +0200
@@ -0,0 +1,5 @@
+---
+fixes:
+  - |
+    Improved the client performance when using a name instead of the
+    resource ID.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-octaviaclient-2.3.0/releasenotes/notes/fix-cli-pagination-792ad8cd386eb0e7.yaml
 
new/python-octaviaclient-2.4.0/releasenotes/notes/fix-cli-pagination-792ad8cd386eb0e7.yaml
--- 
old/python-octaviaclient-2.3.0/releasenotes/notes/fix-cli-pagination-792ad8cd386eb0e7.yaml
  1970-01-01 01:00:00.000000000 +0100
+++ 
new/python-octaviaclient-2.4.0/releasenotes/notes/fix-cli-pagination-792ad8cd386eb0e7.yaml
  2021-07-15 12:26:46.000000000 +0200
@@ -0,0 +1,6 @@
+---
+fixes:
+  - |
+    Fixed some issues when the number of Octavia resources exceeded the
+    'pagination_max_limit' parameter in Octavia API. The list calls now support
+    pagination.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-octaviaclient-2.3.0/releasenotes/source/index.rst 
new/python-octaviaclient-2.4.0/releasenotes/source/index.rst
--- old/python-octaviaclient-2.3.0/releasenotes/source/index.rst        
2021-03-11 12:08:42.000000000 +0100
+++ new/python-octaviaclient-2.4.0/releasenotes/source/index.rst        
2021-07-15 12:26:46.000000000 +0200
@@ -6,6 +6,7 @@
    :maxdepth: 1
 
    unreleased
+   wallaby
    victoria
    ussuri
    train
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-octaviaclient-2.3.0/releasenotes/source/wallaby.rst 
new/python-octaviaclient-2.4.0/releasenotes/source/wallaby.rst
--- old/python-octaviaclient-2.3.0/releasenotes/source/wallaby.rst      
1970-01-01 01:00:00.000000000 +0100
+++ new/python-octaviaclient-2.4.0/releasenotes/source/wallaby.rst      
2021-07-15 12:26:46.000000000 +0200
@@ -0,0 +1,6 @@
+============================
+Wallaby Series Release Notes
+============================
+
+.. release-notes::
+   :branch: stable/wallaby
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-octaviaclient-2.3.0/setup.cfg 
new/python-octaviaclient-2.4.0/setup.cfg
--- old/python-octaviaclient-2.3.0/setup.cfg    2021-03-11 12:09:14.972966200 
+0100
+++ new/python-octaviaclient-2.4.0/setup.cfg    2021-07-15 12:27:17.029564100 
+0200
@@ -1,12 +1,12 @@
 [metadata]
 name = python-octaviaclient
 summary = Octavia client for OpenStack Load Balancing
-description-file = 
+description_file = 
        README.rst
 author = OpenStack
-author-email = [email protected]
-home-page = https://docs.openstack.org/python-octaviaclient/latest/
-python-requires = >=3.6
+author_email = [email protected]
+home_page = https://docs.openstack.org/python-octaviaclient/latest/
+python_requires = >=3.6
 classifier = 
        Environment :: OpenStack
        Intended Audience :: Information Technology
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-octaviaclient-2.3.0/zuul.d/projects.yaml 
new/python-octaviaclient-2.4.0/zuul.d/projects.yaml
--- old/python-octaviaclient-2.3.0/zuul.d/projects.yaml 2021-03-11 
12:08:42.000000000 +0100
+++ new/python-octaviaclient-2.4.0/zuul.d/projects.yaml 2021-07-15 
12:26:46.000000000 +0200
@@ -3,7 +3,7 @@
       - check-requirements
       - openstack-cover-jobs
       - openstack-lower-constraints-jobs
-      - openstack-python3-wallaby-jobs
+      - openstack-python3-xena-jobs
       - openstackclient-plugin-jobs
       - publish-openstack-docs-pti
       - release-notes-jobs-python3

Reply via email to