lb octavia backend validation, mdproxy validation, rbac with lb

Change-Id: I4de9e15570cb6981612bba0dd6b4247bb8dd252d
This commit is contained in:
dkumbhar 2020-10-24 14:49:30 +00:00
parent 4dc52cb9bd
commit 16c5d9e214
5 changed files with 1022 additions and 23 deletions

View File

@ -271,7 +271,7 @@ class TrafficManager(appliance_manager.ApplianceManager):
start_server = ('while true; do '
'sudo nc -ll -p %(port)s -e sh /tmp/%(script)s; '
'done > /dev/null &')
cmd = start_server % {'port': constants.HTTP_PORT,
cmd = start_server % {'port': protocol_port,
'script': 'script'}
ssh_client.exec_command(cmd)

View File

@ -441,3 +441,90 @@ class VSMClient(object):
return True
else:
return False
def check_cert_at_backend(self, lb_id=None, cert_conent=None):
lbaas_edge_name = 'lbaas-' + lb_id[:-6]
edge_id = self.get_lbaas_edge_id(lbaas_edge_name)
self.__set_api_version('2.0')
endpoint = '/services/truststore/certificate/scope/%s' % edge_id
self.__set_endpoint(endpoint)
response = self.get()
certs = response.json()['certificates']
for cert in certs:
if cert['pemEncoding'] == cert_conent:
return True
else:
return False
def get_lbaas_edge_id(self, edge_name):
edges = self.get_all_edges()
edge_ids = [e['id'] for e in edges if edge_name in e['name']]
if len(edge_ids) == 0:
LOG.debug('Edge %s NOT found!' % edge_name)
edge = None
else:
edge = edge_ids[0]
LOG.debug('Found edge: %s' % edge)
return edge
def get_lbaas_config_from_edge(self, lbaas_id):
lbaas_edge_name = 'lbaas-' + lbaas_id[:-6]
edge_id = self.get_lbaas_edge_id(lbaas_edge_name)
if edge_id is not None:
self.__set_api_version('4.0')
self.__set_endpoint('/edges/%s/loadbalancer/config' % edge_id)
response = self.get()
lbaas_config = response.json()
else:
LOG.debug('Edge NOT found with lb_id %s or deleted!' % lbaas_id)
lbaas_config = []
return lbaas_config
def verify_lbaas_on_edge(self, lbaas_id, listener=None,
pool=None, member=None,
hmonitor=None, cleanup=[]):
lbaas_config = self.get_lbaas_config_from_edge(lbaas_id)
if hmonitor:
hms_vsm = [hm['id'] for hm in lbaas_config['monitor']]
if 'hm' in cleanup:
self.assertFalse(hmonitor['id'] in hms_vsm)
else:
self.assertTrue(hmonitor['id'] in hms_vsm)
if pool:
pool_vsm = \
[(p['name'], p['algorithm']) for p in lbaas_config['pool']]
if 'pool' in cleanup:
self.assertFalse(('pool_' + pool['id'],
'round-robin') in pool_vsm)
else:
self.assertTrue(('pool_' + pool['id'],
'round-robin') in pool_vsm)
if listener:
listener_vsm = \
[lr['name'] for lr in lbaas_config['virtualServer']]
if 'listener' in cleanup:
self.assertFalse('vip_' + listener['id'] in listener_vsm)
else:
self.assertTrue('vip_' + listener['id'] in listener_vsm)
def verify_member_status_of_md_proxy_edges(self):
md_edge_name = 'metadata'
edge_id = self.get_lbaas_edge_id(md_edge_name)
result = False
up_members = 0
if edge_id is not None:
self.__set_api_version('4.0')
self.__set_endpoint('/edges/%s/loadbalancer/statistics' % edge_id)
response = self.get()
members = response.json()['pool'][0]['member']
if members:
for member in members:
if member['status'] == 'UP':
up_members += 1
if len(members) == up_members:
result = True
else:
LOG.debug('pool are not present on required edge')
else:
LOG.debug('Edge NOT found with mdproxy or deleted!')
return result

View File

@ -752,8 +752,12 @@ class OctaviaListenersClient(base.BaseNetworkClient):
uri = self.resource_object_path % listener_id
return self.delete_resource(uri)
def update_octavia_listener(self, listener_id, default_pool_id):
post_data = {"listener": {"default_pool_id": default_pool_id}}
def update_octavia_listener(self, listener_id, default_pool_id=None,
listener_data=None):
if default_pool_id:
post_data = {"listener": {"default_pool_id": default_pool_id}}
if listener_data:
post_data = {"listener": listener_data}
uri = self.resource_object_path % listener_id
return self.update_resource(uri, post_data)
@ -784,6 +788,11 @@ class OctaviaPoolsClient(base.BaseNetworkClient):
uri = self.resource_base_path
return self.list_resources(uri, **filters)
def update_octavia_pool(self, pool_id, pool_data):
post_data = {"pool": pool_data}
uri = self.resource_object_path % pool_id
return self.update_resource(uri, post_data)
class OctaviaHealthMonitorClient(base.BaseNetworkClient):
"""
@ -807,6 +816,11 @@ class OctaviaHealthMonitorClient(base.BaseNetworkClient):
uri = self.resource_object_path % hm_id
return self.delete_resource(uri)
def update_octavia_hm(self, hm_id, hm_data):
post_data = {"healthmonitor": hm_data}
uri = self.resource_object_path % hm_id
return self.update_resource(uri, post_data)
class OctaviaMembersClient(base.BaseNetworkClient):
"""
@ -829,6 +843,11 @@ class OctaviaMembersClient(base.BaseNetworkClient):
uri = self.resource_object_path % (pool_id, member_id)
return self.delete_resource(uri)
def update_octavia_member(self, pool_id, member_id, member_data):
post_data = {'member': member_data}
uri = self.resource_object_path % (pool_id, member_id)
return self.update_resource(uri, post_data)
class OctaviaL7PolicyClient(base.BaseNetworkClient):
"""

View File

@ -1950,3 +1950,9 @@ class TestNewCase(feature_manager.FeatureManager):
port_id = self.cmgr_adm.ports_client.create_port(**args)['port']['id']
self.addCleanup(test_utils.call_and_ignore_notfound_exc,
self.cmgr_adm.ports_client.delete_port, port_id)
@decorators.attr(type='nsxv')
@decorators.idempotent_id('2226016b-91cc-8905-b217-22344cab24a2')
def test_verify_mdproxy_member_status(self):
"""verify mdproxy edges has member status is up"""
self.assertTrue(self.vsm.verify_member_status_of_md_proxy_edges())