Add Transport Nodes api support & router TZ support

1. Add support for the transport nodes resource basic operations
2. Use it for getting the list of TZ of a tier0 router

Change-Id: I381c947044454c04efbc1c38ed7691ef8213ffef
This commit is contained in:
Adit Sarfaty 2018-03-04 13:53:34 +02:00
parent de0c8e29a4
commit af56e15ff0
5 changed files with 64 additions and 0 deletions

View File

@ -331,6 +331,15 @@ FAKE_TZ = {
"host_switch_mode": "STANDARD"
}
FAKE_TN_UUID = uuidutils.generate_uuid()
FAKE_TN = {
"resource_type": "TransportNode",
"revision": 0,
"id": FAKE_TZ_UUID,
"display_name": FAKE_NAME,
"transport_zone_endpoints": [{"transport_zone_id": FAKE_TZ_UUID}]
}
FAKE_MD_UUID = uuidutils.generate_uuid()
FAKE_URL = "http://7.7.7.70:3500/abc"
FAKE_MD = {

View File

@ -1277,6 +1277,19 @@ class TransportZone(BaseTestResource):
self.assertEqual(tz.HOST_SWITCH_MODE_STANDARD, tz_mode)
class TransportNode(BaseTestResource):
def setUp(self):
super(TransportNode, self).setUp(core_resources.NsxLibTransportNode)
def test_get_transport_zones(self):
fake_tn = test_constants.FAKE_TN.copy()
tn = self.get_mocked_resource()
with mock.patch.object(tn.client, 'url_get', return_value=fake_tn):
tzs = tn.get_transport_zones(fake_tn['id'])
self.assertEqual([test_constants.FAKE_TZ_UUID], tzs)
class MetadataProxy(BaseTestResource):
def setUp(self):

View File

@ -244,6 +244,8 @@ class NsxLib(NsxLibBase):
self.client, self.nsxlib_config, nsxlib=self)
self.transport_zone = core_resources.NsxLibTransportZone(
self.client, self.nsxlib_config, nsxlib=self)
self.transport_node = core_resources.NsxLibTransportNode(
self.client, self.nsxlib_config, nsxlib=self)
self.relay_service = core_resources.NsxLibDhcpRelayService(
self.client, self.nsxlib_config, nsxlib=self)
self.relay_profile = core_resources.NsxLibDhcpRelayProfile(

View File

@ -682,6 +682,13 @@ class NsxLibEdgeCluster(utils.NsxLibApiBase):
def resource_type(self):
return 'EdgeCluster'
def get_transport_nodes(self, uuid):
ec = self.get(uuid)
members = []
for member in ec.get('members', []):
members.append(member.get('transport_node_id'))
return members
class NsxLibTransportZone(utils.NsxLibApiBase):
@ -711,6 +718,26 @@ class NsxLibTransportZone(utils.NsxLibApiBase):
return tz.get('host_switch_mode', self.HOST_SWITCH_MODE_STANDARD)
class NsxLibTransportNode(utils.NsxLibApiBase):
@property
def uri_segment(self):
return 'transport-nodes'
@property
def resource_type(self):
return 'TransportNode'
@property
def use_cache_for_get(self):
return True
def get_transport_zones(self, uuid):
tz = self.get(uuid)
return [ep.get('transport_zone_id') for ep in
tz.get('transport_zone_endpoints', [])]
class NsxLibDhcpProfile(utils.NsxLibApiBase):
@property

View File

@ -241,3 +241,16 @@ class RouterLib(object):
return self.nsxlib.logical_router.delete_static_route_by_values(
nsx_router_id, dest_cidr=route['destination'],
nexthop=route['nexthop'])
def get_tier0_router_tz(self, tier0_uuid):
lrouter = self._router_client.get(tier0_uuid)
edge_cluster_uuid = lrouter.get('edge_cluster_id')
if not edge_cluster_uuid:
return []
tier0_transport_nodes = self.nsxlib.edge_cluster.get_transport_nodes(
edge_cluster_uuid)
tier0_tzs = []
for tn_uuid in tier0_transport_nodes:
tier0_tzs.extend(self.nsxlib.transport_node.get_transport_zones(
tn_uuid))
return tier0_tzs