[fullstack] find ip based on allocation_pool

_find_available_ips tried to find available ips based on the given
subnet's cidr field, which can be misleading if random selection goes
out-of allocation-pool. This patch changes this behaviour to use
cidr's allocation_pool field.

Closes-Bug: #1850292
Change-Id: Ied2ffb5ed58007789b0f5157731687dc2e0b9bb1
This commit is contained in:
elajkat 2019-10-30 13:38:30 +01:00
parent 843b5ffd9a
commit 3c9b0a5fac
1 changed files with 7 additions and 1 deletions

View File

@ -133,7 +133,13 @@ class BaseFullStackTestCase(testlib_api.MySQLTestCaseMixin,
[netaddr.IPAddress(ip['ip_address'])
for port in ports for ip in port['fixed_ips']])
used_ips.add(netaddr.IPAddress(subnet['gateway_ip']))
valid_ips = netaddr.IPSet(netaddr.IPNetwork(subnet['cidr']))
# Note(lajoskatona): Suppose that we have 1 allocation pool for the
# subnet, that should be quite good assumption for testing.
valid_ip_pool = subnet['allocation_pools'][0]
valid_ips = netaddr.IPSet(netaddr.IPRange(
valid_ip_pool['start'],
valid_ip_pool['end'])
)
valid_ips = valid_ips.difference(used_ips)
if valid_ips.size < num:
self.fail("Cannot find enough free IP addresses.")