X-Git-Url: https://gerrit.fd.io/r/gitweb?p=csit.git;a=blobdiff_plain;f=resources%2Flibraries%2Fbash%2Ffunction%2Fdevice.sh;h=8aeb221fd9ea6d873a22f119dcf3d0c995499528;hp=7363dc0df6b385fd9b88641a297ade287e267ab5;hb=956989a5ad8966c06cf3300c2e5edf3f46466edb;hpb=5f809dd2414d50fd6f229fc2ba2ff42d66df5dde diff --git a/resources/libraries/bash/function/device.sh b/resources/libraries/bash/function/device.sh index 7363dc0df6..8aeb221fd9 100644 --- a/resources/libraries/bash/function/device.sh +++ b/resources/libraries/bash/function/device.sh @@ -108,8 +108,8 @@ function bind_interfaces_to_driver () { function clean_environment () { - # Cleanup environment by removing topology containers and binding - # interfaces back to original driver. + # Cleanup environment by removing topology containers and shared volumes + # and binding interfaces back to original driver. # # Variables read: # - DCR_UUIDS - Docker Container UUIDs. @@ -124,6 +124,18 @@ function clean_environment () { # Kill docker containers. docker rm --force "${DCR_UUIDS[@]}" || die "Cleanup containers failed!" + # Check if some container is using volume and remove all the hanged + # containers before removing volume. Command will not fail in case there + # are no containers to remove. + docker rm --force $(docker ps -q --filter volume=${DCR_VOLUMES[dut1]}) || { + warn "Failed to remove hanged containers or nothing to remove!" + } + + # Remove DUT1 volume. + docker volume rm --force "${DCR_VOLUMES[dut1]}" || { + die "Failed to remove DUT1 volume!" + } + # Rebind interfaces back to kernel drivers. for ADDR in ${TG_PCIDEVS[@]}; do DRIVER="${TG_DRIVERS[0]}" @@ -420,8 +432,10 @@ function read_env_variables () { export "${param}" done declare -gA DCR_UUIDS + declare -gA DCR_VOLUMES DCR_UUIDS+=([tg]="${CSIT_TG_UUID}") DCR_UUIDS+=([dut1]="${CSIT_DUT1_UUID}") + DCR_VOLUMES+=([dut1]="${CSIT_DUT1_VOL}") TG_PCIDEVS=("${CSIT_TG_INTERFACES_PORT1_PCI}") TG_DRIVERS=("${CSIT_TG_INTERFACES_PORT1_DRV}") TG_PCIDEVS+=("${CSIT_TG_INTERFACES_PORT2_PCI}") @@ -465,6 +479,7 @@ function set_env_variables () { CSIT_DUT1_ARCH="$(uname -i)" || { die "Reading machine architecture failed!" } + CSIT_DUT1_VOL="${DCR_VOLUMES[dut1]}" CSIT_TG_INTERFACES_PORT1_MAC="${TG_NETMACS[0]}" CSIT_TG_INTERFACES_PORT1_PCI="${TG_PCIDEVS[0]}" CSIT_TG_INTERFACES_PORT1_DRV="${TG_DRIVERS[0]}" @@ -519,6 +534,8 @@ function start_topology_containers () { dcr_stc_params+="--volume /dev/vfio:/dev/vfio " # Mount nested_vm image to be able to run VM tests. dcr_stc_params+="--volume /var/lib/vm/vhost-nested.img:/var/lib/vm/vhost-nested.img " + # Mount docker.sock to be able to use docker deamon of the host. + dcr_stc_params+="--volume /var/run/docker.sock:/var/run/docker.sock " # Docker Container UUIDs. declare -gA DCR_UUIDS @@ -526,13 +543,25 @@ function start_topology_containers () { declare -gA DCR_PORTS # Docker Container PIDs (namespaces). declare -gA DCR_CPIDS + # Docker Container volumes with no relationship to the host. + declare -gA DCR_VOLUMES + + # Create DUT1 /tmp volume to be able to install VPP in "nested" container. + params=(--name DUT1_VOL_$(uuidgen)) + DCR_VOLUMES+=([dut1]="$(docker volume create "${params[@]}")") || { + die "Failed to create DUT1 /tmp volume!" + } + + # Mount DUT1_VOL as /tmp directory on DUT1 container + dcr_stc_params_dut1="--volume ${DCR_VOLUMES[dut1]}:/tmp " # Run TG and DUT1. As initial version we do support only 2-node. params=(${dcr_stc_params} --name csit-tg-$(uuidgen) ${dcr_image}) DCR_UUIDS+=([tg]="$(docker run "${params[@]}")") || { die "Failed to start TG docker container!" } - params=(${dcr_stc_params} --name csit-dut1-$(uuidgen) ${dcr_image}) + params=(${dcr_stc_params} ${dcr_stc_params_dut1} + --name csit-dut1-$(uuidgen) ${dcr_image}) DCR_UUIDS+=([dut1]="$(docker run "${params[@]}")") || { die "Failed to start DUT1 docker container!" }