Stop allocating network and broadcast addresses

When an allocation pool range is not defined by the operator, we should
not include network and broadcast addresses in the list of IP addresses
to give to hosts.

Change-Id: Id6e14286b5eb2b767a515e7edfc56741fb8d2c78
Story: 2006267
Task: 35958
This commit is contained in:
Pierre Riteau 2019-08-02 14:08:34 +02:00
parent 2bce627040
commit 697e74e41a
3 changed files with 16 additions and 4 deletions

View File

@ -147,6 +147,9 @@ def update_allocation(module, allocations):
allocation_pool = netaddr.IPSet(allocation_pool) allocation_pool = netaddr.IPSet(allocation_pool)
else: else:
allocation_pool = netaddr.IPSet([network]) allocation_pool = netaddr.IPSet([network])
if network.prefixlen != 32:
reserved_ips = [network.network, network.broadcast]
allocation_pool -= netaddr.IPSet(reserved_ips)
free_ips = allocation_pool - allocated_ips free_ips = allocation_pool - allocated_ips
for free_cidr in free_ips.iter_cidrs(): for free_cidr in free_ips.iter_cidrs():
ip = free_cidr[0] ip = free_cidr[0]

View File

@ -157,10 +157,12 @@ To configure a network called ``example`` with VLAN ID ``123``:
IP Address Allocation IP Address Allocation
===================== =====================
IP addresses are allocated automatically by Kayobe from the IP addresses are allocated automatically by Kayobe from the allocation pool
allocation pool defined by ``allocation_pool_start`` and ``allocation_pool_end``. If these
defined by ``allocation_pool_start`` and ``allocation_pool_end``. The variables are undefined, the entire network is used, except for network and
allocated addresses are stored in broadcast addresses. IP addresses are only allocated if the network ``cidr`` is
set and DHCP is not used (see ``bootproto`` in
:ref:`configuration-network-per-host`). The allocated addresses are stored in
``${KAYOBE_CONFIG_PATH}/network-allocation.yml`` using the global per-network ``${KAYOBE_CONFIG_PATH}/network-allocation.yml`` using the global per-network
attribute ``ips`` which maps Ansible inventory hostnames to allocated IPs. attribute ``ips`` which maps Ansible inventory hostnames to allocated IPs.
@ -264,6 +266,8 @@ To configure a network called ``example`` with a default route and a
- cidr: 10.1.0.0/24 - cidr: 10.1.0.0/24
table: exampleroutetable table: exampleroutetable
.. _configuration-network-per-host:
Per-host Network Configuration Per-host Network Configuration
============================== ==============================

View File

@ -0,0 +1,5 @@
---
fixes:
- |
Stops allocating network and broadcast addresses to hosts when an allocation pool
is not defined.