NSXv3: Fix pool member update
Fix pool member update including member weight and name. This patch also updates the unit test for member update. Change-Id: If5305bfc7c2eea1954dbe5031bda79955880a808
This commit is contained in:
parent
dc50382115
commit
6f300a68ef
@ -73,6 +73,20 @@ class EdgeMemberManager(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
nsx_router_id, advertise_lb_vip=True)
|
||||
return lb_service
|
||||
|
||||
def _get_updated_pool_members(self, context, lb_pool, member):
|
||||
network = lb_utils.get_network_from_subnet(
|
||||
context, self.core_plugin, member.subnet_id)
|
||||
if network.get('router:external'):
|
||||
fixed_ip, router_id = self._get_info_from_fip(
|
||||
context, member.address)
|
||||
else:
|
||||
fixed_ip = member.address
|
||||
for m in lb_pool['members']:
|
||||
if m['ip_address'] == fixed_ip:
|
||||
m['display_name'] = member.name[:219] + '_' + member.id
|
||||
m['weight'] = member.weight
|
||||
return lb_pool['members']
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def _add_loadbalancer_binding(self, context, lb_id, lbs_id,
|
||||
nsx_router_id, vip_address):
|
||||
@ -173,14 +187,28 @@ class EdgeMemberManager(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def update(self, context, old_member, new_member):
|
||||
try:
|
||||
self.lbv2_driver.member.successful_completion(
|
||||
context, new_member)
|
||||
|
||||
except nsx_exc.NsxPluginException:
|
||||
with excutils.save_and_reraise_exception():
|
||||
self.lbv2_driver.member.failed_completion(
|
||||
context, new_member)
|
||||
lb_id = old_member.pool.loadbalancer_id
|
||||
pool_id = old_member.pool.id
|
||||
pool_client = self.core_plugin.nsxlib.load_balancer.pool
|
||||
pool_binding = nsx_db.get_nsx_lbaas_pool_binding(
|
||||
context.session, lb_id, pool_id)
|
||||
if pool_binding:
|
||||
lb_pool_id = pool_binding.get('lb_pool_id')
|
||||
try:
|
||||
lb_pool = pool_client.get(lb_pool_id)
|
||||
updated_members = self._get_updated_pool_members(
|
||||
context, lb_pool, new_member)
|
||||
pool_client.update_pool_with_members(lb_pool_id,
|
||||
updated_members)
|
||||
except Exception as e:
|
||||
with excutils.save_and_reraise_exception():
|
||||
self.lbv2_driver.member.failed_completion(
|
||||
context, new_member)
|
||||
LOG.error('Failed to update member %(member)s: '
|
||||
'%(err)s',
|
||||
{'member': old_member.id, 'err': e})
|
||||
self.lbv2_driver.member.successful_completion(
|
||||
context, new_member)
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def delete(self, context, member):
|
||||
|
@ -85,7 +85,6 @@ LB_POOL_WITH_MEMBER = {
|
||||
"admin_state": "ENABLED"
|
||||
}
|
||||
]
|
||||
|
||||
}
|
||||
HM_ID = 'hhh-mmm'
|
||||
LB_MONITOR_ID = 'mmm-ddd'
|
||||
@ -557,13 +556,25 @@ class TestEdgeLbaasV2Member(BaseTestEdgeLbaasV2):
|
||||
|
||||
def test_update(self):
|
||||
new_member = lb_models.Member(MEMBER_ID, LB_TENANT_ID, POOL_ID,
|
||||
MEMBER_ADDRESS, 80, 1, pool=self.pool,
|
||||
MEMBER_ADDRESS, 80, 2, pool=self.pool,
|
||||
name='member-nnn-nnn')
|
||||
self.edge_driver.member.update(self.context, self.pool, new_member)
|
||||
with mock.patch.object(nsx_db, 'get_nsx_lbaas_pool_binding'
|
||||
) as mock_get_pool_binding, \
|
||||
mock.patch.object(self.pool_client, 'get'
|
||||
) as mock_get_pool, \
|
||||
mock.patch.object(lb_utils, 'get_network_from_subnet'
|
||||
) as mock_get_network_from_subnet:
|
||||
mock_get_pool_binding.return_value = POOL_BINDING
|
||||
mock_get_pool.return_value = LB_POOL_WITH_MEMBER
|
||||
mock_get_network_from_subnet.return_value = LB_NETWORK
|
||||
|
||||
mock_successful_completion = (
|
||||
self.lbv2_driver.member.successful_completion)
|
||||
mock_successful_completion.assert_called_with(self.context, new_member)
|
||||
self.edge_driver.member.update(self.context, self.member,
|
||||
new_member)
|
||||
|
||||
mock_successful_completion = (
|
||||
self.lbv2_driver.member.successful_completion)
|
||||
mock_successful_completion.assert_called_with(self.context,
|
||||
new_member)
|
||||
|
||||
def test_delete(self):
|
||||
with mock.patch.object(nsx_db, 'get_nsx_lbaas_pool_binding'
|
||||
|
Loading…
x
Reference in New Issue
Block a user