diff options
-rw-r--r-- | build/Makefile | 9 | ||||
-rw-r--r-- | build/build_perf_image.sh | 4 | ||||
-rw-r--r-- | build/opnfv-apex-common.spec | 8 | ||||
-rw-r--r-- | build/opnfv-environment.yaml | 1 | ||||
-rw-r--r-- | build/set_perf_images.sh | 24 | ||||
-rwxr-xr-x | build/undercloud.sh | 6 | ||||
-rw-r--r-- | ci/PR_revision.log | 1 | ||||
-rwxr-xr-x | ci/build.sh | 20 | ||||
-rwxr-xr-x | ci/clean.sh | 3 | ||||
-rwxr-xr-x | ci/deploy.sh | 95 | ||||
-rw-r--r-- | config/deploy/os-nosdn-ovs-ha.yaml | 24 | ||||
-rw-r--r-- | config/deploy/os-nosdn-ovs-noha.yaml | 24 | ||||
-rw-r--r-- | lib/installer/domain.xml | 36 | ||||
-rw-r--r-- | lib/python/apex/deploy_env.py | 30 | ||||
-rw-r--r-- | lib/python/apex/ip_utils.py | 6 | ||||
-rwxr-xr-x | tests/python-coverage.sh | 60 | ||||
-rw-r--r-- | tests/python_coverage_ip_utils.py | 25 |
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) |