Validate member address for batch update members

We added the configuration option for reserved IP addresses that cannot
be used for load balancer member addresses, but the validation for
batch update members is missing.

This patch should also be backported to stable branches.

Change-Id: Ibd3145cfd8b92a494f7cceff10414d6e153136e9
Story: 2003413
This commit is contained in:
Lingxian Kong 2018-09-09 00:48:25 +12:00
parent c7395e0488
commit e943b39822
2 changed files with 14 additions and 0 deletions

View File

@ -337,6 +337,7 @@ class MembersController(MemberController):
updated_members = []
for m in members:
if (m.address, m.protocol_port) not in old_member_uniques:
validate.ip_not_reserved(m.address)
new_members.append(m)
else:
m.id = old_member_uniques[(m.address, m.protocol_port)]

View File

@ -581,6 +581,19 @@ class TestMember(base.BaseAPITest):
err_msg = 'Subnet ' + subnet_id + ' not found.'
self.assertEqual(response.get('faultstring'), err_msg)
def test_create_batch_members_with_invalid_address(self):
# 169.254.169.254 is the default invalid member address
member5 = {'address': '169.254.169.254',
'protocol_port': 80}
req_dict = [member5]
body = {self.root_tag_list: req_dict}
path = self.MEMBERS_PATH.format(pool_id=self.pool_id)
response = self.put(path, body, status=400).json
err_msg = ("169.254.169.254 is not a valid option for member address")
self.assertEqual(err_msg, response.get('faultstring'))
@mock.patch('octavia.api.drivers.driver_factory.get_driver')
@mock.patch('octavia.api.drivers.utils.call_provider')
def test_update_batch_members(self, mock_provider, mock_get_driver):