NSXT: Remove redundant code, add logging
1. Remove extra init methods which have no functionality 2. Add method logging calls to LBaaS driver Change-Id: I6ef4510290248188a68079b5f06191f25f403210
This commit is contained in:
parent
d7f6e0d2d2
commit
0f1d9d95d6
@ -30,11 +30,6 @@ LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class EdgeHealthMonitorManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def __init__(self):
|
||||
super(EdgeHealthMonitorManagerFromDict, self).__init__()
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def _build_monitor_args(self, hm):
|
||||
if hm['type'] in lb_const.NSXV3_MONITOR_MAP:
|
||||
@ -61,6 +56,7 @@ class EdgeHealthMonitorManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
# body['response_status'] = hm['expected_codes']
|
||||
return body
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def create(self, context, hm, completor):
|
||||
lb_id = hm['pool']['loadbalancer_id']
|
||||
pool_id = hm['pool']['id']
|
||||
@ -106,6 +102,7 @@ class EdgeHealthMonitorManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
|
||||
completor(success=True)
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def update(self, context, old_hm, new_hm, completor):
|
||||
lb_id = new_hm['pool']['loadbalancer_id']
|
||||
pool_id = new_hm['pool']['id']
|
||||
@ -128,6 +125,7 @@ class EdgeHealthMonitorManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
|
||||
completor(success=True)
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def delete(self, context, hm, completor):
|
||||
lb_id = hm['pool']['loadbalancer_id']
|
||||
pool_id = hm['pool']['id']
|
||||
|
@ -29,10 +29,6 @@ LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class EdgeL7PolicyManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
@log_helpers.log_method_call
|
||||
def __init__(self):
|
||||
super(EdgeL7PolicyManagerFromDict, self).__init__()
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def _update_policy_position(self, vs_id, rule_id, position):
|
||||
vs_client = self.core_plugin.nsxlib.load_balancer.virtual_server
|
||||
@ -46,6 +42,7 @@ class EdgeL7PolicyManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
lb_rules.insert(position - 1, rule_id)
|
||||
vs_client.update(vs_id, rule_ids=lb_rules)
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def create(self, context, policy, completor):
|
||||
lb_id = policy['listener']['loadbalancer_id']
|
||||
listener_id = policy['listener_id']
|
||||
@ -84,6 +81,7 @@ class EdgeL7PolicyManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
context.session, policy['id'], lb_rule['id'], vs_id)
|
||||
completor(success=True)
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def update(self, context, old_policy, new_policy, completor):
|
||||
rule_client = self.core_plugin.nsxlib.load_balancer.rule
|
||||
binding = nsx_db.get_nsx_lbaas_l7policy_binding(context.session,
|
||||
@ -111,6 +109,7 @@ class EdgeL7PolicyManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
|
||||
completor(success=True)
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def delete(self, context, policy, completor):
|
||||
vs_client = self.core_plugin.nsxlib.load_balancer.virtual_server
|
||||
rule_client = self.core_plugin.nsxlib.load_balancer.rule
|
||||
|
@ -28,9 +28,6 @@ LOG = logging.getLogger(__name__)
|
||||
|
||||
class EdgeL7RuleManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
@log_helpers.log_method_call
|
||||
def __init__(self):
|
||||
super(EdgeL7RuleManagerFromDict, self).__init__()
|
||||
|
||||
def _update_l7rule_change(self, context, rule, completor,
|
||||
delete=False):
|
||||
rule_client = self.core_plugin.nsxlib.load_balancer.rule
|
||||
@ -60,11 +57,14 @@ class EdgeL7RuleManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
|
||||
completor(success=True)
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def create(self, context, rule, completor):
|
||||
self._update_l7rule_change(context, rule, completor)
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def update(self, context, old_rule, new_rule, completor):
|
||||
self._update_l7rule_change(context, new_rule, completor)
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def delete(self, context, rule, completor):
|
||||
self._update_l7rule_change(context, rule, completor, delete=True)
|
||||
|
@ -16,6 +16,7 @@
|
||||
from neutron.db import l3_db
|
||||
from neutron.services.flavors import flavors_plugin
|
||||
from neutron_lib import exceptions as n_exc
|
||||
from oslo_log import helpers as log_helpers
|
||||
|
||||
from vmware_nsx._i18n import _
|
||||
from vmware_nsx.db import db as nsx_db
|
||||
@ -25,6 +26,7 @@ from vmware_nsxlib.v3 import nsx_constants
|
||||
ADV_RULE_NAME = 'LB external VIP advertisement'
|
||||
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def get_tags(plugin, resource_id, resource_type, project_id, project_name):
|
||||
resource = {'project_id': project_id,
|
||||
'id': resource_id}
|
||||
@ -34,12 +36,14 @@ def get_tags(plugin, resource_id, resource_type, project_id, project_name):
|
||||
return tags
|
||||
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def get_network_from_subnet(context, plugin, subnet_id):
|
||||
subnet = plugin.get_subnet(context, subnet_id)
|
||||
if subnet:
|
||||
return plugin.get_network(context, subnet['network_id'])
|
||||
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def get_router_from_network(context, plugin, subnet_id):
|
||||
subnet = plugin.get_subnet(context, subnet_id)
|
||||
network_id = subnet['network_id']
|
||||
@ -52,6 +56,7 @@ def get_router_from_network(context, plugin, subnet_id):
|
||||
return router['id']
|
||||
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def get_lb_flavor_size(flavor_plugin, context, flavor_id):
|
||||
if not flavor_id:
|
||||
return lb_const.DEFAULT_LB_SIZE
|
||||
@ -68,6 +73,7 @@ def get_lb_flavor_size(flavor_plugin, context, flavor_id):
|
||||
raise n_exc.InvalidInput(error_message=err_msg)
|
||||
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def validate_lb_subnet(context, plugin, subnet_id):
|
||||
'''Validate LB subnet before creating loadbalancer on it.
|
||||
|
||||
@ -90,6 +96,7 @@ def validate_lb_subnet(context, plugin, subnet_id):
|
||||
return False
|
||||
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def validate_lb_member_subnet(context, plugin, subnet_id, lb):
|
||||
'''Validate LB member subnet before creating a member.
|
||||
|
||||
@ -123,6 +130,7 @@ def validate_lb_member_subnet(context, plugin, subnet_id, lb):
|
||||
return False
|
||||
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def get_rule_match_conditions(policy):
|
||||
match_conditions = []
|
||||
# values in rule have already been validated in LBaaS API,
|
||||
@ -166,6 +174,7 @@ def get_rule_match_conditions(policy):
|
||||
return match_conditions
|
||||
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def get_rule_actions(context, l7policy):
|
||||
lb_id = l7policy['listener']['loadbalancer_id']
|
||||
if l7policy['action'] == lb_const.L7_POLICY_ACTION_REDIRECT_TO_POOL:
|
||||
@ -194,6 +203,7 @@ def get_rule_actions(context, l7policy):
|
||||
return actions
|
||||
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def convert_l7policy_to_lb_rule(context, policy):
|
||||
return {
|
||||
'match_conditions': get_rule_match_conditions(policy),
|
||||
@ -203,16 +213,19 @@ def convert_l7policy_to_lb_rule(context, policy):
|
||||
}
|
||||
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def remove_rule_from_policy(rule):
|
||||
l7rules = rule['policy']['rules']
|
||||
rule['policy']['rules'] = [r for r in l7rules if r['id'] != rule['id']]
|
||||
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def update_rule_in_policy(rule):
|
||||
remove_rule_from_policy(rule)
|
||||
rule['policy']['rules'].append(rule)
|
||||
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def update_router_lb_vip_advertisement(context, core_plugin, router,
|
||||
nsx_router_id):
|
||||
# Add a rule to advertise external vips on the router
|
||||
|
@ -34,9 +34,6 @@ LOG = logging.getLogger(__name__)
|
||||
|
||||
class EdgeListenerManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
@log_helpers.log_method_call
|
||||
def __init__(self):
|
||||
super(EdgeListenerManagerFromDict, self).__init__()
|
||||
|
||||
def _get_virtual_server_kwargs(self, context, listener, vs_name, tags,
|
||||
app_profile_id, certificate=None):
|
||||
# If loadbalancer vip_port already has floating ip, use floating
|
||||
@ -74,6 +71,7 @@ class EdgeListenerManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
kwargs.update(ssl_profile_binding)
|
||||
return kwargs
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def _get_ssl_profile_binding(self, tags, certificate=None):
|
||||
tm_client = self.core_plugin.nsxlib.trust_management
|
||||
if certificate:
|
||||
@ -97,6 +95,7 @@ class EdgeListenerManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
}
|
||||
}
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def _get_listener_tags(self, context, listener):
|
||||
tags = lb_utils.get_tags(self.core_plugin, listener['id'],
|
||||
lb_const.LB_LISTENER_TYPE,
|
||||
@ -110,6 +109,7 @@ class EdgeListenerManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
'tag': listener['loadbalancer_id']})
|
||||
return tags
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def create(self, context, listener, completor,
|
||||
certificate=None):
|
||||
lb_id = listener['loadbalancer_id']
|
||||
@ -165,6 +165,7 @@ class EdgeListenerManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
virtual_server['id'])
|
||||
completor(success=True)
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def update(self, context, old_listener, new_listener, completor,
|
||||
certificate=None):
|
||||
nsxlib_lb = self.core_plugin.nsxlib.load_balancer
|
||||
@ -203,6 +204,7 @@ class EdgeListenerManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
'error %(error)s',
|
||||
{'listener': old_listener['id'], 'error': e})
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def delete(self, context, listener, completor):
|
||||
lb_id = listener['loadbalancer_id']
|
||||
nsxlib_lb = self.core_plugin.nsxlib.load_balancer
|
||||
@ -285,6 +287,7 @@ class EdgeListenerManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
completor(success=True)
|
||||
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def stats_getter(context, core_plugin, ignore_list=None):
|
||||
"""Update Octavia statistics for each listener (virtual server)"""
|
||||
stat_list = []
|
||||
|
@ -15,6 +15,7 @@
|
||||
|
||||
|
||||
from neutron_lib import exceptions as n_exc
|
||||
from oslo_log import helpers as log_helpers
|
||||
from oslo_log import log as logging
|
||||
from oslo_utils import excutils
|
||||
|
||||
@ -31,6 +32,7 @@ LOG = logging.getLogger(__name__)
|
||||
|
||||
class EdgeLoadBalancerManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def create(self, context, lb, completor):
|
||||
if lb_utils.validate_lb_subnet(context, self.core_plugin,
|
||||
lb['vip_subnet_id']):
|
||||
@ -42,6 +44,7 @@ class EdgeLoadBalancerManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
{'sub': lb['vip_subnet_id'], 'lb': lb['id']})
|
||||
raise n_exc.BadRequest(resource='lbaas-subnet', msg=msg)
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def update(self, context, old_lb, new_lb, completor):
|
||||
vs_client = self.core_plugin.nsxlib.load_balancer.virtual_server
|
||||
app_client = self.core_plugin.nsxlib.load_balancer.application_profile
|
||||
@ -75,6 +78,7 @@ class EdgeLoadBalancerManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
|
||||
completor(success=True)
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def delete(self, context, lb, completor):
|
||||
service_client = self.core_plugin.nsxlib.load_balancer.service
|
||||
lb_binding = nsx_db.get_nsx_lbaas_loadbalancer_binding(
|
||||
@ -116,10 +120,12 @@ class EdgeLoadBalancerManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
router_id)
|
||||
completor(success=True)
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def refresh(self, context, lb):
|
||||
# TODO(tongl): implement
|
||||
pass
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def _nsx_status_to_lb_status(self, nsx_status):
|
||||
if not nsx_status:
|
||||
# default fallback
|
||||
@ -139,6 +145,7 @@ class EdgeLoadBalancerManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
LOG.debug("NSX LB status %s - interpreted as ONLINE", nsx_status)
|
||||
return lb_const.ONLINE
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def get_lb_pool_members_statuses(self, nsx_pool_id, members_statuses):
|
||||
# Combine the NSX pool members data and the NSX statuses to provide
|
||||
# member statuses list
|
||||
@ -169,6 +176,7 @@ class EdgeLoadBalancerManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
statuses.append({'id': member_id, 'status': member_status})
|
||||
return statuses
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def get_operating_status(self, context, id, with_members=False):
|
||||
"""Return a map of the operating status of all connected LB objects """
|
||||
service_client = self.core_plugin.nsxlib.load_balancer.service
|
||||
@ -230,6 +238,7 @@ class EdgeLoadBalancerManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
|
||||
return statuses
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def stats(self, context, lb):
|
||||
# Since multiple LBaaS loadbalancer can share the same LB service,
|
||||
# get the corresponding virtual servers' stats instead of LB service.
|
||||
@ -263,6 +272,7 @@ class EdgeLoadBalancerManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
raise n_exc.BadRequest(resource='lbaas-lb', msg=msg)
|
||||
return stats
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def _get_lb_virtual_servers(self, context, lb):
|
||||
# Get all virtual servers that belong to this loadbalancer
|
||||
vs_list = []
|
||||
|
@ -32,10 +32,6 @@ LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class EdgeMemberManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
@log_helpers.log_method_call
|
||||
def __init__(self):
|
||||
super(EdgeMemberManagerFromDict, self).__init__()
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def _get_info_from_fip(self, context, fip):
|
||||
filters = {'floating_ip_address': [fip]}
|
||||
@ -80,6 +76,7 @@ class EdgeMemberManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
|
||||
return lb_service
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def _get_updated_pool_members(self, context, lb_pool, member):
|
||||
network = lb_utils.get_network_from_subnet(
|
||||
context, self.core_plugin, member['subnet_id'])
|
||||
@ -109,11 +106,13 @@ class EdgeMemberManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
LOG.debug("LB binding has already been added, and no need "
|
||||
"to add here.")
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def create(self, context, member, completor):
|
||||
with locking.LockManager.get_lock(
|
||||
'member-%s' % str(member['pool']['loadbalancer_id'])):
|
||||
self._member_create(context, member, completor)
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def _member_create(self, context, member, completor):
|
||||
lb_id = member['pool']['loadbalancer_id']
|
||||
pool_id = member['pool']['id']
|
||||
@ -229,6 +228,7 @@ class EdgeMemberManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
|
||||
completor(success=True)
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def update(self, context, old_member, new_member, completor):
|
||||
lb_id = old_member['pool']['loadbalancer_id']
|
||||
pool_id = old_member['pool']['id']
|
||||
@ -253,6 +253,7 @@ class EdgeMemberManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
{'member': old_member['id'], 'err': e})
|
||||
completor(success=True)
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def delete(self, context, member, completor):
|
||||
lb_id = member['pool']['loadbalancer_id']
|
||||
pool_id = member['pool']['id']
|
||||
|
@ -35,9 +35,6 @@ LOG = logging.getLogger(__name__)
|
||||
|
||||
class EdgePoolManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
@log_helpers.log_method_call
|
||||
def __init__(self):
|
||||
super(EdgePoolManagerFromDict, self).__init__()
|
||||
|
||||
def _get_pool_kwargs(self, name=None, tags=None, algorithm=None,
|
||||
description=None):
|
||||
kwargs = {}
|
||||
@ -52,6 +49,7 @@ class EdgePoolManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
kwargs['snat_translation'] = {'type': "LbSnatAutoMap"}
|
||||
return kwargs
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def _build_persistence_profile_tags(self, pool_tags, listener):
|
||||
tags = pool_tags[:]
|
||||
tags.append({
|
||||
@ -65,6 +63,7 @@ class EdgePoolManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
'tag': listener['id']})
|
||||
return tags
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def _validate_session_persistence(self, pool, listener, completor,
|
||||
old_pool=None):
|
||||
sp = pool.get('session_persistence')
|
||||
@ -102,6 +101,7 @@ class EdgePoolManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
'old_sp_type': oldsp['type']})
|
||||
raise n_exc.BadRequest(resource='lbaas-pool', msg=msg)
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def _setup_session_persistence(self, pool, pool_tags,
|
||||
listener, vs_data):
|
||||
sp = pool.get('session_persistence')
|
||||
@ -166,12 +166,14 @@ class EdgePoolManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
return pp_data['id'], None
|
||||
return None, None
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def _remove_persistence(self, vs_data):
|
||||
pp_client = self.core_plugin.nsxlib.load_balancer.persistence_profile
|
||||
persistence_profile_id = vs_data.get('persistence_profile_id')
|
||||
if persistence_profile_id:
|
||||
pp_client.delete(persistence_profile_id)
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def _process_vs_update(self, context, pool, listener,
|
||||
nsx_pool_id, nsx_vs_id, completor):
|
||||
vs_client = self.core_plugin.nsxlib.load_balancer.virtual_server
|
||||
@ -210,11 +212,13 @@ class EdgePoolManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
LOG.error('Failed to attach pool %s to virtual '
|
||||
'server %s', nsx_pool_id, nsx_vs_id)
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def _get_pool_tags(self, context, pool):
|
||||
return lb_utils.get_tags(self.core_plugin, pool['id'],
|
||||
lb_const.LB_POOL_TYPE, pool['tenant_id'],
|
||||
context.project_name)
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def create(self, context, pool, completor):
|
||||
lb_id = pool['loadbalancer_id']
|
||||
pool_client = self.core_plugin.nsxlib.load_balancer.pool
|
||||
@ -265,6 +269,7 @@ class EdgePoolManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
raise nsx_exc.NsxPluginException(err_msg=msg)
|
||||
completor(success=True)
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def update(self, context, old_pool, new_pool, completor):
|
||||
pool_client = self.core_plugin.nsxlib.load_balancer.pool
|
||||
pool_name = None
|
||||
@ -315,6 +320,7 @@ class EdgePoolManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
'error %(error)s',
|
||||
{'pool': old_pool['id'], 'error': e})
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def delete(self, context, pool, completor):
|
||||
lb_id = pool['loadbalancer_id']
|
||||
pool_client = self.core_plugin.nsxlib.load_balancer.pool
|
||||
|
Loading…
x
Reference in New Issue
Block a user