summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--build/nics-template.yaml.jinja217
-rw-r--r--build/opnfv-environment.yaml1
-rw-r--r--config/network/network_settings.yaml13
-rwxr-xr-xlib/overcloud-deploy-functions.sh1
-rw-r--r--lib/python/apex/common/constants.py2
-rw-r--r--lib/python/apex/network_settings.py52
-rwxr-xr-xlib/python/apex_python_utils.py10
-rwxr-xr-xlib/undercloud-functions.sh11
-rw-r--r--tests/config/network_settings_duplicate_nic.yaml115
-rw-r--r--tests/config/network_settings_missing_required_nic.yaml113
-rw-r--r--tests/config/network_settings_nic1_reserved.yaml113
-rw-r--r--tests/config/network_settings_nics_not_specified.yaml107
-rw-r--r--tests/test_apex_network_settings.py45
13 files changed, 583 insertions, 17 deletions
diff --git a/build/nics-template.yaml.jinja2 b/build/nics-template.yaml.jinja2
index 3fac43b8..0680a26f 100644
--- a/build/nics-template.yaml.jinja2
+++ b/build/nics-template.yaml.jinja2
@@ -91,7 +91,7 @@ resources:
members:
-
type: interface
- name: nic1
+ name: {{ nics[role]['admin_network'] }}
# force the MAC address of the bridge to this interface
primary: true
{%- if 'public_network' in enabled_networks and vlans['public_network'] is number %}
@@ -132,7 +132,7 @@ resources:
{%- endif %}
{%- else %}
type: interface
- name: nic1
+ name: {{ nics[role]['admin_network'] }}
{%- endif %}
use_dhcp: false
dns_servers: {get_param: DnsServers}
@@ -153,7 +153,6 @@ resources:
next_hop: {get_param: ControlPlaneDefaultRoute}
{%- endif %}
- {%- set nic_index = 2 %}
{%- if 'private_network' in enabled_networks and vlans['private_network'] == 'native' %}
{%- if ovs_dpdk_bridge == 'br-phy' and role == 'compute' %}
-
@@ -166,7 +165,7 @@ resources:
members:
-
type: interface
- name: nic{{ nic_index }}{% set nic_index = nic_index + 1 %}
+ name: {{ nics[role]['private_network'] }}
# force the MAC address of the bridge to this interface
primary: true
-
@@ -176,7 +175,7 @@ resources:
{%- else %}
-
type: interface
- name: nic{{ nic_index }}{% set nic_index = nic_index + 1 %}
+ name: {{ nics[role]['private_network'] }}
use_dhcp: false
addresses:
-
@@ -186,7 +185,7 @@ resources:
{%- if 'public_network' in enabled_networks and external_net_type == 'interface' and vlans['public_network'] == 'native' %}
-
type: interface
- name: nic{{ nic_index }}{% set nic_index = nic_index + 1 %}
+ name: {{ nics[role]['public_network'] }}
{%- if role == 'controller' %}
dns_servers: {get_param: DnsServers}
{%- endif %}
@@ -209,7 +208,7 @@ resources:
members:
-
type: interface
- name: nic{{ nic_index }}{% set nic_index = nic_index + 1 %}
+ name: {{ nics[role]['public_network'] }}
# force the MAC address of the bridge to this interface
primary: true
{%- if role == 'controller' %}
@@ -227,7 +226,7 @@ resources:
{%- if 'storage_network' in enabled_networks and vlans['storage_network'] == 'native' %}
-
type: interface
- name: nic{{ nic_index }}{% set nic_index = nic_index + 1 %}
+ name: {{ nics[role]['storage_network'] }}
use_dhcp: false
addresses:
-
@@ -236,7 +235,7 @@ resources:
{%- if 'api_network' in enabled_networks and vlans['api_network'] == 'native' %}
-
type: interface
- name: nic{{ nic_index }}{% set nic_index = nic_index + 1 %}
+ name: {{ nics[role]['api_network'] }}
use_dhcp: false
addresses:
-
diff --git a/build/opnfv-environment.yaml b/build/opnfv-environment.yaml
index fe37aba8..0f841529 100644
--- a/build/opnfv-environment.yaml
+++ b/build/opnfv-environment.yaml
@@ -6,6 +6,7 @@ parameters:
OvercloudControlFlavor: control
OvercloudComputeFlavor: compute
ControllerEnableSwiftStorage: false
+# CloudDomain:
EnableSahara: false
ExtraConfig:
tripleo::ringbuilder::build_ring: False
diff --git a/config/network/network_settings.yaml b/config/network/network_settings.yaml
index 793c10db..f7680643 100644
--- a/config/network/network_settings.yaml
+++ b/config/network/network_settings.yaml
@@ -22,6 +22,9 @@
# DNS Servers for all nodes, comma delimited list
dns_servers: ["8.8.8.8", "8.8.4.4"]
+# Domain name to use for undercloud/overcloud nodes
+domain_name: 'opnfvapex.com'
+
# "admin" is the short name for Control Plane Network.
# During OPNFV deployment it is used for node provisioning so
# PXE boot should be enabled for the related interfaces on all
@@ -34,6 +37,8 @@ admin_network:
network_type: bridged
bridged_interface: ''
bond_interfaces: ''
+ compute_interface: nic1
+ controller_interface: nic1
usable_ip_range: 192.0.2.11,192.0.2.99
gateway: 192.0.2.1
provisioner_ip: 192.0.2.1
@@ -50,6 +55,8 @@ private_network:
enabled: true
vlan: native
cidr: 11.0.0.0/24
+ compute_interface: nic2
+ controller_interface: nic2
# "public" network is used for external connectivity.
# The external network provides Internet access for virtual
@@ -62,6 +69,8 @@ public_network:
enabled: true
network_type: ''
bridged_interface: ''
+ compute_interface: nic3
+ controller_interface: nic3
vlan: native
cidr: 192.168.37.0/24
gateway: 192.168.37.1
@@ -77,12 +86,16 @@ storage_network:
enabled: true
vlan: native
cidr: 12.0.0.0/24
+ compute_interface: nic4
+ controller_interface: nic4
#admin_network:
# enabled: true
# network_type: bridged #Indicates if this network will be bridged to an interface, or to a bond
# bridged_interface: '' #Interface to bridge to for installer VM
# bond_interfaces: '' #Interfaces to create bond with for installer VM
+# compute_interface: nic4 #Interface used for this network on the compute node. Can either be logical nic name like "nic1" or real name like "eth1"
+# controller_interface: nic4 #Interface used for this network on the controller node. Can either be logical nic name like "nic1" or real name like "eth1"
# vlan: native #VLAN tag to use, native means none
# usable_ip_range: 192.0.2.11,192.0.2.99 #Usable ip range, if empty entire range is usable, ex. 192.168.1.10,192.168.1.20
# gateway: 192.0.2.1 #Gateway (only needed when public_network is disabled), if empty it is auto-detected
diff --git a/lib/overcloud-deploy-functions.sh b/lib/overcloud-deploy-functions.sh
index 36522402..a08739ab 100755
--- a/lib/overcloud-deploy-functions.sh
+++ b/lib/overcloud-deploy-functions.sh
@@ -229,6 +229,7 @@ for dns_server in ${dns_servers}; do
dns_server_ext="\${dns_server_ext} --dns-nameserver \${dns_server}"
done
neutron subnet-update \$(neutron subnet-list | grep -Ev "id|tenant|external|storage" | grep -v \\\\-\\\\- | awk {'print \$2'}) \${dns_server_ext}
+sed -i '/CloudDomain:/c\ CloudDomain: '${domain_name} opnfv-environment.yaml
echo "Executing overcloud deployment, this should run for an extended period without output."
sleep 60 #wait for Hypervisor stats to check-in to nova
# save deploy command so it can be used for debugging
diff --git a/lib/python/apex/common/constants.py b/lib/python/apex/common/constants.py
index 8ed49ff7..996ef2f0 100644
--- a/lib/python/apex/common/constants.py
+++ b/lib/python/apex/common/constants.py
@@ -15,3 +15,5 @@ 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']
+DOMAIN_NAME = 'localdomain.com'
diff --git a/lib/python/apex/network_settings.py b/lib/python/apex/network_settings.py
index 50dd15c3..f2807664 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))
@@ -72,6 +75,53 @@ class NetworkSettings:
self.settings_obj['dns_servers'] = self.settings_obj.get(
'dns_servers', constants.DNS_SERVERS)
+ self.settings_obj['domain_name'] = self.settings_obj.get(
+ 'domain_name', constants.DOMAIN_NAME)
+
+ 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):
"""
@@ -233,6 +283,8 @@ class NetworkSettings:
dns_list = dns_list + "{} ".format(dns_server)
dns_list = dns_list.strip()
bash_str += "dns_servers=\'{}\'\n".format(dns_list)
+ bash_str += "domain_name=\'{}\'\n".format(self.settings_obj[
+ 'domain_name'])
if path:
with open(path, 'w') as file:
file.write(bash_str)
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():
diff --git a/lib/undercloud-functions.sh b/lib/undercloud-functions.sh
index f829e980..f1c42865 100755
--- a/lib/undercloud-functions.sh
+++ b/lib/undercloud-functions.sh
@@ -211,6 +211,7 @@ if [[ "$net_isolation_enabled" == "TRUE" ]]; then
openstack-config --set undercloud.conf DEFAULT dhcp_end ${admin_network_dhcp_range##*,}
openstack-config --set undercloud.conf DEFAULT inspection_iprange ${admin_network_introspection_range}
openstack-config --set undercloud.conf DEFAULT undercloud_debug false
+ openstack-config --set undercloud.conf DEFAULT undercloud_hostname "undercloud.${domain_name}"
fi
@@ -236,8 +237,18 @@ openstack undercloud install &> apex-undercloud-install.log || {
sleep 30
sudo systemctl restart openstack-glance-api
+# Set nova domain name
+sudo openstack-config --set /etc/nova/nova.conf DEFAULT dns_domain ${domain_name}
+sudo openstack-config --set /etc/nova/nova.conf DEFAULT dhcp_domain ${domain_name}
sudo systemctl restart openstack-nova-conductor
sudo systemctl restart openstack-nova-compute
+sudo systemctl restart openstack-nova-api
+sudo systemctl restart openstack-nova-scheduler
+
+# Set neutron domain name
+sudo openstack-config --set /etc/neutron/neutron.conf DEFAULT dns_domain ${domain_name}
+sudo systemctl restart neutron-server
+sudo systemctl restart neutron-dhcp-agent
sudo sed -i '/num_engine_workers/c\num_engine_workers = 2' /etc/heat/heat.conf
sudo sed -i '/#workers\s=/c\workers = 2' /etc/heat/heat.conf
diff --git a/tests/config/network_settings_duplicate_nic.yaml b/tests/config/network_settings_duplicate_nic.yaml
new file mode 100644
index 00000000..24dd5ca0
--- /dev/null
+++ b/tests/config/network_settings_duplicate_nic.yaml
@@ -0,0 +1,115 @@
+# This configuration file defines Network Environment for a
+# Baremetal Deployment of OPNFV. It contains default values
+# for 4 following networks:
+#
+# - admin
+# - private*
+# - public
+# - storage*
+#
+# *) optional networks
+#
+# Any values missing from this configuration file will be
+# auto-detected by deployment script from the existing network
+# configuration of the jumphost.
+#
+# Optional networks will be consolidated with the admin network
+# if not explicitely configured.
+#
+# See short description of the networks in the comments below.
+#
+
+# DNS Servers for all nodes, comma delimited list
+dns_servers: ["8.8.8.8", "8.8.4.4"]
+
+# "admin" is the short name for Control Plane Network.
+# During OPNFV deployment it is used for node provisioning so
+# PXE boot should be enabled for the related interfaces on all
+# the nodes in the OPNFV cluster. After the deployment this
+# network is used as the OpenStack management network which
+# carries e.g. communication between its internal components.
+#
+admin_network:
+ enabled: true
+ network_type: bridged
+ bridged_interface: ''
+ bond_interfaces: ''
+ compute_interface: eth1
+ controller_interface: eth2
+ usable_ip_range: 192.0.2.11,192.0.2.99
+ gateway: 192.0.2.1
+ provisioner_ip: 192.0.2.1
+ cidr: 192.0.2.0/24
+ dhcp_range: 192.0.2.2,192.0.2.10
+ introspection_range: 192.0.2.100,192.0.2.120
+
+# "private" is an optional network used as underlying physical
+# network for virtual provider and tenant networks created by
+# users. Traffic between virtual machines is carried by this
+# network.
+#
+private_network:
+ enabled: true
+ vlan: native
+ cidr: 11.0.0.0/24
+ compute_interface: enp0s4
+ controller_interface: nic3
+
+# "public" network is used for external connectivity.
+# The external network provides Internet access for virtual
+# machines. If floating IP range is defined for this network,
+# floating IP addresses can be used for accessing virtual
+# machines from outside of OPNFV cluster. Also external REST
+# API calls use this network.
+#
+public_network:
+ enabled: true
+ network_type: ''
+ bridged_interface: ''
+ compute_interface: eth1
+ controller_interface: enp0s3
+ vlan: native
+ cidr: 192.168.37.0/24
+ gateway: 192.168.37.1
+ floating_ip_range: 192.168.37.200,192.168.37.220
+ usable_ip_range: 192.168.37.10,192.168.37.199
+ provisioner_ip: 192.168.37.1
+
+# "storage" is an optional network used by storage backends.
+# You can configure this network in order to reduce load on
+# Control Plane Network.
+#
+storage_network:
+ enabled: true
+ vlan: native
+ cidr: 12.0.0.0/24
+ compute_interface: eth5
+ controller_interface: eth6
+
+#admin_network:
+# enabled: true
+# network_type: bridged #Indicates if this network will be bridged to an interface, or to a bond
+# bridged_interface: '' #Interface to bridge to for installer VM
+# bond_interfaces: '' #Interfaces to create bond with for installer VM
+# compute_interface: nic4 #Interface used for this network on the compute node. Can either be logical nic name like "nic1" or real name like "eth1"
+# controller_interface: nic4 #Interface used for this network on the controller node. Can either be logical nic name like "nic1" or real name like "eth1"
+# vlan: native #VLAN tag to use, native means none
+# usable_ip_range: 192.0.2.11,192.0.2.99 #Usable ip range, if empty entire range is usable, ex. 192.168.1.10,192.168.1.20
+# gateway: 192.0.2.1 #Gateway (only needed when public_network is disabled), if empty it is auto-detected
+# provisioner_ip: 192.0.2.1 #installer VM IP, if empty it is the next available IP in the admin subnet
+# cidr: 192.0.2.0/24 #subnet in CIDR format 192.168.1.0/24, if empty it will be auto-detected
+# dhcp_range: 192.0.2.2,192.0.2.10 #dhcp range for the admin network, if empty it will be automatically provisioned
+# introspection_range: 192.0.2.100,192.0.2.120 #Range used for introspection phase (examining nodes)
+#private_network:
+# enabled: false #If disabled, internal api traffic will collapse to admin_network
+#public_network:
+# enabled: true #If disabled, public_network traffic will collapse to admin network
+# network_type: ''
+# bridged_interface: ''
+# cidr: 192.168.37.0/24
+# gateway: 192.168.37.1
+# floating_ip_range: 192.168.37.200,192.168.37.220 #Range to allocate to floating IPs for the public network with Neutron
+# usable_ip_range: 192.168.37.10,192.168.37.199 #Usable IP range on the public network, usually this is a shared subnet
+# provisioner_ip: 192.168.37.1
+#storage_network:
+# enabled: false #If disabled, storage_network traffic will collapse to admin network
diff --git a/tests/config/network_settings_missing_required_nic.yaml b/tests/config/network_settings_missing_required_nic.yaml
new file mode 100644
index 00000000..18886278
--- /dev/null
+++ b/tests/config/network_settings_missing_required_nic.yaml
@@ -0,0 +1,113 @@
+# This configuration file defines Network Environment for a
+# Baremetal Deployment of OPNFV. It contains default values
+# for 4 following networks:
+#
+# - admin
+# - private*
+# - public
+# - storage*
+#
+# *) optional networks
+#
+# Any values missing from this configuration file will be
+# auto-detected by deployment script from the existing network
+# configuration of the jumphost.
+#
+# Optional networks will be consolidated with the admin network
+# if not explicitely configured.
+#
+# See short description of the networks in the comments below.
+#
+
+# DNS Servers for all nodes, comma delimited list
+dns_servers: ["8.8.8.8", "8.8.4.4"]
+
+# "admin" is the short name for Control Plane Network.
+# During OPNFV deployment it is used for node provisioning so
+# PXE boot should be enabled for the related interfaces on all
+# the nodes in the OPNFV cluster. After the deployment this
+# network is used as the OpenStack management network which
+# carries e.g. communication between its internal components.
+#
+admin_network:
+ enabled: true
+ network_type: bridged
+ bridged_interface: ''
+ bond_interfaces: ''
+ compute_interface: eth1
+ controller_interface: eth2
+ usable_ip_range: 192.0.2.11,192.0.2.99
+ gateway: 192.0.2.1
+ provisioner_ip: 192.0.2.1
+ cidr: 192.0.2.0/24
+ dhcp_range: 192.0.2.2,192.0.2.10
+ introspection_range: 192.0.2.100,192.0.2.120
+
+# "private" is an optional network used as underlying physical
+# network for virtual provider and tenant networks created by
+# users. Traffic between virtual machines is carried by this
+# network.
+#
+private_network:
+ enabled: true
+ vlan: native
+ cidr: 11.0.0.0/24
+ compute_interface: enp0s4
+ controller_interface: nic3
+
+# "public" network is used for external connectivity.
+# The external network provides Internet access for virtual
+# machines. If floating IP range is defined for this network,
+# floating IP addresses can be used for accessing virtual
+# machines from outside of OPNFV cluster. Also external REST
+# API calls use this network.
+#
+public_network:
+ enabled: true
+ network_type: ''
+ bridged_interface: ''
+ vlan: native
+ cidr: 192.168.37.0/24
+ gateway: 192.168.37.1
+ floating_ip_range: 192.168.37.200,192.168.37.220
+ usable_ip_range: 192.168.37.10,192.168.37.199
+ provisioner_ip: 192.168.37.1
+
+# "storage" is an optional network used by storage backends.
+# You can configure this network in order to reduce load on
+# Control Plane Network.
+#
+storage_network:
+ enabled: true
+ vlan: native
+ cidr: 12.0.0.0/24
+ compute_interface: eth5
+ controller_interface: eth6
+
+#admin_network:
+# enabled: true
+# network_type: bridged #Indicates if this network will be bridged to an interface, or to a bond
+# bridged_interface: '' #Interface to bridge to for installer VM
+# bond_interfaces: '' #Interfaces to create bond with for installer VM
+# compute_interface: nic4 #Interface used for this network on the compute node. Can either be logical nic name like "nic1" or real name like "eth1"
+# controller_interface: nic4 #Interface used for this network on the controller node. Can either be logical nic name like "nic1" or real name like "eth1"
+# vlan: native #VLAN tag to use, native means none
+# usable_ip_range: 192.0.2.11,192.0.2.99 #Usable ip range, if empty entire range is usable, ex. 192.168.1.10,192.168.1.20
+# gateway: 192.0.2.1 #Gateway (only needed when public_network is disabled), if empty it is auto-detected
+# provisioner_ip: 192.0.2.1 #installer VM IP, if empty it is the next available IP in the admin subnet
+# cidr: 192.0.2.0/24 #subnet in CIDR format 192.168.1.0/24, if empty it will be auto-detected
+# dhcp_range: 192.0.2.2,192.0.2.10 #dhcp range for the admin network, if empty it will be automatically provisioned
+# introspection_range: 192.0.2.100,192.0.2.120 #Range used for introspection phase (examining nodes)
+#private_network:
+# enabled: false #If disabled, internal api traffic will collapse to admin_network
+#public_network:
+# enabled: true #If disabled, public_network traffic will collapse to admin network
+# network_type: ''
+# bridged_interface: ''
+# cidr: 192.168.37.0/24
+# gateway: 192.168.37.1
+# floating_ip_range: 192.168.37.200,192.168.37.220 #Range to allocate to floating IPs for the public network with Neutron
+# usable_ip_range: 192.168.37.10,192.168.37.199 #Usable IP range on the public network, usually this is a shared subnet
+# provisioner_ip: 192.168.37.1
+#storage_network:
+# enabled: false #If disabled, storage_network traffic will collapse to admin network
diff --git a/tests/config/network_settings_nic1_reserved.yaml b/tests/config/network_settings_nic1_reserved.yaml
new file mode 100644
index 00000000..8abcfc85
--- /dev/null
+++ b/tests/config/network_settings_nic1_reserved.yaml
@@ -0,0 +1,113 @@
+# This configuration file defines Network Environment for a
+# Baremetal Deployment of OPNFV. It contains default values
+# for 4 following networks:
+#
+# - admin
+# - private*
+# - public
+# - storage*
+#
+# *) optional networks
+#
+# Any values missing from this configuration file will be
+# auto-detected by deployment script from the existing network
+# configuration of the jumphost.
+#
+# Optional networks will be consolidated with the admin network
+# if not explicitely configured.
+#
+# See short description of the networks in the comments below.
+#
+
+# DNS Servers for all nodes, comma delimited list
+dns_servers: ["8.8.8.8", "8.8.4.4"]
+
+# "admin" is the short name for Control Plane Network.
+# During OPNFV deployment it is used for node provisioning so
+# PXE boot should be enabled for the related interfaces on all
+# the nodes in the OPNFV cluster. After the deployment this
+# network is used as the OpenStack management network which
+# carries e.g. communication between its internal components.
+#
+admin_network:
+ enabled: true
+ network_type: bridged
+ bridged_interface: ''
+ bond_interfaces: ''
+ usable_ip_range: 192.0.2.11,192.0.2.99
+ gateway: 192.0.2.1
+ provisioner_ip: 192.0.2.1
+ cidr: 192.0.2.0/24
+ dhcp_range: 192.0.2.2,192.0.2.10
+ introspection_range: 192.0.2.100,192.0.2.120
+
+# "private" is an optional network used as underlying physical
+# network for virtual provider and tenant networks created by
+# users. Traffic between virtual machines is carried by this
+# network.
+#
+private_network:
+ enabled: true
+ vlan: native
+ cidr: 11.0.0.0/24
+ compute_interface: enp0s4
+ controller_interface: nic3
+
+# "public" network is used for external connectivity.
+# The external network provides Internet access for virtual
+# machines. If floating IP range is defined for this network,
+# floating IP addresses can be used for accessing virtual
+# machines from outside of OPNFV cluster. Also external REST
+# API calls use this network.
+#
+public_network:
+ enabled: true
+ network_type: ''
+ bridged_interface: ''
+ compute_interface: nic1
+ controller_interface: enp0s3
+ vlan: native
+ cidr: 192.168.37.0/24
+ gateway: 192.168.37.1
+ floating_ip_range: 192.168.37.200,192.168.37.220
+ usable_ip_range: 192.168.37.10,192.168.37.199
+ provisioner_ip: 192.168.37.1
+
+# "storage" is an optional network used by storage backends.
+# You can configure this network in order to reduce load on
+# Control Plane Network.
+#
+storage_network:
+ enabled: true
+ vlan: native
+ cidr: 12.0.0.0/24
+ compute_interface: eth5
+ controller_interface: eth6
+
+#admin_network:
+# enabled: true
+# network_type: bridged #Indicates if this network will be bridged to an interface, or to a bond
+# bridged_interface: '' #Interface to bridge to for installer VM
+# bond_interfaces: '' #Interfaces to create bond with for installer VM
+# overcloud_compute_interface: nic4 #Interface used for this network on the compute node. Can either be logical nic name like "nic1" or real name like "eth1"
+# overcloud_controller_interface: nic4 #Interface used for this network on the controller node. Can either be logical nic name like "nic1" or real name like "eth1"
+# vlan: native #VLAN tag to use, native means none
+# usable_ip_range: 192.0.2.11,192.0.2.99 #Usable ip range, if empty entire range is usable, ex. 192.168.1.10,192.168.1.20
+# gateway: 192.0.2.1 #Gateway (only needed when public_network is disabled), if empty it is auto-detected
+# provisioner_ip: 192.0.2.1 #installer VM IP, if empty it is the next available IP in the admin subnet
+# cidr: 192.0.2.0/24 #subnet in CIDR format 192.168.1.0/24, if empty it will be auto-detected
+# dhcp_range: 192.0.2.2,192.0.2.10 #dhcp range for the admin network, if empty it will be automatically provisioned
+# introspection_range: 192.0.2.100,192.0.2.120 #Range used for introspection phase (examining nodes)
+#private_network:
+# enabled: false #If disabled, internal api traffic will collapse to admin_network
+#public_network:
+# enabled: true #If disabled, public_network traffic will collapse to admin network
+# network_type: ''
+# bridged_interface: ''
+# cidr: 192.168.37.0/24
+# gateway: 192.168.37.1
+# floating_ip_range: 192.168.37.200,192.168.37.220 #Range to allocate to floating IPs for the public network with Neutron
+# usable_ip_range: 192.168.37.10,192.168.37.199 #Usable IP range on the public network, usually this is a shared subnet
+# provisioner_ip: 192.168.37.1
+#storage_network:
+# enabled: false #If disabled, storage_network traffic will collapse to admin network
diff --git a/tests/config/network_settings_nics_not_specified.yaml b/tests/config/network_settings_nics_not_specified.yaml
new file mode 100644
index 00000000..e5089435
--- /dev/null
+++ b/tests/config/network_settings_nics_not_specified.yaml
@@ -0,0 +1,107 @@
+# This configuration file defines Network Environment for a
+# Baremetal Deployment of OPNFV. It contains default values
+# for 4 following networks:
+#
+# - admin
+# - private*
+# - public
+# - storage*
+#
+# *) optional networks
+#
+# Any values missing from this configuration file will be
+# auto-detected by deployment script from the existing network
+# configuration of the jumphost.
+#
+# Optional networks will be consolidated with the admin network
+# if not explicitely configured.
+#
+# See short description of the networks in the comments below.
+#
+
+# DNS Servers for all nodes, comma delimited list
+dns_servers: ["8.8.8.8", "8.8.4.4"]
+
+# "admin" is the short name for Control Plane Network.
+# During OPNFV deployment it is used for node provisioning so
+# PXE boot should be enabled for the related interfaces on all
+# the nodes in the OPNFV cluster. After the deployment this
+# network is used as the OpenStack management network which
+# carries e.g. communication between its internal components.
+#
+admin_network:
+ enabled: true
+ network_type: bridged
+ bridged_interface: ''
+ bond_interfaces: ''
+ usable_ip_range: 192.0.2.11,192.0.2.99
+ gateway: 192.0.2.1
+ provisioner_ip: 192.0.2.1
+ cidr: 192.0.2.0/24
+ dhcp_range: 192.0.2.2,192.0.2.10
+ introspection_range: 192.0.2.100,192.0.2.120
+
+# "private" is an optional network used as underlying physical
+# network for virtual provider and tenant networks created by
+# users. Traffic between virtual machines is carried by this
+# network.
+#
+private_network:
+ enabled: true
+ vlan: native
+ cidr: 11.0.0.0/24
+
+# "public" network is used for external connectivity.
+# The external network provides Internet access for virtual
+# machines. If floating IP range is defined for this network,
+# floating IP addresses can be used for accessing virtual
+# machines from outside of OPNFV cluster. Also external REST
+# API calls use this network.
+#
+public_network:
+ enabled: true
+ network_type: ''
+ bridged_interface: ''
+ vlan: native
+ cidr: 192.168.37.0/24
+ gateway: 192.168.37.1
+ floating_ip_range: 192.168.37.200,192.168.37.220
+ usable_ip_range: 192.168.37.10,192.168.37.199
+ provisioner_ip: 192.168.37.1
+
+# "storage" is an optional network used by storage backends.
+# You can configure this network in order to reduce load on
+# Control Plane Network.
+#
+storage_network:
+ enabled: true
+ vlan: native
+ cidr: 12.0.0.0/24
+
+#admin_network:
+# enabled: true
+# network_type: bridged #Indicates if this network will be bridged to an interface, or to a bond
+# bridged_interface: '' #Interface to bridge to for installer VM
+# bond_interfaces: '' #Interfaces to create bond with for installer VM
+# compute_interface: nic4 #Interface used for this network on the compute node. Can either be logical nic name like "nic1" or real name like "eth1"
+# controller_interface: nic4 #Interface used for this network on the controller node. Can either be logical nic name like "nic1" or real name like "eth1"
+# vlan: native #VLAN tag to use, native means none
+# usable_ip_range: 192.0.2.11,192.0.2.99 #Usable ip range, if empty entire range is usable, ex. 192.168.1.10,192.168.1.20
+# gateway: 192.0.2.1 #Gateway (only needed when public_network is disabled), if empty it is auto-detected
+# provisioner_ip: 192.0.2.1 #installer VM IP, if empty it is the next available IP in the admin subnet
+# cidr: 192.0.2.0/24 #subnet in CIDR format 192.168.1.0/24, if empty it will be auto-detected
+# dhcp_range: 192.0.2.2,192.0.2.10 #dhcp range for the admin network, if empty it will be automatically provisioned
+# introspection_range: 192.0.2.100,192.0.2.120 #Range used for introspection phase (examining nodes)
+#private_network:
+# enabled: false #If disabled, internal api traffic will collapse to admin_network
+#public_network:
+# enabled: true #If disabled, public_network traffic will collapse to admin network
+# network_type: ''
+# bridged_interface: ''
+# cidr: 192.168.37.0/24
+# gateway: 192.168.37.1
+# floating_ip_range: 192.168.37.200,192.168.37.220 #Range to allocate to floating IPs for the public network with Neutron
+# usable_ip_range: 192.168.37.10,192.168.37.199 #Usable IP range on the public network, usually this is a shared subnet
+# provisioner_ip: 192.168.37.1
+#storage_network:
+# enabled: false #If disabled, storage_network traffic will collapse to admin network
diff --git a/tests/test_apex_network_settings.py b/tests/test_apex_network_settings.py
index a891473f..45c26ed4 100644
--- a/tests/test_apex_network_settings.py
+++ b/tests/test_apex_network_settings.py
@@ -7,10 +7,16 @@
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
-from apex.network_settings import NetworkSettings
+from apex.network_settings import (
+ NetworkSettings,
+ NetworkSettingsException,
+)
-from nose.tools import assert_equal
-from nose.tools import assert_is_instance
+from nose.tools import (
+ assert_equal,
+ assert_is_instance,
+ assert_raises
+)
class TestNetworkSettings(object):
@@ -29,7 +35,7 @@ class TestNetworkSettings(object):
"""This method is run once after _each_ test method is executed"""
def test_init(self):
- ns = NetworkSettings('../config/network/network_settings.yaml', True)
+ NetworkSettings('../config/network/network_settings.yaml', True)
def test_dump_bash(self):
ns = NetworkSettings('../config/network/network_settings.yaml', True)
@@ -39,7 +45,38 @@ class TestNetworkSettings(object):
def test_get_network_settings(self):
ns = NetworkSettings('../config/network/network_settings.yaml', True)
assert_is_instance(ns.get_network_settings(), dict)
+ for role in ['controller', 'compute']:
+ nic_index = 1
+ for network in ['admin_network', 'private_network',
+ 'public_network', 'storage_network']:
+ nic = 'nic' + str(nic_index)
+ assert_equal(ns.nics[role][network], nic)
+ nic_index += 1
+
+ def test_get_network_settings_unspecified_nics(self):
+ ns = NetworkSettings(
+ '../tests/config/network_settings_nics_not_specified.yaml',
+ True)
+ assert_is_instance(ns.get_network_settings(), dict)
+ for role in ['controller', 'compute']:
+ nic_index = 1
+ for network in ['admin_network', 'private_network',
+ 'public_network', 'storage_network']:
+ nic = 'nic' + str(nic_index)
+ assert_equal(ns.nics[role][network], nic)
+ nic_index += 1
def test_get_enabled_networks(self):
ns = NetworkSettings('../config/network/network_settings.yaml', True)
assert_is_instance(ns.get_enabled_networks(), list)
+
+ def test_negative_network_settings(self):
+ assert_raises(NetworkSettingsException, NetworkSettings,
+ '../tests/config/network_settings_duplicate_nic.yaml',
+ True)
+ assert_raises(NetworkSettingsException, NetworkSettings,
+ '../tests/config/network_settings_nic1_reserved.yaml',
+ True)
+ assert_raises(NetworkSettingsException, NetworkSettings,
+ '../tests/config/network_settings_missing_required_nic'
+ '.yaml', True)