Fixes updating members with the wrong pool ID
On queens, if you update a member using the wrong pool ID, the user will get the correct error response, but the load balancer will remain locked. This patch corrects that by putting the pool validation in the correct sequence. This is already fixed in Rocky and newer as part of the provider driver feature. Change-Id: Id88bd2363d4cb0213096997146d0a79454289978 Story: 2007609 Task: 39599
This commit is contained in:
parent
5528268e2f
commit
d71178e11b
|
@ -231,14 +231,14 @@ class MemberController(base.BaseController):
|
||||||
self._auth_validate_action(context, db_member.project_id,
|
self._auth_validate_action(context, db_member.project_id,
|
||||||
constants.RBAC_PUT)
|
constants.RBAC_PUT)
|
||||||
|
|
||||||
|
self._validate_pool_id(id, db_member.pool_id)
|
||||||
|
|
||||||
self._test_lb_and_listener_and_pool_statuses(context.session,
|
self._test_lb_and_listener_and_pool_statuses(context.session,
|
||||||
member=db_member)
|
member=db_member)
|
||||||
self.repositories.member.update(
|
self.repositories.member.update(
|
||||||
context.session, db_member.id,
|
context.session, db_member.id,
|
||||||
provisioning_status=constants.PENDING_UPDATE)
|
provisioning_status=constants.PENDING_UPDATE)
|
||||||
|
|
||||||
self._validate_pool_id(id, db_member.pool_id)
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
LOG.info("Sending Update of Member %s to handler", id)
|
LOG.info("Sending Update of Member %s to handler", id)
|
||||||
self.handler.update(db_member, member)
|
self.handler.update(db_member, member)
|
||||||
|
|
|
@ -864,12 +864,18 @@ class TestMember(base.BaseAPITest):
|
||||||
lb_id=self.lb_id, listener_id=self.listener_id,
|
lb_id=self.lb_id, listener_id=self.listener_id,
|
||||||
pool_id=self.pool_id, member_id=api_member.get('id'))
|
pool_id=self.pool_id, member_id=api_member.get('id'))
|
||||||
|
|
||||||
def test_bad_update(self):
|
def test_update_wrong_pool(self):
|
||||||
api_member = self.create_member(
|
api_member = self.create_member(
|
||||||
self.pool_id, '10.0.0.1', 80).get(self.root_tag)
|
self.pool_id, '10.0.0.1', 80).get(self.root_tag)
|
||||||
new_member = {'protocol_port': 'ten'}
|
self.set_lb_status(self.lb_id)
|
||||||
self.put(self.member_path.format(member_id=api_member.get('id')),
|
new_member = {'monitor_port': '81'}
|
||||||
self._build_body(new_member), status=400)
|
bad_member_path = (
|
||||||
|
self.MEMBERS_PATH.format(pool_id=self.pool_with_listener_id) +
|
||||||
|
'/' + api_member.get('id'))
|
||||||
|
self.put(bad_member_path, self._build_body(new_member), status=404)
|
||||||
|
self.assert_correct_status(
|
||||||
|
lb_id=self.lb_id, listener_id=self.listener_id,
|
||||||
|
pool_id=self.pool_id, member_id=api_member.get('id'))
|
||||||
|
|
||||||
def test_update_with_bad_handler(self):
|
def test_update_with_bad_handler(self):
|
||||||
api_member = self.create_member(
|
api_member = self.create_member(
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
---
|
||||||
|
fixes:
|
||||||
|
- |
|
||||||
|
Fixed updating members with the wrong pool ID locking the load balancer.
|
Loading…
Reference in New Issue