summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--build/enable_rt_kvm.yaml4
-rw-r--r--build/kvm4nfv-1st-boot.yaml60
-rwxr-xr-xbuild/overcloud-full.sh5
-rw-r--r--build/rpm_specs/opnfv-apex-common.spec5
-rwxr-xr-xbuild/undercloud.sh5
-rw-r--r--build/variables.sh3
-rw-r--r--config/deploy/deploy_settings.yaml4
-rw-r--r--config/deploy/os-nosdn-kvm-ha.yaml11
-rw-r--r--config/deploy/os-nosdn-kvm-noha.yaml11
-rw-r--r--config/network/network_settings.yaml10
-rwxr-xr-xlib/overcloud-deploy-functions.sh16
-rw-r--r--lib/python/apex/deploy_settings.py3
-rw-r--r--lib/python/apex/network_settings.py2
-rw-r--r--tests/test_apex_network_settings.py9
14 files changed, 132 insertions, 16 deletions
diff --git a/build/enable_rt_kvm.yaml b/build/enable_rt_kvm.yaml
new file mode 100644
index 00000000..0059021c
--- /dev/null
+++ b/build/enable_rt_kvm.yaml
@@ -0,0 +1,4 @@
+parameter_defaults:
+ ComputeKernelArgs: 'kvmfornfv_kernel.rpm'
+resource_registry:
+ OS::TripleO::NodeUserData: kvm4nfv-1st-boot.yaml
diff --git a/build/kvm4nfv-1st-boot.yaml b/build/kvm4nfv-1st-boot.yaml
new file mode 100644
index 00000000..0dad3e3b
--- /dev/null
+++ b/build/kvm4nfv-1st-boot.yaml
@@ -0,0 +1,60 @@
+heat_template_version: 2014-10-16
+
+description: >
+ This is the firstboot configuration for kvmfornfv kernel of the compute nodes
+ via cloud-init. To enable this, replace the default
+ mapping of OS::TripleO::NodeUserData in ../overcloud_resource_registry*
+
+parameters:
+ ComputeKernelArgs:
+ description: >
+ Name of the kvmfornfv kernel rpm.
+ Example: "kvmfornfv_kernel.rpm"
+ type: string
+ default: ""
+ ComputeHostnameFormat:
+ type: string
+ default: ""
+
+resources:
+ userdata:
+ type: OS::Heat::MultipartMime
+ properties:
+ parts:
+ - config: {get_resource: compute_kernel_args}
+
+ # Verify the logs on /var/log/cloud-init.log on the overcloud node
+ compute_kernel_args:
+ type: OS::Heat::SoftwareConfig
+ properties:
+ config:
+ str_replace:
+ template: |
+ #!/bin/bash
+ set -x
+ FORMAT=$COMPUTE_HOSTNAME_FORMAT
+ if [[ -z $FORMAT ]] ; then
+ FORMAT="compute" ;
+ else
+ # Assumption: only %index% and %stackname% are the variables in Host name format
+ FORMAT=$(echo $FORMAT | sed 's/\%index\%//g' | sed 's/\%stackname\%//g') ;
+ fi
+ if [[ $(hostname) == *$FORMAT* ]] ; then
+ yum install -y /root/$KVMFORNFV_KERNEL_RPM
+ grub2-mkconfig -o /etc/grub2.cfg
+ sleep 5
+ reboot
+ fi
+ params:
+ $KVMFORNFV_KERNEL_RPM: {get_param: ComputeKernelArgs}
+ $COMPUTE_HOSTNAME_FORMAT: {get_param: ComputeHostnameFormat}
+
+outputs:
+ # This means get_resource from the parent template will get the userdata, see:
+ # http://docs.openstack.org/developer/heat/template_guide/composition.html#making-your-template-resource-more-transparent
+ # Note this is new-for-kilo, an alternative is returning a value then using
+ # get_attr in the parent template instead.
+ OS::stack_id:
+ value: {get_resource: userdata}
+
+
diff --git a/build/overcloud-full.sh b/build/overcloud-full.sh
index c4c31c8a..b94c0cb0 100755
--- a/build/overcloud-full.sh
+++ b/build/overcloud-full.sh
@@ -77,6 +77,9 @@ enabled=1
gpgcheck=0
EOF
+# Get Real Time Kernel from kvm4nfv
+populate_cache $kvmfornfv_uri_base/$kvmfornfv_kernel_rpm
+
# Increase disk size by 500MB to accommodate more packages
qemu-img resize overcloud-full_build.qcow2 +500MB
@@ -90,6 +93,7 @@ qemu-img resize overcloud-full_build.qcow2 +500MB
# git clone vsperf into the overcloud image
# upload the tacker puppet module and untar it
# install tacker
+# upload the rt_kvm kernel
LIBGUESTFS_BACKEND=direct virt-customize \
--run-command "xfs_growfs /dev/sda" \
--upload ${BUILD_DIR}/opnfv-puppet-tripleo.tar.gz:/etc/puppet/modules \
@@ -136,6 +140,7 @@ LIBGUESTFS_BACKEND=direct virt-customize \
--run-command "cd /usr/lib/python2.7/site-packages/ && patch -p1 < neutron-patch-NSDriver.patch" \
--upload ${BUILD_ROOT}/patches/puppet-neutron-add-odl-settings.patch:/usr/share/openstack-puppet/modules/neutron/ \
--run-command "cd /usr/share/openstack-puppet/modules/neutron && patch -p1 < puppet-neutron-add-odl-settings.patch" \
+ --upload ${CACHE_DIR}/$kvmfornfv_kernel_rpm:/root/ \
-a overcloud-full_build.qcow2
mv -f overcloud-full_build.qcow2 overcloud-full.qcow2
diff --git a/build/rpm_specs/opnfv-apex-common.spec b/build/rpm_specs/opnfv-apex-common.spec
index 40b25290..a004542b 100644
--- a/build/rpm_specs/opnfv-apex-common.spec
+++ b/build/rpm_specs/opnfv-apex-common.spec
@@ -43,6 +43,8 @@ install config/deploy/os-nosdn-ovs-noha.yaml %{buildroot}%{_sysconfdir}/opnfv-ap
install config/deploy/os-nosdn-nofeature-ha.yaml %{buildroot}%{_sysconfdir}/opnfv-apex/os-nosdn-nofeature-ha.yaml
install config/deploy/os-nosdn-performance-ha.yaml %{buildroot}%{_sysconfdir}/opnfv-apex/os-nosdn-performance-ha.yaml
install config/deploy/os-nosdn-ovs-ha.yaml %{buildroot}%{_sysconfdir}/opnfv-apex/os-nosdn-ovs-ha.yaml
+install config/deploy/os-nosdn-kvm-ha.yaml %{buildroot}%{_sysconfdir}/opnfv-apex/os-nosdn-kvm-ha.yaml
+install config/deploy/os-nosdn-kvm-noha.yaml %{buildroot}%{_sysconfdir}/opnfv-apex/os-nosdn-kvm-noha.yaml
install config/deploy/os-odl_l2-nofeature-ha.yaml %{buildroot}%{_sysconfdir}/opnfv-apex/os-odl_l2-nofeature-ha.yaml
install config/deploy/os-odl_l2-sfc-noha.yaml %{buildroot}%{_sysconfdir}/opnfv-apex/os-odl_l2-sfc-noha.yaml
install config/deploy/os-odl-bgpvpn-ha.yaml %{buildroot}%{_sysconfdir}/opnfv-apex/os-odl-bgpvpn-ha.yaml
@@ -120,6 +122,8 @@ install config/inventory/pod_example_settings.yaml %{buildroot}%{_docdir}/opnfv/
%{_sysconfdir}/opnfv-apex/os-nosdn-nofeature-ha.yaml
%{_sysconfdir}/opnfv-apex/os-nosdn-performance-ha.yaml
%{_sysconfdir}/opnfv-apex/os-nosdn-ovs-ha.yaml
+%{_sysconfdir}/opnfv-apex/os-nosdn-kvm-ha.yaml
+%{_sysconfdir}/opnfv-apex/os-nosdn-kvm-noha.yaml
%{_sysconfdir}/opnfv-apex/os-odl_l2-nofeature-ha.yaml
%{_sysconfdir}/opnfv-apex/os-odl_l2-sfc-noha.yaml
%{_sysconfdir}/opnfv-apex/os-odl-bgpvpn-ha.yaml
@@ -147,6 +151,7 @@ install config/inventory/pod_example_settings.yaml %{buildroot}%{_docdir}/opnfv/
%changelog
* Wed Mar 08 2017 Dan Radez <dradez@redhat.com> - 4.0-5
- Commenting out ONOS, unsupported in Danube
+- Adding kvm4nfv files
* Tue Feb 14 2017 Feng Pan <fpan@redhat.com> - 4.0-4
- Add network_settings_vpp.yaml
* Fri Feb 3 2017 Nikolas Hermanns <nikolas.hermanns@ericsson.com> - 4.0-3
diff --git a/build/undercloud.sh b/build/undercloud.sh
index 1101da87..4e1b963a 100755
--- a/build/undercloud.sh
+++ b/build/undercloud.sh
@@ -24,6 +24,9 @@ pushd opnfv-tht > /dev/null
git archive --format=tar.gz --prefix=openstack-tripleo-heat-templates/ HEAD > ${BUILD_DIR}/opnfv-tht.tar.gz
popd > /dev/null
+# inject rt_kvm kernel rpm name into the enable file
+sed -i "s/kvmfornfv_kernel.rpm/$kvmfornfv_kernel_rpm/" ${BUILD_ROOT}/enable_rt_kvm.yaml
+
# installing forked opnfv-tht
# enabling ceph OSDs to live on the controller
# OpenWSMan package update supports the AMT Ironic driver for the TealBox
@@ -48,6 +51,8 @@ LIBGUESTFS_BACKEND=direct virt-customize \
--run-command "cp /usr/share/instack-undercloud/undercloud.conf.sample /home/stack/undercloud.conf && chown stack:stack /home/stack/undercloud.conf" \
--upload ${BUILD_ROOT}/opnfv-environment.yaml:/home/stack/ \
--upload ${BUILD_ROOT}/first-boot.yaml:/home/stack/ \
+ --upload ${BUILD_ROOT}/kvm4nfv-1st-boot.yaml:/home/stack/ \
+ --upload ${BUILD_ROOT}/enable_rt_kvm.yaml:/home/stack/ \
--upload ${BUILD_ROOT}/csit-environment.yaml:/home/stack/ \
--upload ${BUILD_ROOT}/virtual-environment.yaml:/home/stack/ \
--install "python2-congressclient" \
diff --git a/build/variables.sh b/build/variables.sh
index 93ae83df..4ba591c4 100644
--- a/build/variables.sh
+++ b/build/variables.sh
@@ -33,6 +33,9 @@ dpdk_rpms=(
'ovs4opnfv-e8acab14-openvswitch-2.5.90-0.12032.gitc61e93d6.1.el7.centos.x86_64.rpm'
)
+kvmfornfv_uri_base="http://artifacts.opnfv.org/kvmfornfv"
+kvmfornfv_kernel_rpm="kernel-4.4.6_rt14_1703030237nfv-1.x86_64.rpm"
+
tacker_repo="http://github.com/openstack/tacker"
tacker_branch="stable/newton"
tacker_commit=$(git ls-remote ${tacker_repo} ${tacker_branch} | awk '{print substr($1,1,7)}')
diff --git a/config/deploy/deploy_settings.yaml b/config/deploy/deploy_settings.yaml
index b3d3ac2b..73535795 100644
--- a/config/deploy/deploy_settings.yaml
+++ b/config/deploy/deploy_settings.yaml
@@ -41,6 +41,10 @@ deploy_options:
# 'ovs', 'ovs_dpdk' and 'fdio'.
dataplane : ovs
+ # Whether to run the kvm real time kernel (rt_kvm) in the compute node(s) to
+ # reduce the network latencies caused by network function virtualization
+ rt_kvm: false
+
# Whether to install and configure fdio functionality in the overcloud
# The dataplane should be specified as fdio if this is set to true
vpp: false
diff --git a/config/deploy/os-nosdn-kvm-ha.yaml b/config/deploy/os-nosdn-kvm-ha.yaml
new file mode 100644
index 00000000..cb68a313
--- /dev/null
+++ b/config/deploy/os-nosdn-kvm-ha.yaml
@@ -0,0 +1,11 @@
+global_params:
+ ha_enabled: true
+
+deploy_options:
+ sdn_controller: false
+ sdn_l3: false
+ tacker: true
+ congress: true
+ sfc: false
+ vpn: false
+ rt_kvm: true
diff --git a/config/deploy/os-nosdn-kvm-noha.yaml b/config/deploy/os-nosdn-kvm-noha.yaml
new file mode 100644
index 00000000..bf737d71
--- /dev/null
+++ b/config/deploy/os-nosdn-kvm-noha.yaml
@@ -0,0 +1,11 @@
+global_params:
+ ha_enabled: false
+
+deploy_options:
+ sdn_controller: false
+ sdn_l3: false
+ tacker: true
+ congress: true
+ sfc: false
+ vpn: false
+ rt_kvm: true
diff --git a/config/network/network_settings.yaml b/config/network/network_settings.yaml
index 1cba64bb..be0b6836 100644
--- a/config/network/network_settings.yaml
+++ b/config/network/network_settings.yaml
@@ -80,7 +80,7 @@ networks: # Network configurations
compute: # Mapping for compute profile (nodes that will be used as Compute nodes)
phys_type: interface # Physical interface type (interface or bond)
members: # Physical NIC members of this mapping (Single value allowed for interface phys_type)
- - nic1
+ - eth0
controller: # Mapping for controller profile (nodes that will be used as Controller nodes)
phys_type: interface
members:
@@ -99,7 +99,7 @@ networks: # Network configurations
phys_type: interface # Physical interface type (interface or bond)
vlan: native # VLAN tag to use with this NIC
members: # Physical NIC members of this mapping (Single value allowed for interface phys_type)
- - nic2 # Note, for Apex you may also use the logical nic name (found by nic order), such as "nic1"
+ - eth1 # Note, for Apex you may also use the logical nic name (found by nic order), such as "nic1"
controller: # Mapping for controller profile (nodes that will be used as Controller nodes)
phys_type: interface
vlan: native
@@ -130,7 +130,7 @@ networks: # Network configurations
phys_type: interface # Physical interface type (interface or bond)
vlan: native # VLAN tag to use with this NIC
members: # Physical NIC members of this mapping (Single value allowed for interface phys_type)
- - nic3
+ - eth2
controller: # Mapping for controller profile (nodes that will be used as Controller nodes)
phys_type: interface
vlan: native
@@ -163,7 +163,7 @@ networks: # Network configurations
phys_type: interface # Physical interface type (interface or bond)
vlan: 101 # VLAN tag to use with this NIC
members: # Physical NIC members of this mapping (Single value allowed for interface phys_type)
- - nic3 # Note, for Apex you may also use the logical nic name (found by nic order), such as "nic1"
+ - eth2 # Note, for Apex you may also use the logical nic name (found by nic order), such as "nic1"
controller: # Mapping for controller profile (nodes that will be used as Controller nodes)
phys_type: interface
vlan: 101
@@ -184,7 +184,7 @@ networks: # Network configurations
phys_type: interface # Physical interface type (interface or bond)
vlan: native # VLAN tag to use with this NIC
members: # Physical NIC members of this mapping (Single value allowed for interface phys_type)
- - nic4 # Note, for Apex you may also use the logical nic name (found by nic order), such as "nic1"
+ - eth3 # Note, for Apex you may also use the logical nic name (found by nic order), such as "nic1"
controller: # Mapping for controller profile (nodes that will be used as Controller nodes)
phys_type: interface
vlan: native
diff --git a/lib/overcloud-deploy-functions.sh b/lib/overcloud-deploy-functions.sh
index f05e611f..d7e9b7e0 100755
--- a/lib/overcloud-deploy-functions.sh
+++ b/lib/overcloud-deploy-functions.sh
@@ -14,6 +14,11 @@ function overcloud_deploy {
local num_compute_nodes
local num_control_nodes
+ # OPNFV Default Environment and Network settings
+ DEPLOY_OPTIONS+=" -e ${ENV_FILE}"
+ DEPLOY_OPTIONS+=" -e network-environment.yaml"
+
+ # Custom Deploy Environment Templates
if [[ "${#deploy_options_array[@]}" -eq 0 || "${deploy_options_array['sdn_controller']}" == 'opendaylight' ]]; then
if [ "${deploy_options_array['sfc']}" == 'True' ]; then
DEPLOY_OPTIONS+=" -e /usr/share/openstack-tripleo-heat-templates/environments/opendaylight_sfc.yaml"
@@ -65,6 +70,11 @@ function overcloud_deploy {
DEPLOY_OPTIONS+=" -e /usr/share/openstack-tripleo-heat-templates/environments/enable_congress.yaml"
fi
+ # Enable Real Time Kernel (kvm4nfv)
+ if [ "${deploy_options_array['rt_kvm']}" == 'True' ]; then
+ DEPLOY_OPTIONS+=" -e /home/stack/enable_rt_kvm.yaml"
+ fi
+
# Make sure the correct overcloud image is available
if [ ! -f $IMAGES/overcloud-full-${SDN_IMAGE}.qcow2 ]; then
echo "${red} $IMAGES/overcloud-full-${SDN_IMAGE}.qcow2 is required to execute your deployment."
@@ -185,10 +195,6 @@ EOI
DEPLOY_OPTIONS+=" -e /usr/share/openstack-tripleo-heat-templates/environments/storage-environment.yaml"
fi
- #DEPLOY_OPTIONS+=" -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml"
- DEPLOY_OPTIONS+=" -e network-environment.yaml"
-
-
# get number of nodes available in inventory
num_control_nodes=$(ssh -T ${SSH_OPTIONS[@]} "root@$UNDERCLOUD" "grep -c profile:control /home/stack/instackenv.json")
num_compute_nodes=$(ssh -T ${SSH_OPTIONS[@]} "root@$UNDERCLOUD" "grep -c profile:compute /home/stack/instackenv.json")
@@ -225,8 +231,6 @@ EOI
DEPLOY_OPTIONS+=" -e virtual-environment.yaml"
fi
- DEPLOY_OPTIONS+=" -e ${ENV_FILE}"
-
echo -e "${blue}INFO: Deploy options set:\n${DEPLOY_OPTIONS}${reset}"
ssh -T ${SSH_OPTIONS[@]} "stack@$UNDERCLOUD" <<EOI
diff --git a/lib/python/apex/deploy_settings.py b/lib/python/apex/deploy_settings.py
index 0d1939a4..566e8bea 100644
--- a/lib/python/apex/deploy_settings.py
+++ b/lib/python/apex/deploy_settings.py
@@ -23,7 +23,8 @@ REQ_DEPLOY_SETTINGS = ['sdn_controller',
'vpn',
'vpp',
'ceph',
- 'gluon']
+ 'gluon',
+ 'rt_kvm']
OPT_DEPLOY_SETTINGS = ['performance',
'vsperf',
diff --git a/lib/python/apex/network_settings.py b/lib/python/apex/network_settings.py
index b04f141a..79b0a9d1 100644
--- a/lib/python/apex/network_settings.py
+++ b/lib/python/apex/network_settings.py
@@ -99,13 +99,13 @@ class NetworkSettings(dict):
logging.info("{} enabled".format(network))
self._config_required_settings(network)
nicmap = _network['nic_mapping']
+ self._validate_overcloud_nic_order(network)
iface = nicmap[CONTROLLER]['members'][0]
self._config_ip_range(network=network,
interface=iface,
ip_range='overcloud_ip_range',
start_offset=21, end_offset=21)
self.enabled_network_list.append(network)
- self._validate_overcloud_nic_order(network)
# TODO self._config_optional_settings(network)
else:
logging.info("{} disabled, will collapse with "
diff --git a/tests/test_apex_network_settings.py b/tests/test_apex_network_settings.py
index 955c0cf7..8f994352 100644
--- a/tests/test_apex_network_settings.py
+++ b/tests/test_apex_network_settings.py
@@ -92,7 +92,10 @@ class TestNetworkSettings(object):
nic_index = 1
print(ns.nics)
for network in ns.enabled_network_list:
- nic = 'nic' + str(nic_index)
+ if role == 'compute':
+ nic = 'eth' + str(nic_index - 1)
+ else:
+ nic = 'nic' + str(nic_index)
assert_equal(ns.nics[role][network], nic)
nic_index += 1
@@ -104,10 +107,10 @@ class TestNetworkSettings(object):
ns = NetworkSettings(files_dir+'network_settings.yaml')
storage_net_nicmap = ns['networks'][STORAGE_NETWORK]['nic_mapping']
# set duplicate nic
- storage_net_nicmap['compute']['members'][0] = 'nic1'
+ storage_net_nicmap['controller']['members'][0] = 'nic1'
assert_raises(NetworkSettingsException, NetworkSettings, ns)
# remove nic members
- storage_net_nicmap['compute']['members'] = []
+ storage_net_nicmap['controller']['members'] = []
assert_raises(NetworkSettingsException, NetworkSettings, ns)
def test_missing_vlan(self):