summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--build/Makefile9
-rw-r--r--build/build_perf_image.sh4
-rw-r--r--build/opnfv-apex-common.spec8
-rw-r--r--build/opnfv-environment.yaml1
-rw-r--r--build/set_perf_images.sh24
-rwxr-xr-xbuild/undercloud.sh6
-rw-r--r--ci/PR_revision.log1
-rwxr-xr-xci/build.sh20
-rwxr-xr-xci/clean.sh3
-rwxr-xr-xci/deploy.sh95
-rw-r--r--config/deploy/os-nosdn-ovs-ha.yaml24
-rw-r--r--config/deploy/os-nosdn-ovs-noha.yaml24
-rw-r--r--lib/installer/domain.xml36
-rw-r--r--lib/python/apex/deploy_env.py30
-rw-r--r--lib/python/apex/ip_utils.py6
-rwxr-xr-xtests/python-coverage.sh60
-rw-r--r--tests/python_coverage_ip_utils.py25
17 files changed, 341 insertions, 35 deletions
diff --git a/build/Makefile b/build/Makefile
index 8a498a66..4d024a3b 100644
--- a/build/Makefile
+++ b/build/Makefile
@@ -56,6 +56,15 @@ $(RPMCOM):
# build the common RPM
rpmbuild --clean -ba opnfv-apex-common.spec -D '_topdir %(echo `pwd`)' -D '_builddir %(echo `pwd`)' -D '_sourcedir %(echo `pwd`)' -D '_rpmdir %(echo `pwd`)' -D '_specdir %(echo `pwd`)' -D '_srcrpmdir %(echo `pwd`)' -D "release $(shell echo $(RELEASE) | tr -d '_-')"
+##################
+# PYTHON TESTS #
+##################
+
+.PHONY: python-tests
+python-tests:
+ cd ../tests && ./python-coverage.sh
+
+
###############
# UNDERCLOUD #
###############
diff --git a/build/build_perf_image.sh b/build/build_perf_image.sh
index 80e615ef..c91b563d 100644
--- a/build/build_perf_image.sh
+++ b/build/build_perf_image.sh
@@ -33,8 +33,6 @@ if [ "$CATEGORY" == "nova" ]; then
fi
if [ "$CATEGORY" == "kernel" ]; then
- LIBGUESTFS_BACKEND=direct virt-customize \
- --run-command "grubby --update-kernel=ALL --args=$KEY=$VALUE" \
- -a $IMAGE
+ echo "${KEY}=${VALUE}" >> $ROLE-kernel_params.txt
fi
diff --git a/build/opnfv-apex-common.spec b/build/opnfv-apex-common.spec
index 327df3bc..fc82fca7 100644
--- a/build/opnfv-apex-common.spec
+++ b/build/opnfv-apex-common.spec
@@ -34,8 +34,10 @@ install ci/util.sh %{buildroot}%{_bindir}/opnfv-util
mkdir -p %{buildroot}%{_sysconfdir}/opnfv-apex/
install config/deploy/os-nosdn-nofeature-noha.yaml %{buildroot}%{_sysconfdir}/opnfv-apex/os-nosdn-nofeature-noha.yaml
+install config/deploy/os-nosdn-ovs-noha.yaml %{buildroot}%{_sysconfdir}/opnfv-apex/os-nosdn-ovs-noha.yaml
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-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_l3-nofeature-ha.yaml %{buildroot}%{_sysconfdir}/opnfv-apex/os-odl_l3-nofeature-ha.yaml
@@ -59,6 +61,7 @@ install lib/python/apex/common/constants.py %{buildroot}%{python3_sitelib}/apex/
install lib/python/apex/common/utils.py %{buildroot}%{python3_sitelib}/apex/common/
mkdir -p %{buildroot}%{_var}/opt/opnfv/lib/installer/onos/
install lib/installer/onos/onos_gw_mac_update.sh %{buildroot}%{_var}/opt/opnfv/lib/installer/onos/
+install lib/installer/domain.xml %{buildroot}%{_var}/opt/opnfv/lib/installer/
mkdir -p %{buildroot}%{_docdir}/opnfv/
install LICENSE.rst %{buildroot}%{_docdir}/opnfv/
@@ -79,9 +82,12 @@ install config/inventory/pod_example_settings.yaml %{buildroot}%{_docdir}/opnfv/
%{_var}/opt/opnfv/lib/python/
%{python3_sitelib}/apex/
%{_var}/opt/opnfv/lib/installer/onos/onos_gw_mac_update.sh
+%{_var}/opt/opnfv/lib/installer/domain.xml
%{_sysconfdir}/opnfv-apex/os-nosdn-nofeature-noha.yaml
+%{_sysconfdir}/opnfv-apex/os-nosdn-ovs-noha.yaml
%{_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-odl_l2-nofeature-ha.yaml
%{_sysconfdir}/opnfv-apex/os-odl_l2-sfc-noha.yaml
%{_sysconfdir}/opnfv-apex/os-odl_l3-nofeature-ha.yaml
@@ -97,6 +103,8 @@ install config/inventory/pod_example_settings.yaml %{buildroot}%{_docdir}/opnfv/
%doc %{_docdir}/opnfv/inventory.yaml.example
%changelog
+* Thu Jun 2 2016 Michael Chapman <michapma@redhat.com> - 3.0-7
+- Add custom libvirt domain.xml.
* Wed Jun 1 2016 Feng Pan <fpan@redhat.com> - 3.0-6
- Add performance deployment file
* Sun May 15 2016 Feng Pan <fpan@redhat.com> - 3.0-5
diff --git a/build/opnfv-environment.yaml b/build/opnfv-environment.yaml
index 57df2d35..54b1e6f2 100644
--- a/build/opnfv-environment.yaml
+++ b/build/opnfv-environment.yaml
@@ -3,6 +3,7 @@
parameters:
controllerImage: overcloud-full
+ OvercloudControlFlavor: baremetal
ControllerEnableSwiftStorage: false
EnableSahara: false
ExtraConfig:
diff --git a/build/set_perf_images.sh b/build/set_perf_images.sh
index 2002e6fb..0025cc75 100644
--- a/build/set_perf_images.sh
+++ b/build/set_perf_images.sh
@@ -2,7 +2,7 @@
##############################################################################
# Copyright (c) 2016 Red Hat Inc.
-# Michael Chapman <michapma@redhat.com>
+# Michael Chapman <michapma@redhat.com>, Tim Rozet <trozet@redhat.com>
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Apache License, Version 2.0
# which accompanies this distribution, and is available at
@@ -10,22 +10,40 @@
##############################################################################
for ROLE in $@; do
+ RAMDISK=${ROLE}-bm-deploy-ramdisk
+
if [ -f $ROLE-overcloud-full.qcow2 ]; then
+ echo "Uploading ${RAMDISK}"
+ glance image-create --name ${RAMDISK} --disk-format ari --container-format ari --file ${ROLE}-ironic-python-agent.initramfs --is-public True
echo "Uploading $ROLE-overcloud-full.qcow2 "
KERNEL=$(glance image-show overcloud-full | grep 'kernel_id' | cut -d '|' -f 3 | xargs)
- RAMDISK=$(glance image-show overcloud-full | grep 'ramdisk_id' | cut -d '|' -f 3 | xargs)
- glance image-create --name $ROLE-overcloud-full --disk-format qcow2 --file $ROLE-overcloud-full.qcow2 --container-format bare --property ramdisk_id=$RAMDISK --property kernel_id=$KERNEL
+ RAMDISK_ID=$(glance image-show ${RAMDISK} | grep id | awk {'print $4'})
+ glance image-create --name $ROLE-overcloud-full --disk-format qcow2 --file $ROLE-overcloud-full.qcow2 --container-format bare --property ramdisk_id=$RAMDISK_ID --property kernel_id=$KERNEL --is-public True
fi
if [ "$ROLE" == "Controller" ]; then
sed -i "s/overcloud-full/Controller-overcloud-full/" opnfv-environment.yaml
+ sed -i '/OvercloudControlFlavor:/c\ OvercloudControlFlavor: control' opnfv-environment.yaml
fi
if [ "$ROLE" == "Compute" ]; then
sudo sed -i "s/NovaImage: .*/NovaImage: Compute-overcloud-full/" /usr/share/openstack-tripleo-heat-templates/environments/numa.yaml
+ sudo sed -i '/OvercloudComputeFlavor:/c\ OvercloudComputeFlavor: compute' /usr/share/openstack-tripleo-heat-templates/environments/numa.yaml
fi
if [ "$ROLE" == "BlockStorage" ]; then
sudo sed -i "s/BlockStorageImage: .*/BlockStorageImage: BlockStorage-overcloud-full/" /usr/share/openstack-tripleo-heat-templates/environments/numa.yaml
fi
+
+ RAMDISK_ID=$(glance image-show ${RAMDISK} | grep id | awk {'print $4'})
+ nodes=$(ironic node-list | awk {'print $2'} | grep -Eo [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})
+ role=$(echo $ROLE | awk '{print tolower($0)}')
+ if [ "$role" == "controller" ]; then
+ role="control"
+ fi
+ for node in $nodes; do
+ if ironic node-show $node | grep profile:${role}; then
+ ironic node-update $node replace driver_info/deploy_ramdisk=${RAMDISK_ID}
+ fi
+ done
done
diff --git a/build/undercloud.sh b/build/undercloud.sh
index 04c2667f..f2e98795 100755
--- a/build/undercloud.sh
+++ b/build/undercloud.sh
@@ -70,9 +70,15 @@ LIBGUESTFS_BACKEND=direct virt-customize \
--upload ../virtual-environment.yaml:/home/stack/ \
-a undercloud.qcow2
+# Add custom IPA to allow kernel params
+wget https://raw.githubusercontent.com/trozet/ironic-python-agent/opnfv_kernel/ironic_python_agent/extensions/image.py
+python3.4 -c 'import py_compile; py_compile.compile("image.py", cfile="image.pyc")'
+
# Add performance image scripts
LIBGUESTFS_BACKEND=direct virt-customize --upload ../build_perf_image.sh:/home/stack \
--upload ../set_perf_images.sh:/home/stack \
+ --upload image.py:/root \
+ --upload image.pyc:/root \
-a undercloud.qcow2
popd > /dev/null
diff --git a/ci/PR_revision.log b/ci/PR_revision.log
index e20a8ceb..5fd8dad0 100644
--- a/ci/PR_revision.log
+++ b/ci/PR_revision.log
@@ -4,3 +4,4 @@
#PR number, PR Title
15,Add sleep to galera and mongodb service start
18,Fix sql race condition
+21,Serialize db_sync calls and increase sql-sleep timer \ No newline at end of file
diff --git a/ci/build.sh b/ci/build.sh
index dd9f9fd1..1bd96d53 100755
--- a/ci/build.sh
+++ b/ci/build.sh
@@ -34,6 +34,7 @@ BUILD_BASE=$(readlink -e ../build/)
CACHE_DEST=""
CACHE_DIR="cache"
CACHE_NAME="apex-cache"
+PYTHON_TESTS="TRUE"
MAKE_TARGETS="images"
REQUIRED_PKGS="rpm-build python-docutils"
@@ -63,6 +64,11 @@ parse_cmdline() {
echo "Buiding opnfv-apex RPMs"
shift 1
;;
+ --skip-python-tests )
+ PYTHON_TESTS="FALSE"
+ echo "Skipping Python Tests"
+ shift 1
+ ;;
--debug )
debug="TRUE"
echo "Enable debug output"
@@ -145,6 +151,20 @@ if ! rpm -q python34-devel > /dev/null; then
fi
fi
+if [ "$PYTHON_TESTS" == "TRUE" ]; then
+ # Make sure coverage is installed
+ if ! python3 -c "import coverage" &> /dev/null; then sudo easy_install-3.4 coverage; fi
+
+ run_make python-tests
+ pushd ../tests/ > /dev/null
+ percent=$(coverage3 report --include '*lib/python/*' -m | grep TOTAL | tr -s ' ' | awk '{ print $4 }' | cut -d % -f 1)
+ if [[ percent -lt 80 ]]; then
+ echo "Python Coverage: $percent"
+ echo "WARNING: Does not meet 80% requirement"
+ fi
+ popd
+fi
+
# Execute make against targets
for t in $MAKE_TARGETS; do
run_make $t
diff --git a/ci/clean.sh b/ci/clean.sh
index b898fc9c..b7f10582 100755
--- a/ci/clean.sh
+++ b/ci/clean.sh
@@ -66,4 +66,7 @@ sed -i '/virtual-power-key/d' /root/.ssh/authorized_keys
# force storage cleanup
virsh pool-refresh default
+# remove temporary files
+rm -f /tmp/network-environment.yaml
+
echo "Cleanup Completed"
diff --git a/ci/deploy.sh b/ci/deploy.sh
index 6ccd4c8c..6510053e 100755
--- a/ci/deploy.sh
+++ b/ci/deploy.sh
@@ -535,6 +535,13 @@ EOF
#virsh vol-list default | grep baremetal${i} 2>&1> /dev/null || virsh vol-create-as default baremetal${i}.qcow2 41G --format qcow2
mac=$(virsh domiflist baremetal${i} | grep admin_network | awk '{ print $5 }')
+ if [ "$VM_COMPUTES" -gt 0 ]; then
+ capability="profile:compute"
+ VM_COMPUTES=$((VM_COMPUTES - 1))
+ else
+ capability="profile:control"
+ fi
+
cat >> $CONFIG/instackenv-virt.json << EOF
{
"pm_addr": "192.168.122.1",
@@ -547,7 +554,8 @@ EOF
"cpu": "$vcpus",
"memory": "$ramsize",
"disk": "41",
- "arch": "x86_64"
+ "arch": "x86_64",
+ "capabilities": "$capability"
},
EOF
done
@@ -567,6 +575,12 @@ EOF
"ssh-user": "root"
}
EOF
+ #Overwrite the tripleo-inclubator domain.xml with our own, keeping a backup.
+ if [ ! -f /usr/share/tripleo/templates/domain.xml.bak ]; then
+ /usr/bin/mv -f /usr/share/tripleo/templates/domain.xml /usr/share/tripleo/templates/domain.xml.bak
+ fi
+
+ /usr/bin/cp -f $LIB/installer/domain.xml /usr/share/tripleo/templates/domain.xml
}
##Create virtual nodes in virsh
@@ -789,6 +803,12 @@ function undercloud_prep_overcloud_deploy {
exit 1
fi
+ # Handle different dataplanes
+ if [ "${deploy_options_array['dataplane']}" != 'ovs']; then
+ echo "${red}ovs is the only currently available dataplane. ${deploy_options_array['dataplane']} not implemented${reset}"
+ exit 1
+ fi
+
# Make sure the correct overcloud image is available
if [ ! -f $RESOURCES/overcloud-full-${SDN_IMAGE}.qcow2 ]; then
echo "${red} $RESOURCES/overcloud-full-${SDN_IMAGE}.qcow2 is required to execute your deployment."
@@ -801,14 +821,74 @@ function undercloud_prep_overcloud_deploy {
ssh -T ${SSH_OPTIONS[@]} "stack@$UNDERCLOUD" "rm -f overcloud-full.qcow2"
scp ${SSH_OPTIONS[@]} $RESOURCES/overcloud-full-${SDN_IMAGE}.qcow2 "stack@$UNDERCLOUD":overcloud-full.qcow2
- # Push performance options to subscript to modify per-role images as needed
- for option in "${performance_options[@]}" ; do
- echo -e "${blue}Setting performance option $option${reset}"
- ssh -T ${SSH_OPTIONS[@]} "stack@$UNDERCLOUD" "bash build_perf_image.sh $option"
- done
+ # Install ovs-dpdk inside the overcloud image if it is enabled.
+ if [ "${deploy_options_array['dataplane']}" == 'ovs_dpdk' ]; then
+ # install dpdk packages before ovs
+ echo -e "${blue}INFO: Enabling kernel modules for dpdk inside overcloud image${reset}"
+
+ ssh -T ${SSH_OPTIONS[@]} "stack@$UNDERCLOUD" <<EOI
+ cat << EOF > vfio_pci.modules
+#!/bin/bash
+exec /sbin/modprobe vfio_pci >/dev/null 2>&1
+EOF
+
+ cat << EOF > uio_pci_generic.modules
+#!/bin/bash
+exec /sbin/modprobe uio_pci_generic >/dev/null 2>&1
+EOF
+
+ LIBGUESTFS_BACKEND=direct virt-customize --upload vfio_pci.modules:/etc/sysconfig/modules/ \
+ --upload uio_pci_generic.modules:/etc/sysconfig/modules/ \
+ --run-command "chmod 0755 /etc/sysconfig/modules/vfio_pci.modules" \
+ --run-command "chmod 0755 /etc/sysconfig/modules/uio_pci_generic.modules" \
+ -a overcloud-full.qcow2
+EOI
+
+ fi
# Add performance deploy options if they have been set
if [ ! -z "${deploy_options_array['performance']}" ]; then
+
+ # Remove previous kernel args files per role
+ ssh -T ${SSH_OPTIONS[@]} "stack@$UNDERCLOUD" "rm -f Compute-kernel_params.txt"
+ ssh -T ${SSH_OPTIONS[@]} "stack@$UNDERCLOUD" "rm -f Controller-kernel_params.txt"
+
+ # Push performance options to subscript to modify per-role images as needed
+ for option in "${performance_options[@]}" ; do
+ echo -e "${blue}Setting performance option $option${reset}"
+ ssh -T ${SSH_OPTIONS[@]} "stack@$UNDERCLOUD" "bash build_perf_image.sh $option"
+ done
+
+ # Build IPA kernel option ramdisks
+ ssh -T ${SSH_OPTIONS[@]} "root@$UNDERCLOUD" <<EOI
+/bin/cp -f /home/stack/ironic-python-agent.initramfs /root/
+mkdir -p ipa/
+pushd ipa
+gunzip -c ../ironic-python-agent.initramfs | cpio -i
+if [ ! -f /home/stack/Compute-kernel_params.txt ]; then
+ touch /home/stack/Compute-kernel_params.txt
+ chown stack /home/stack/Compute-kernel_params.txt
+fi
+/bin/cp -f /home/stack/Compute-kernel_params.txt tmp/kernel_params.txt
+echo "Compute params set: "
+cat tmp/kernel_params.txt
+/bin/cp -f /root/image.py usr/lib/python2.7/site-packages/ironic_python_agent/extensions/image.py
+/bin/cp -f /root/image.pyc usr/lib/python2.7/site-packages/ironic_python_agent/extensions/image.pyc
+find . | cpio -o -H newc | gzip > /home/stack/Compute-ironic-python-agent.initramfs
+chown stack /home/stack/Compute-ironic-python-agent.initramfs
+if [ ! -f /home/stack/Controller-kernel_params.txt ]; then
+ touch /home/stack/Controller-kernel_params.txt
+ chown stack /home/stack/Controller-kernel_params.txt
+fi
+/bin/cp -f /home/stack/Controller-kernel_params.txt tmp/kernel_params.txt
+echo "Controller params set: "
+cat tmp/kernel_params.txt
+find . | cpio -o -H newc | gzip > /home/stack/Controller-ironic-python-agent.initramfs
+chown stack /home/stack/Controller-ironic-python-agent.initramfs
+popd
+/bin/rm -rf ipa/
+EOI
+
DEPLOY_OPTIONS+=" -e /usr/share/openstack-tripleo-heat-templates/environments/numa.yaml"
fi
@@ -864,11 +944,10 @@ set -o errexit
echo "Uploading overcloud glance images"
openstack overcloud image upload
-bash -x set_perf_images.sh ${performance_roles[@]}
-
echo "Configuring undercloud and discovering nodes"
openstack baremetal import --json instackenv.json
openstack baremetal configure boot
+bash -x set_perf_images.sh ${performance_roles[@]}
#if [[ -z "$virtual" ]]; then
# openstack baremetal introspection bulk start
#fi
diff --git a/config/deploy/os-nosdn-ovs-ha.yaml b/config/deploy/os-nosdn-ovs-ha.yaml
new file mode 100644
index 00000000..b1715869
--- /dev/null
+++ b/config/deploy/os-nosdn-ovs-ha.yaml
@@ -0,0 +1,24 @@
+global_params:
+ ha_enabled: true
+
+deploy_options:
+ sdn_controller: false
+ sdn_l3: false
+ tacker: false
+ congress: false
+ sfc: false
+ vpn: false
+ dataplane: ovs_dpdk
+ performance:
+ Controller:
+ kernel:
+ hugepages: 1024
+ hugepagesz: 2M
+ Compute:
+ nova:
+ libvirtpin: 1
+ kernel:
+ hugepagesz: 2M
+ hugepages: 1024
+ intel_iommu: 'on'
+ iommu: pt
diff --git a/config/deploy/os-nosdn-ovs-noha.yaml b/config/deploy/os-nosdn-ovs-noha.yaml
new file mode 100644
index 00000000..ea6b4e0e
--- /dev/null
+++ b/config/deploy/os-nosdn-ovs-noha.yaml
@@ -0,0 +1,24 @@
+global_params:
+ ha_enabled: false
+
+deploy_options:
+ sdn_controller: false
+ sdn_l3: false
+ tacker: false
+ congress: false
+ sfc: false
+ vpn: false
+ dataplane: ovs_dpdk
+ performance:
+ Controller:
+ kernel:
+ hugepagesz: 2M
+ hugepages: 1024
+ Compute:
+ nova:
+ libvirtpin: 1
+ kernel:
+ hugepagesz: 2M
+ hugepages: 1024
+ intel_iommu: 'on'
+ iommu: pt
diff --git a/lib/installer/domain.xml b/lib/installer/domain.xml
new file mode 100644
index 00000000..c710e561
--- /dev/null
+++ b/lib/installer/domain.xml
@@ -0,0 +1,36 @@
+<domain type='%(engine)s'>
+ <name>%(name)s</name>
+ <memory unit='KiB'>%(memory)s</memory>
+ <vcpu>%(cpus)s</vcpu>
+ <cpu mode='host-passthrough'/>
+ <os>
+ <type arch='%(arch)s'>hvm</type>
+ <boot dev='%(bootdev)s'/>
+ <bootmenu enable='no'/>
+ </os>
+ <features>
+ <acpi/>
+ <apic/>
+ <pae/>
+ </features>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>restart</on_crash>
+ <devices>
+ <controller type='scsi' model='virtio-scsi' index='0'/>
+ <disk type='file' device='disk'>
+ <driver name='qemu' type='qcow2' cache='unsafe'/>
+ <source file='%(imagefile)s'/>
+ <target dev='sda' bus='%(diskbus)s'/>
+ </disk>
+ %(network)s
+ %(bm_network)s
+ %(enable_serial_console)s
+ <input type='mouse' bus='ps2'/>
+ <graphics type='vnc' port='-1' autoport='yes'/>
+ <video>
+ <model type='cirrus' vram='9216' heads='1'/>
+ </video>
+ </devices>
+</domain>
diff --git a/lib/python/apex/deploy_env.py b/lib/python/apex/deploy_env.py
index be8779a9..25e2d0a7 100644
--- a/lib/python/apex/deploy_env.py
+++ b/lib/python/apex/deploy_env.py
@@ -15,6 +15,7 @@ REQ_DEPLOY_SETTINGS = ['sdn_controller',
'sdn_l3',
'tacker',
'congress',
+ 'dataplane',
'sfc',
'vpn']
@@ -22,6 +23,7 @@ OPT_DEPLOY_SETTINGS = ['performance']
VALID_ROLES = ['Controller', 'Compute', 'ObjectStorage']
VALID_PERF_OPTS = ['kernel','nova']
+VALID_DATAPLANES = ['ovs','ovs_dpdk','fdio']
class DeploySettings:
"""
@@ -45,23 +47,33 @@ class DeploySettings:
if 'deploy_options' not in self.deploy_settings:
raise DeploySettingsException("No deploy options provided in"
- "deploy settings file")
+ " deploy settings file")
if 'global_params' not in self.deploy_settings:
raise DeploySettingsException("No global options provided in"
- "deploy settings file")
+ " deploy settings file")
deploy_options = self.deploy_settings['deploy_options']
if not isinstance(deploy_options, dict):
raise DeploySettingsException("deploy_options should be a list")
- for option in deploy_options:
- if option not in REQ_DEPLOY_SETTINGS + OPT_DEPLOY_SETTINGS:
+ for setting, value in deploy_options.items():
+ if setting not in REQ_DEPLOY_SETTINGS + OPT_DEPLOY_SETTINGS:
raise DeploySettingsException("Invalid deploy_option {} "
- "specified".format(option))
-
- for required_setting in REQ_DEPLOY_SETTINGS:
- if required_setting not in deploy_options:
- self.deploy_settings['deploy_options'][required] = False
+ "specified".format(setting))
+ if setting == 'dataplane':
+ if value not in VALID_DATAPLANES:
+ planes = ' '.join(VALID_DATAPLANES)
+ raise DeploySettingsException("Invalid dataplane {} "
+ "specified. Valid dataplanes:"
+ " {}".format(value,planes))
+
+
+ for req_set in REQ_DEPLOY_SETTINGS:
+ if req_set not in deploy_options:
+ if req_set == 'dataplane':
+ self.deploy_settings['deploy_options'][req_set] = 'ovs'
+ else:
+ self.deploy_settings['deploy_options'][req_set] = False
if 'performance' in deploy_options:
if not isinstance(deploy_options['performance'], dict):
diff --git a/lib/python/apex/ip_utils.py b/lib/python/apex/ip_utils.py
index d7099db5..f51f227a 100644
--- a/lib/python/apex/ip_utils.py
+++ b/lib/python/apex/ip_utils.py
@@ -56,7 +56,7 @@ def get_ip_range(start_offset=None, count=None, end_offset=None,
end_index = -1 - end_offset
else:
raise IPUtilsException("Argument error: must pass in exactly 2 of"
- "start_offset, end_offset and count")
+ " start_offset, end_offset and count")
start_ip = cidr[start_index]
end_ip = cidr[end_index]
@@ -77,7 +77,7 @@ def get_ip_range(start_offset=None, count=None, end_offset=None,
else:
raise IPUtilsException(
"Argument error: must pass in exactly 2 of"
- "start_offset, end_offset and count")
+ " start_offset, end_offset and count")
else:
if count and start_offset and not end_offset:
start_ip = network[start_offset]
@@ -91,7 +91,7 @@ def get_ip_range(start_offset=None, count=None, end_offset=None,
else:
raise IPUtilsException(
"Argument error: must pass in exactly 2 of"
- "start_offset, end_offset and count")
+ " start_offset, end_offset and count")
else:
raise IPUtilsException("Must pass in cidr or interface to generate"
diff --git a/tests/python-coverage.sh b/tests/python-coverage.sh
index ee471446..8de6157d 100755
--- a/tests/python-coverage.sh
+++ b/tests/python-coverage.sh
@@ -3,21 +3,63 @@ set -x
all_networks="admin_network private_network storage_network external_network"
# exercise help
-coverage-3.4 run ../lib/python/apex-python-utils.py -l /dev/null > /dev/null
+coverage3 run ../lib/python/apex-python-utils.py -l /dev/null > /dev/null
# exercise parse-net-settings
# throw debug on the first to exercise it
-coverage-3.4 run -a ../lib/python/apex-python-utils.py --debug parse-net-settings -s ../config/network/network_settings.yaml -i True -e ../build/network-environment.yaml> /dev/null
+coverage3 run -a ../lib/python/apex-python-utils.py --debug parse-net-settings -s ../config/network/network_settings.yaml -i True -e ../build/network-environment.yaml > /dev/null
# exercise proper nic-template runs
-coverage-3.4 run -a ../lib/python/apex-python-utils.py -l /dev/null nic-template -t ../config/network/network_settings.yaml -n "$all_networks" -e interface -af 4 > /dev/null
-coverage-3.4 run -a ../lib/python/apex-python-utils.py -l /dev/null nic-template -t ../config/network/network_settings.yaml -n "$all_networks" -e interface -af 6 > /dev/null
-coverage-3.4 run -a ../lib/python/apex-python-utils.py -l /dev/null nic-template -t ../config/network/network_settings.yaml -n "$all_networks" -e br-ex -af 4 > /dev/null
-coverage-3.4 run -a ../lib/python/apex-python-utils.py -l /dev/null nic-template -t ../config/network/network_settings.yaml -n "$all_networks" -e br-ex -af 6 > /dev/null
+coverage3 run -a ../lib/python/apex-python-utils.py -l /dev/null nic-template -t ../config/network/network_settings.yaml -n "$all_networks" -e interface -af 4 > /dev/null
+coverage3 run -a ../lib/python/apex-python-utils.py -l /dev/null nic-template -t ../config/network/network_settings.yaml -n "$all_networks" -e interface -af 6 > /dev/null
+coverage3 run -a ../lib/python/apex-python-utils.py -l /dev/null nic-template -t ../config/network/network_settings.yaml -n "$all_networks" -e br-ex -af 4 > /dev/null
+coverage3 run -a ../lib/python/apex-python-utils.py -l /dev/null nic-template -t ../config/network/network_settings.yaml -n "$all_networks" -e br-ex -af 6 > /dev/null
# exercise find-ip
-coverage-3.4 run -a ../lib/python/apex-python-utils.py -l /dev/null find-ip -i $(ip a | grep 2: | cut -d \ -f 2 | head -n 1 | cut -d : -f 1) > /dev/null
+coverage3 run -a ../lib/python/apex-python-utils.py -l /dev/null find-ip -i $(ip a | grep 2: | cut -d \ -f 2 | head -n 1 | cut -d : -f 1) > /dev/null
+
+# exercise parse-deploy-settings
+coverage3 run -a ../lib/python/apex-python-utils.py -l /dev/null parse-deploy-settings -f ../config/deploy/os-nosdn-nofeature-noha.yaml > /dev/null
+coverage3 run -a ../lib/python/apex-python-utils.py -l /dev/null parse-deploy-settings -f ../config/deploy/os-nosdn-performance-ha.yaml > /dev/null
+
+# exercise parse-deploy-settings errors
+echo "global_params:" > /tmp/python-coverage.test
+coverage3 run -a ../lib/python/apex-python-utils.py -l /dev/null parse-deploy-settings -f /tmp/python-coverage.test &> /dev/null
+echo "deploy_options: string" > /tmp/python-coverage.test
+coverage3 run -a ../lib/python/apex-python-utils.py -l /dev/null parse-deploy-settings -f /tmp/python-coverage.test &> /dev/null
+echo "global_params:" >> /tmp/python-coverage.test
+coverage3 run -a ../lib/python/apex-python-utils.py -l /dev/null parse-deploy-settings -f /tmp/python-coverage.test &> /dev/null
+cat > /tmp/python-coverage.test << EOF
+global_params:
+deploy_options:
+ error: error
+EOF
+coverage3 run -a ../lib/python/apex-python-utils.py -l /dev/null parse-deploy-settings -f /tmp/python-coverage.test &> /dev/null
+cat > /tmp/python-coverage.test << EOF
+global_params:
+deploy_options:
+ performance: string
+EOF
+coverage3 run -a ../lib/python/apex-python-utils.py -l /dev/null parse-deploy-settings -f /tmp/python-coverage.test &> /dev/null
+cat > /tmp/python-coverage.test << EOF
+global_params:
+deploy_options:
+ performance:
+ error: error
+EOF
+coverage3 run -a ../lib/python/apex-python-utils.py -l /dev/null parse-deploy-settings -f /tmp/python-coverage.test &> /dev/null
+cat > /tmp/python-coverage.test << EOF
+global_params:
+deploy_options:
+ performance:
+ Controller:
+ error: error
+EOF
+coverage3 run -a ../lib/python/apex-python-utils.py -l /dev/null parse-deploy-settings -f /tmp/python-coverage.test &> /dev/null
+
+# coverage for ip_utils
+PYTHONPATH=../lib/python/ coverage3 run -a python_coverage_ip_utils.py $(ip r | grep default | awk '{ print $5 }')
# generate reports
-coverage-3.4 report --include '*lib/python/*' -m
-coverage-3.4 html --include '*lib/python/*'
+coverage3 html --include '*lib/python/*'
+coverage3 report --include '*lib/python/*' -m
diff --git a/tests/python_coverage_ip_utils.py b/tests/python_coverage_ip_utils.py
new file mode 100644
index 00000000..35280c18
--- /dev/null
+++ b/tests/python_coverage_ip_utils.py
@@ -0,0 +1,25 @@
+import sys
+from apex import ip_utils
+
+iface = ip_utils.get_interface(sys.argv[1])
+
+erroring_tests = (
+ "ip_utils.get_interface('')",
+ "ip_utils.get_interface('lo', address_family=0)",
+ "ip_utils.get_interface('lo', address_family=6)",
+ "ip_utils.get_interface('lo')",
+ "ip_utils.get_ip_range()",
+ "ip_utils.get_ip_range(interface=iface)")
+
+for t in erroring_tests:
+ try:
+ eval(t)
+ except:
+ pass
+
+ip_utils.find_gateway(interface=iface)
+ip_utils.get_ip(1, cidr="10.10.10.0/24")
+ip_utils.get_ip(1, interface=iface)
+ip_utils.get_ip_range(interface=iface, start_offset=1, end_offset=20)
+ip_utils.get_ip_range(interface=iface, start_offset=1, count=10)
+ip_utils.get_ip_range(interface=iface, end_offset=20, count=10)