Allow large IP address ranges

Fix inefficient IP address validation code in config_controller so
large IP address ranges can be used. Also fix INI file validation
to prevent the configuration of an IPv6 management network without
a separate PXEBOOT network.

Change-Id: I87e1801092a35d74354b666e8ecd76cbf4d1e14c
Signed-off-by: Bart Wensley <barton.wensley@windriver.com>
This commit is contained in:
Bart Wensley 2018-03-15 07:27:41 -05:00
parent 9ce6bc6f74
commit 4b2873a312
7 changed files with 41 additions and 18 deletions

View File

@ -1,3 +1,3 @@
SRC_DIR="configutilities"
COPY_LIST="$SRC_DIR/LICENSE"
TIS_PATCH_VER=34
TIS_PATCH_VER=35

View File

@ -5,7 +5,7 @@ SPDX-License-Identifier: Apache-2.0
"""
from netaddr import iter_iprange
from netaddr import IPRange
from exceptions import ConfigFail, ValidateFail
from utils import is_mtu_valid, is_speed_valid, is_valid_vlan, \
validate_network_str, validate_address_str
@ -307,9 +307,8 @@ class Network(object):
"Start address %s not less than end address %s for %s."
% (str(self.start_address), str(self.end_address),
network_name))
address_list = list(iter_iprange(start_address_str,
end_address_str))
if not len(address_list) >= min_addresses:
if not IPRange(start_address_str, end_address_str).size >= \
min_addresses:
raise ConfigFail("Address range for %s must contain at "
"least %d addresses." %
(network_name, min_addresses))

View File

@ -406,6 +406,11 @@ class ConfigValidator(object):
"Management VLAN must be configured because "
"%s configured." % self.pxeboot_section_name)
if not self.is_simplex_cpe() and self.mgmt_network.cidr.version == 6 \
and not self.pxeboot_network_configured:
raise ConfigFail("IPv6 management network cannot be configured "
"because PXEBOOT_NETWORK is not configured.")
mtu = self.mgmt_network.logical_interface.mtu
if not is_mtu_valid(mtu):
raise ConfigFail(

View File

@ -1,2 +1,2 @@
SRC_DIR="controllerconfig"
TIS_PATCH_VER=140
TIS_PATCH_VER=141

View File

@ -27,7 +27,7 @@ from configutilities import is_valid_vlan, is_mtu_valid, is_speed_valid, \
from configutilities import DEFAULT_DOMAIN_NAME
from netaddr import (IPNetwork,
IPAddress,
iter_iprange,
IPRange,
AddrFormatError)
from sysinv.common import constants as sysinv_constants
from tsconfig.tsconfig import SW_VERSION
@ -1193,10 +1193,9 @@ class ConfigAssistant():
print
continue
address_list = list(iter_iprange(
str(self.management_start_address),
str(self.management_end_address)))
if not len(address_list) >= min_addresses:
address_range = IPRange(str(self.management_start_address),
str(self.management_end_address))
if not address_range.size >= min_addresses:
print (
"Address range must contain at least %d addresses. " %
min_addresses)
@ -1742,10 +1741,9 @@ class ConfigAssistant():
print
continue
address_list = list(iter_iprange(
str(self.infrastructure_start_address),
str(self.infrastructure_end_address)))
if not len(address_list) >= min_addresses:
address_range = IPRange(str(self.infrastructure_start_address),
str(self.infrastructure_end_address))
if not address_range.size >= min_addresses:
print (
"Address range must contain at least %d addresses. " %
min_addresses)

View File

@ -23,7 +23,7 @@ INTERFACE_MTU=1500
INTERFACE_PORTS=eth0
[MGMT_NETWORK]
;VLAN=123
VLAN=123
CIDR=1234::/64
MULTICAST_CIDR=ff08::1:1:0/124
DYNAMIC_ALLOCATION=Y
@ -49,8 +49,8 @@ CIDR=abcd::/64
GATEWAY=abcd::1
LOGICAL_INTERFACE=LOGICAL_INTERFACE_2
;[PXEBOOT_NETWORK]
;PXEBOOT_CIDR=192.168.203.0/24
[PXEBOOT_NETWORK]
PXEBOOT_CIDR=192.168.203.0/24
;[BOARD_MANAGEMENT_NETWORK]
;VLAN=1

View File

@ -136,6 +136,27 @@ def test_system_config_validation():
with pytest.raises(exceptions.ConfigFail):
validate(system_config, DEFAULT_CONFIG, None, False)
# Test missing pxeboot network when using IPv6 management network
system_config = cr.parse_system_config(ipv6_systemfile)
system_config.remove_section('PXEBOOT_NETWORK')
with pytest.raises(exceptions.ConfigFail):
cr.create_cgcs_config_file(None, system_config, None, None, None, 0,
validate_only=True)
with pytest.raises(exceptions.ConfigFail):
validate(system_config, DEFAULT_CONFIG, None, False)
# Test ridiculously sized management network
system_config = cr.parse_system_config(ipv6_systemfile)
system_config.set('MGMT_NETWORK', 'IP_START_ADDRESS', '1234::b:0:0:0')
system_config.set('MGMT_NETWORK', 'IP_END_ADDRESS',
'1234::b:ffff:ffff:ffff')
system_config.remove_option('MGMT_NETWORK', 'IP_FLOATING_ADDRESS')
system_config.remove_option('MGMT_NETWORK', 'IP_UNIT_0_ADDRESS')
system_config.remove_option('MGMT_NETWORK', 'IP_UNIT_1_ADDRESS')
cr.create_cgcs_config_file(None, system_config, None, None, None, 0,
validate_only=True)
validate(system_config, DEFAULT_CONFIG, None, False)
# Test using start/end addresses
system_config = cr.parse_system_config(ipv6_systemfile)
system_config.set('OAM_NETWORK', 'IP_START_ADDRESS', 'abcd::2')