diff options
Diffstat (limited to 'lib/python')
-rw-r--r-- | lib/python/apex/common/constants.py | 1 | ||||
-rw-r--r-- | lib/python/apex/network_settings.py | 48 | ||||
-rwxr-xr-x | lib/python/apex_python_utils.py | 10 |
3 files changed, 55 insertions, 4 deletions
diff --git a/lib/python/apex/common/constants.py b/lib/python/apex/common/constants.py index 8ed49ff7..dfed33f8 100644 --- a/lib/python/apex/common/constants.py +++ b/lib/python/apex/common/constants.py @@ -15,3 +15,4 @@ API_NETWORK = 'api_network' OPNFV_NETWORK_TYPES = [ADMIN_NETWORK, PRIVATE_NETWORK, PUBLIC_NETWORK, STORAGE_NETWORK, API_NETWORK] DNS_SERVERS = ["8.8.8.8", "8.8.4.4"] +ROLES = ['compute', 'controller'] diff --git a/lib/python/apex/network_settings.py b/lib/python/apex/network_settings.py index 50dd15c3..fd6c1455 100644 --- a/lib/python/apex/network_settings.py +++ b/lib/python/apex/network_settings.py @@ -31,6 +31,8 @@ class NetworkSettings: self.settings_obj = yaml.load(network_settings_file) self.network_isolation = network_isolation self.enabled_network_list = [] + self.nics = {'compute': dict(), 'controller': dict()} + self.nics_specified = {'compute': False, 'controller': False} self._validate_input() def _validate_input(self): @@ -63,6 +65,7 @@ class NetworkSettings: start_offset=21, end_offset=21) self._config_optional_settings(network) self.enabled_network_list.append(network) + self._validate_overcloud_nic_order(network) else: logging.info("{} disabled, will collapse with " "admin_network".format(network)) @@ -73,6 +76,51 @@ class NetworkSettings: self.settings_obj['dns_servers'] = self.settings_obj.get( 'dns_servers', constants.DNS_SERVERS) + def _validate_overcloud_nic_order(self, network): + """ + Detects if nic order is specified per profile (compute/controller) + for network + + If nic order is specified in a network for a profile, it should be + specified for every network with that profile other than admin_network + + Duplicate nic names are also not allowed across different networks + + :param network: network to detect if nic order present + :return: None + """ + + for role in constants.ROLES: + interface = role+'_interface' + nic_index = self.get_enabled_networks().index(network) + 1 + if interface in self.settings_obj[network]: + if any(y == self.settings_obj[network][interface] for x, y in + self.nics[role].items()): + raise NetworkSettingsException("Duplicate {} already " + "specified for " + "another network" + .format(self.settings_obj + [network] + [interface])) + self.nics[role][network] = self.settings_obj[network][ + interface] + self.nics_specified[role] = True + logging.info("{} nic order specified for network {" + "}".format(role, network)) + elif self.nics_specified[role]: + logging.error("{} nic order not specified for network {" + "}".format(role, network)) + raise NetworkSettingsException("Must specify {} for all " + "enabled networks (other than " + " admin) or not specify it for " + "any".format(interface)) + else: + logging.info("{} nic order not specified for network {" + "}. Will use logical default " + "nic{}".format(interface, network, nic_index)) + self.nics[role][network] = 'nic' + str(nic_index) + nic_index += 1 + def _config_required_settings(self, network): """ Configures either CIDR or bridged_interface setting diff --git a/lib/python/apex_python_utils.py b/lib/python/apex_python_utils.py index 1a3cb159..bc9bc56f 100755 --- a/lib/python/apex_python_utils.py +++ b/lib/python/apex_python_utils.py @@ -22,7 +22,6 @@ from apex import NetworkSettings from apex import NetworkEnvironment from apex import DeploySettings from apex import ip_utils -from apex.common.constants import OPNFV_NETWORK_TYPES from apex.common.constants import ADMIN_NETWORK @@ -94,8 +93,9 @@ def build_nic_template(args): """ template_dir, template = args.template.rsplit('/', 1) - settings = NetworkSettings(args.net_settings_file, - args.network_isolation).settings_obj + network_settings = NetworkSettings(args.net_settings_file, + args.network_isolation) + settings = network_settings.settings_obj env = Environment(loader=FileSystemLoader(template_dir)) template = env.get_template(template) @@ -104,13 +104,15 @@ def build_nic_template(args): net_list.remove(ADMIN_NETWORK) vlans_vals = map(lambda x: settings[x]['vlan'], net_list) vlans = dict(zip(net_list, vlans_vals)) + nics = network_settings.nics print(template.render(enabled_networks=args.enabled_networks, role=args.role, vlans=vlans, external_net_type=args.ext_net_type, external_net_af=args.address_family, - ovs_dpdk_bridge=args.ovs_dpdk_bridge)) + ovs_dpdk_bridge=args.ovs_dpdk_bridge, + nics=nics)) def get_parser(): |