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"
|
SRC_DIR="configutilities"
|
||||||
COPY_LIST="$SRC_DIR/LICENSE"
|
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 exceptions import ConfigFail, ValidateFail
|
||||||
from utils import is_mtu_valid, is_speed_valid, is_valid_vlan, \
|
from utils import is_mtu_valid, is_speed_valid, is_valid_vlan, \
|
||||||
validate_network_str, validate_address_str
|
validate_network_str, validate_address_str
|
||||||
|
@ -307,9 +307,8 @@ class Network(object):
|
||||||
"Start address %s not less than end address %s for %s."
|
"Start address %s not less than end address %s for %s."
|
||||||
% (str(self.start_address), str(self.end_address),
|
% (str(self.start_address), str(self.end_address),
|
||||||
network_name))
|
network_name))
|
||||||
address_list = list(iter_iprange(start_address_str,
|
if not IPRange(start_address_str, end_address_str).size >= \
|
||||||
end_address_str))
|
min_addresses:
|
||||||
if not len(address_list) >= min_addresses:
|
|
||||||
raise ConfigFail("Address range for %s must contain at "
|
raise ConfigFail("Address range for %s must contain at "
|
||||||
"least %d addresses." %
|
"least %d addresses." %
|
||||||
(network_name, min_addresses))
|
(network_name, min_addresses))
|
||||||
|
|
|
@ -406,6 +406,11 @@ class ConfigValidator(object):
|
||||||
"Management VLAN must be configured because "
|
"Management VLAN must be configured because "
|
||||||
"%s configured." % self.pxeboot_section_name)
|
"%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
|
mtu = self.mgmt_network.logical_interface.mtu
|
||||||
if not is_mtu_valid(mtu):
|
if not is_mtu_valid(mtu):
|
||||||
raise ConfigFail(
|
raise ConfigFail(
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
SRC_DIR="controllerconfig"
|
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 configutilities import DEFAULT_DOMAIN_NAME
|
||||||
from netaddr import (IPNetwork,
|
from netaddr import (IPNetwork,
|
||||||
IPAddress,
|
IPAddress,
|
||||||
iter_iprange,
|
IPRange,
|
||||||
AddrFormatError)
|
AddrFormatError)
|
||||||
from sysinv.common import constants as sysinv_constants
|
from sysinv.common import constants as sysinv_constants
|
||||||
from tsconfig.tsconfig import SW_VERSION
|
from tsconfig.tsconfig import SW_VERSION
|
||||||
|
@ -1193,10 +1193,9 @@ class ConfigAssistant():
|
||||||
print
|
print
|
||||||
continue
|
continue
|
||||||
|
|
||||||
address_list = list(iter_iprange(
|
address_range = IPRange(str(self.management_start_address),
|
||||||
str(self.management_start_address),
|
str(self.management_end_address))
|
||||||
str(self.management_end_address)))
|
if not address_range.size >= min_addresses:
|
||||||
if not len(address_list) >= min_addresses:
|
|
||||||
print (
|
print (
|
||||||
"Address range must contain at least %d addresses. " %
|
"Address range must contain at least %d addresses. " %
|
||||||
min_addresses)
|
min_addresses)
|
||||||
|
@ -1742,10 +1741,9 @@ class ConfigAssistant():
|
||||||
print
|
print
|
||||||
continue
|
continue
|
||||||
|
|
||||||
address_list = list(iter_iprange(
|
address_range = IPRange(str(self.infrastructure_start_address),
|
||||||
str(self.infrastructure_start_address),
|
str(self.infrastructure_end_address))
|
||||||
str(self.infrastructure_end_address)))
|
if not address_range.size >= min_addresses:
|
||||||
if not len(address_list) >= min_addresses:
|
|
||||||
print (
|
print (
|
||||||
"Address range must contain at least %d addresses. " %
|
"Address range must contain at least %d addresses. " %
|
||||||
min_addresses)
|
min_addresses)
|
||||||
|
|
|
@ -23,7 +23,7 @@ INTERFACE_MTU=1500
|
||||||
INTERFACE_PORTS=eth0
|
INTERFACE_PORTS=eth0
|
||||||
|
|
||||||
[MGMT_NETWORK]
|
[MGMT_NETWORK]
|
||||||
;VLAN=123
|
VLAN=123
|
||||||
CIDR=1234::/64
|
CIDR=1234::/64
|
||||||
MULTICAST_CIDR=ff08::1:1:0/124
|
MULTICAST_CIDR=ff08::1:1:0/124
|
||||||
DYNAMIC_ALLOCATION=Y
|
DYNAMIC_ALLOCATION=Y
|
||||||
|
@ -49,8 +49,8 @@ CIDR=abcd::/64
|
||||||
GATEWAY=abcd::1
|
GATEWAY=abcd::1
|
||||||
LOGICAL_INTERFACE=LOGICAL_INTERFACE_2
|
LOGICAL_INTERFACE=LOGICAL_INTERFACE_2
|
||||||
|
|
||||||
;[PXEBOOT_NETWORK]
|
[PXEBOOT_NETWORK]
|
||||||
;PXEBOOT_CIDR=192.168.203.0/24
|
PXEBOOT_CIDR=192.168.203.0/24
|
||||||
|
|
||||||
;[BOARD_MANAGEMENT_NETWORK]
|
;[BOARD_MANAGEMENT_NETWORK]
|
||||||
;VLAN=1
|
;VLAN=1
|
||||||
|
|
|
@ -136,6 +136,27 @@ def test_system_config_validation():
|
||||||
with pytest.raises(exceptions.ConfigFail):
|
with pytest.raises(exceptions.ConfigFail):
|
||||||
validate(system_config, DEFAULT_CONFIG, None, False)
|
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
|
# Test using start/end addresses
|
||||||
system_config = cr.parse_system_config(ipv6_systemfile)
|
system_config = cr.parse_system_config(ipv6_systemfile)
|
||||||
system_config.set('OAM_NETWORK', 'IP_START_ADDRESS', 'abcd::2')
|
system_config.set('OAM_NETWORK', 'IP_START_ADDRESS', 'abcd::2')
|
||||||
|
|
Loading…
Reference in New Issue