Tempest: Update nsxv3_client to query more than 1k

The maximum page size is 1k in nsxv3 API response. Current read
logical resources only return maximum 1k. Change the nsxv3 client
to read all of the logical resources.

The update applies to GET API calls of logical resources.

Change-Id: I4d1f51c900e5ca89f1da8a5df13a535991765720
This commit is contained in:
Tong Liu 2016-09-27 18:40:42 +00:00
parent 55d2a30ee7
commit dcb7f8b0b8
1 changed files with 33 additions and 25 deletions

View File

@ -132,19 +132,37 @@ class NSXV3Client(object):
data=jsonutils.dumps(body))
return response
def get_logical_resources(self, endpoint):
"""
Get logical resources based on the endpoint
The max page_size in NSXv3 is 1000. So if the results are more than
1000, we need to loop over multiple pages based on cursor to get
all the logical resources.
"""
response = self.get(endpoint=endpoint)
res_json = response.json()
cursor = res_json['cursor']
res_count = res_json['result_count']
pages = res_count / 1000
results = res_json['results']
for p in range(pages):
response = self.get(endpoint=endpoint, params={"cursor": cursor})
results += response.json()['results']
cursor = response.json()['cursor']
return results
def get_transport_zones(self):
"""
Retrieve all transport zones
"""
response = self.get(endpoint="/transport-zones")
return response.json()['results']
return self.get_logical_resources("/transport-zones")
def get_logical_ports(self):
"""
Retrieve all logical ports on NSX backend
"""
response = self.get(endpoint="/logical-ports")
return response.json()['results']
return self.get_logical_resources("/logical-ports")
def get_os_logical_ports(self):
"""
@ -220,8 +238,7 @@ class NSXV3Client(object):
"""
Retrieve all logical switches on NSX backend
"""
response = self.get(endpoint="/logical-switches")
return response.json()['results']
return self.get_logical_resources("/logical-switches")
def get_bridge_cluster_info(self):
"""
@ -229,8 +246,7 @@ class NSXV3Client(object):
:return: returns bridge cluster id and bridge cluster name.
"""
response = self.get(endpoint="/bridge-clusters")
return response.json()["results"]
return self.get_logical_resources("/bridge-clusters")
def get_logical_switch(self, os_name, os_uuid):
"""
@ -259,8 +275,7 @@ class NSXV3Client(object):
"""
Retrieve all firewall sections
"""
response = self.get(endpoint="/firewall/sections")
return response.json()['results']
return self.get_logical_resources("/firewall/sections")
def get_firewall_section(self, os_name, os_uuid):
"""
@ -280,8 +295,7 @@ class NSXV3Client(object):
Retrieve all fw rules for a given fw section
"""
endpoint = "/firewall/sections/%s/rules" % fw_section['id']
response = self.get(endpoint=endpoint)
return response.json()['results']
return self.get_logical_resources(endpoint)
def get_firewall_section_rule(self, fw_section, os_uuid):
"""
@ -295,8 +309,7 @@ class NSXV3Client(object):
"""
Retrieve all NSGroups on NSX backend
"""
response = self.get(endpoint="/ns-groups")
return response.json()['results']
return self.get_logical_resources("/ns-groups")
def get_ns_group(self, os_name, os_uuid):
"""
@ -322,8 +335,7 @@ class NSXV3Client(object):
endpoint = "/logical-routers?router_type=%s" % tier
else:
endpoint = "/logical-routers"
response = self.get(endpoint=endpoint)
return response.json()['results']
return self.get_logical_resources(endpoint)
def get_logical_router(self, os_name, os_uuid):
"""
@ -345,8 +357,7 @@ class NSXV3Client(object):
Get all logical ports attached to lrouter
"""
endpoint = "/logical-router-ports?logical_router_id=%s" % lrouter['id']
response = self.get(endpoint=endpoint)
return response.json()['results']
return self.get_logical_resources(endpoint)
def get_logical_router_nat_rules(self, lrouter):
"""
@ -357,15 +368,13 @@ class NSXV3Client(object):
"to get the NAT rules"))
return None
endpoint = "/logical-routers/%s/nat/rules" % lrouter['id']
response = self.get(endpoint=endpoint)
return response.json()['results']
return self.get_logical_resources(endpoint)
def get_logical_dhcp_servers(self):
"""
Get all logical DHCP servers on NSX backend
"""
response = self.get(endpoint="/dhcp/servers")
return response.json()['results']
return self.get_logical_resources("/dhcp/servers")
def get_logical_dhcp_server(self, os_name, os_uuid):
"""
@ -388,6 +397,5 @@ class NSXV3Client(object):
"""
Get all DHCP static bindings of a logical DHCP server
"""
uri = "/dhcp/servers/%s/static-bindings" % dhcp_server
response = self.get(endpoint=uri)
return response.json()['results']
endpoint = "/dhcp/servers/%s/static-bindings" % dhcp_server
return self.get_logical_resources(endpoint)