summaryrefslogtreecommitdiffstats
path: root/lib/python
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python')
-rw-r--r--lib/python/apex/common/constants.py1
-rw-r--r--lib/python/apex/network_settings.py48
-rwxr-xr-xlib/python/apex_python_utils.py10
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():