NSX|V: be able to deal with more than 256 edges

Ensure that the admin utility can work when there are more than
256 edges deifned. The NSX api returns details that enable us
to work with pagination.

Change-Id: I1083875193d9d893d725c48d7c1434f064fef5b6
This commit is contained in:
Gary Kotton 2017-03-30 02:39:08 +03:00
parent a7ba4590f5
commit df2b366593
5 changed files with 20 additions and 40 deletions

View File

@ -262,16 +262,6 @@ class EdgeApplianceDriver(object):
return status_level
def get_edges_statuses(self):
edges_status_level = {}
edges = self._get_edges()
for edge in edges['edgePage'].get('data', []):
edge_id = edge['id']
status = edge['edgeStatus']
edges_status_level[edge_id] = self._edge_status_to_level(status)
return edges_status_level
def get_interface(self, edge_id, vnic_index):
# get vnic interface address groups
try:
@ -372,13 +362,6 @@ class EdgeApplianceDriver(object):
LOG.debug("Deletion complete vnic %(vnic_index)s: on edge %(edge_id)s",
{'vnic_index': index, 'edge_id': edge_id})
def _get_edges(self):
try:
return self.vcns.get_edges()[1]
except exceptions.VcnsApiException as e:
LOG.exception("VCNS: Failed to get edges:\n%s", e.response)
raise e
def deploy_edge(self, context, router_id, name, internal_network,
dist=False, loadbalancer_enable=True,
appliance_size=nsxv_constants.LARGE,

View File

@ -236,10 +236,26 @@ class Vcns(object):
uri = "%s/%s" % (URI_PREFIX, edge_id)
return self.do_request(HTTP_GET, uri, decode=True)
def get_edges(self):
uri = URI_PREFIX
def _get_edges(self, startindex=0):
uri = '%s?startIndex=%d' % (URI_PREFIX, startindex)
return self.do_request(HTTP_GET, uri, decode=True)
def get_edges(self):
edges = []
h, d = self._get_edges()
edges.extend(d['edgePage']['data'])
paging_info = d['edgePage']['pagingInfo']
page_size = int(paging_info['pageSize'])
count = int(paging_info['totalCount'])
LOG.debug("There are total %s edges and page size is %s",
count, page_size)
pages = count / page_size + 1
for i in range(1, pages):
start_index = page_size * i
h, d = self._get_edges(start_index)
edges.extend(d['edgePage']['data'])
return edges
def get_edge_syslog(self, edge_id):
uri = "%s/%s/syslog/config" % (URI_PREFIX, edge_id)
return self.do_request(HTTP_GET, uri, decode=True)

View File

@ -101,8 +101,7 @@ def get_nsxv_backend_edges():
"""Get a list of all the backend edges and some of their attributes
"""
nsxv = get_nsxv_client()
edges = nsxv.get_edges()[1]
edges = edges['edgePage'].get('data', [])
edges = nsxv.get_edges()
backend_edges = []
for edge in edges:
# get all the relevant backend information for this edge

View File

@ -411,9 +411,6 @@ class FakeVcns(object):
return (header, response)
def get_edges(self):
header = {
'status': 200
}
edges = []
for edge_id in self._edges:
edges.append({
@ -421,12 +418,7 @@ class FakeVcns(object):
'edgeStatus': 'GREEN',
'name': self._edges[edge_id]['name']
})
response = {
'edgePage': {
'data': edges
}
}
return (header, response)
return edges
def get_vdn_switch(self, dvs_id):
header = {

View File

@ -380,16 +380,6 @@ class VcnsDriverTestCase(base.BaseTestCase):
status = self.vcns_driver.get_edge_status(self.edge_id)
self.assertEqual(vcns_const.RouterStatus.ROUTER_STATUS_ACTIVE, status)
def test_get_edges(self):
self._deploy_edge()
edges = self.vcns_driver.get_edges_statuses()
found = False
for edge_id, status in six.iteritems(edges):
if edge_id == self.edge_id:
found = True
break
self.assertTrue(found)
def test_update_nat_rules(self):
self._deploy_edge()
snats = [{