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:
parent
9ce6bc6f74
commit
4b2873a312
@ -1,3 +1,3 @@
|
||||
SRC_DIR="configutilities"
|
||||
COPY_LIST="$SRC_DIR/LICENSE"
|
||||
TIS_PATCH_VER=34
|
||||
TIS_PATCH_VER=35
|
||||
|
@ -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))
|
||||
|
@ -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(
|
||||
|
@ -1,2 +1,2 @@
|
||||
SRC_DIR="controllerconfig"
|
||||
TIS_PATCH_VER=140
|
||||
TIS_PATCH_VER=141
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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')
|
||||
|
Loading…
Reference in New Issue
Block a user