Disallow use of entire mgmt subnet for Distributed Cloud
Changes to config_controller to ensure user has left some mgmt network address space for gateway(s), with appropriate warnings. Story: 2002870 Task: 22820 Change-Id: Ib3f08d86e015cf614457b2284fe497b04caf5585 Signed-off-by: Jack Ding <jack.ding@windriver.com>
This commit is contained in:
parent
e028fd70dd
commit
d2da0ddd1e
@ -123,6 +123,7 @@ class Network(object):
|
|||||||
self.multicast_cidr = None
|
self.multicast_cidr = None
|
||||||
self.start_address = None
|
self.start_address = None
|
||||||
self.end_address = None
|
self.end_address = None
|
||||||
|
self.start_end_in_config = False
|
||||||
self.floating_address = None
|
self.floating_address = None
|
||||||
self.address_0 = None
|
self.address_0 = None
|
||||||
self.address_1 = None
|
self.address_1 = None
|
||||||
@ -312,6 +313,7 @@ class Network(object):
|
|||||||
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))
|
||||||
|
self.start_end_in_config = True
|
||||||
|
|
||||||
if floating_address_str or address_0_str or address_1_str:
|
if floating_address_str or address_0_str or address_1_str:
|
||||||
if not floating_address_str:
|
if not floating_address_str:
|
||||||
|
@ -4,10 +4,10 @@ Copyright (c) 2015-2017 Wind River Systems, Inc.
|
|||||||
SPDX-License-Identifier: Apache-2.0
|
SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from configobjects import DEFAULT_NAMES, NETWORK_PREFIX_NAMES, OAM_TYPE, \
|
from configobjects import DEFAULT_NAMES, NETWORK_PREFIX_NAMES, OAM_TYPE, \
|
||||||
MGMT_TYPE, Network, REGION_CONFIG, VALID_LINK_SPEED, INFRA_TYPE, \
|
MGMT_TYPE, Network, REGION_CONFIG, VALID_LINK_SPEED, INFRA_TYPE, \
|
||||||
DEFAULT_DOMAIN_NAME, HP_NAMES, SUBCLOUD_CONFIG
|
DEFAULT_DOMAIN_NAME, HP_NAMES, SUBCLOUD_CONFIG
|
||||||
|
from netaddr import IPRange
|
||||||
from utils import lag_mode_to_str, validate_network_str, \
|
from utils import lag_mode_to_str, validate_network_str, \
|
||||||
check_network_overlap, is_mtu_valid, is_speed_valid, get_service, \
|
check_network_overlap, is_mtu_valid, is_speed_valid, get_service, \
|
||||||
get_optional
|
get_optional
|
||||||
@ -382,6 +382,33 @@ class ConfigValidator(object):
|
|||||||
"network" %
|
"network" %
|
||||||
(mgmt_prefix, str(self.mgmt_network.cidr)))
|
(mgmt_prefix, str(self.mgmt_network.cidr)))
|
||||||
|
|
||||||
|
if (self.system_dc_role ==
|
||||||
|
DISTRIBUTED_CLOUD_ROLE_SYSTEMCONTROLLER):
|
||||||
|
# For Distributed Cloud SystemController, we require the setting
|
||||||
|
# of the IP_START_ADDRESS/IP_END_ADDRESS config settings so as to
|
||||||
|
# raise awareness that some space in MGMT subnet must be set aside
|
||||||
|
# for gateways to reach subclouds.
|
||||||
|
|
||||||
|
if not self.mgmt_network.start_end_in_config:
|
||||||
|
raise ConfigFail("IP_START_ADDRESS and IP_END_ADDRESS required"
|
||||||
|
" for %s network as this configuration "
|
||||||
|
"requires address space left for gateway "
|
||||||
|
"address(es)" % mgmt_prefix)
|
||||||
|
else:
|
||||||
|
# Warn user that some space in the management subnet must
|
||||||
|
# be reserved for the system controller gateway address(es)
|
||||||
|
# used to communicate with the subclouds. - 2 because of
|
||||||
|
# subnet and broadcast addresses.
|
||||||
|
address_range = \
|
||||||
|
IPRange(str(self.mgmt_network.start_address),
|
||||||
|
str(self.mgmt_network.end_address)).size
|
||||||
|
|
||||||
|
if address_range >= (self.mgmt_network.cidr.size - 2):
|
||||||
|
raise ConfigFail(
|
||||||
|
"Address range for %s network too large, no addresses"
|
||||||
|
" left for gateway(s), required in this "
|
||||||
|
"configuration." % mgmt_prefix)
|
||||||
|
|
||||||
if self.mgmt_network.logical_interface.lag_interface:
|
if self.mgmt_network.logical_interface.lag_interface:
|
||||||
supported_lag_mode = [1, 4]
|
supported_lag_mode = [1, 4]
|
||||||
if (self.mgmt_network.logical_interface.lag_mode not in
|
if (self.mgmt_network.logical_interface.lag_mode not in
|
||||||
|
@ -1116,6 +1116,8 @@ class ConfigAssistant():
|
|||||||
except ValidateFail as e:
|
except ValidateFail as e:
|
||||||
print "{}".format(e)
|
print "{}".format(e)
|
||||||
|
|
||||||
|
if (self.system_dc_role !=
|
||||||
|
sysinv_constants.DISTRIBUTED_CLOUD_ROLE_SYSTEMCONTROLLER):
|
||||||
while True:
|
while True:
|
||||||
user_input = raw_input(
|
user_input = raw_input(
|
||||||
"Use entire management subnet [Y/n]: ")
|
"Use entire management subnet [Y/n]: ")
|
||||||
@ -1132,6 +1134,13 @@ class ConfigAssistant():
|
|||||||
else:
|
else:
|
||||||
print "Invalid choice"
|
print "Invalid choice"
|
||||||
continue
|
continue
|
||||||
|
else:
|
||||||
|
self.use_entire_mgmt_subnet = False
|
||||||
|
print textwrap.fill(
|
||||||
|
"Configured as Distributed Cloud System Controller,"
|
||||||
|
" disallowing use of entire management subnet. "
|
||||||
|
"Ensure management ip range does not include System"
|
||||||
|
" Controller gateway address(es)", 80)
|
||||||
|
|
||||||
if not self.use_entire_mgmt_subnet:
|
if not self.use_entire_mgmt_subnet:
|
||||||
while True:
|
while True:
|
||||||
@ -1183,8 +1192,19 @@ class ConfigAssistant():
|
|||||||
"Address range must contain at least %d addresses. " %
|
"Address range must contain at least %d addresses. " %
|
||||||
min_addresses)
|
min_addresses)
|
||||||
continue
|
continue
|
||||||
break
|
|
||||||
|
|
||||||
|
sc = sysinv_constants.DISTRIBUTED_CLOUD_ROLE_SYSTEMCONTROLLER
|
||||||
|
if (self.system_dc_role == sc):
|
||||||
|
# Warn user that some space in the management subnet must
|
||||||
|
# be reserved for the system controller gateway address(es)
|
||||||
|
# used to communicate with the subclouds. - 2 because of
|
||||||
|
# subnet and broadcast addresses.
|
||||||
|
if address_range.size >= (self.management_subnet.size - 2):
|
||||||
|
print textwrap.fill(
|
||||||
|
"Address range too large, no addresses left "
|
||||||
|
"for System Controller gateway(s). ", 80)
|
||||||
|
continue
|
||||||
|
break
|
||||||
while True:
|
while True:
|
||||||
print
|
print
|
||||||
print textwrap.fill(
|
print textwrap.fill(
|
||||||
|
Loading…
Reference in New Issue
Block a user