mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-09-20 00:07:55 +00:00
Merge pull request #416 from crobinso/tests-dev-mode
tests: Improve running test_images.sh locally
This commit is contained in:
@@ -8,9 +8,15 @@ initrd images for all supported distributions and then tests them to ensure a
|
|||||||
Kata Container can be created with each.
|
Kata Container can be created with each.
|
||||||
|
|
||||||
Before the build phase, the test script installs the Docker container manager
|
Before the build phase, the test script installs the Docker container manager
|
||||||
and all the Kata components required to run test containers. This step can be
|
and all the Kata components required to run test containers. Individual tests
|
||||||
skipped by setting the environment variable `KATA_DEV_MODE` to a non-empty
|
will also alter host `kata-runtime` and `docker` service configuration as needed.
|
||||||
value.
|
|
||||||
|
All host config editing can be skipped by setting the environment variable
|
||||||
|
`KATA_DEV_MODE` to a non-empty value. In this mode, image/initrd targets
|
||||||
|
will be built but not runtime tested; If your host is configured to have
|
||||||
|
`kata-runtime` set as the default docker runtime, you will need to switch
|
||||||
|
to a runtime like `runc`/`crun` so the `docker build` test commands work
|
||||||
|
correctly.
|
||||||
|
|
||||||
```
|
```
|
||||||
$ ./test_images.sh
|
$ ./test_images.sh
|
||||||
|
@@ -4,10 +4,14 @@
|
|||||||
#
|
#
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
set -euo pipefail
|
set -o errexit
|
||||||
|
set -o nounset
|
||||||
|
set -o pipefail
|
||||||
|
[ -n "${DEBUG:-}" ] && set -o xtrace
|
||||||
|
|
||||||
readonly script_dir="$(dirname $(readlink -f $0))"
|
readonly script_dir="$(dirname $(readlink -f $0))"
|
||||||
readonly script_name=${0##*/}
|
readonly script_name=${0##*/}
|
||||||
|
readonly project_dir="$(dirname ${script_dir})"
|
||||||
readonly tmp_dir=$(mktemp -t -d osbuilder-test.XXXXXXX)
|
readonly tmp_dir=$(mktemp -t -d osbuilder-test.XXXXXXX)
|
||||||
readonly tmp_rootfs="${tmp_dir}/rootfs-osbuilder"
|
readonly tmp_rootfs="${tmp_dir}/rootfs-osbuilder"
|
||||||
readonly images_dir="${tmp_dir}/images"
|
readonly images_dir="${tmp_dir}/images"
|
||||||
@@ -16,22 +20,18 @@ readonly docker_image="busybox"
|
|||||||
readonly systemd_docker_config_file="/etc/systemd/system/docker.service.d/kata-containers.conf"
|
readonly systemd_docker_config_file="/etc/systemd/system/docker.service.d/kata-containers.conf"
|
||||||
readonly sysconfig_docker_config_file="/etc/sysconfig/docker"
|
readonly sysconfig_docker_config_file="/etc/sysconfig/docker"
|
||||||
readonly tests_repo="github.com/kata-containers/tests"
|
readonly tests_repo="github.com/kata-containers/tests"
|
||||||
readonly tests_repo_dir="${script_dir}/../../tests"
|
readonly tests_repo_dir="${project_dir}/../tests"
|
||||||
readonly mgr="${tests_repo_dir}/cmd/kata-manager/kata-manager.sh"
|
readonly mgr="${tests_repo_dir}/cmd/kata-manager/kata-manager.sh"
|
||||||
readonly test_config=${script_dir}/test_config.sh
|
readonly test_config=${script_dir}/test_config.sh
|
||||||
readonly rootfs_builder=${script_dir}/../rootfs-builder/rootfs.sh
|
readonly rootfs_builder=${project_dir}/rootfs-builder/rootfs.sh
|
||||||
|
readonly DOCKER_RUNTIME=${DOCKER_RUNTIME:-runc}
|
||||||
readonly RUNTIME=${RUNTIME:-kata-runtime}
|
readonly RUNTIME=${RUNTIME:-kata-runtime}
|
||||||
readonly MACHINE_TYPE=`uname -m`
|
readonly MACHINE_TYPE=`uname -m`
|
||||||
readonly CI=${CI:-}
|
readonly CI=${CI:-}
|
||||||
readonly KATA_HYPERVISOR="${KATA_HYPERVISOR:-}"
|
readonly KATA_HYPERVISOR="${KATA_HYPERVISOR:-}"
|
||||||
|
readonly KATA_DEV_MODE="${KATA_DEV_MODE:-}"
|
||||||
readonly ci_results_dir="/var/osbuilder/tests"
|
readonly ci_results_dir="/var/osbuilder/tests"
|
||||||
readonly dracut_dir=${script_dir}/../dracut
|
readonly dracut_dir=${project_dir}/dracut
|
||||||
|
|
||||||
# all distro tests must have this prefix
|
|
||||||
readonly test_func_prefix="test_distro_"
|
|
||||||
|
|
||||||
# "docker build" does not work with a VM-based runtime
|
|
||||||
readonly docker_build_runtime="runc"
|
|
||||||
|
|
||||||
build_images=1
|
build_images=1
|
||||||
build_initrds=1
|
build_initrds=1
|
||||||
@@ -49,7 +49,7 @@ typeset -A built_initrds
|
|||||||
typeset -A showKataRunFailure=
|
typeset -A showKataRunFailure=
|
||||||
|
|
||||||
source ${test_config}
|
source ${test_config}
|
||||||
source "${script_dir}/../scripts/lib.sh"
|
source "${project_dir}/scripts/lib.sh"
|
||||||
|
|
||||||
usage()
|
usage()
|
||||||
{
|
{
|
||||||
@@ -144,6 +144,15 @@ show_stats()
|
|||||||
rm -f "${tmpfile}"
|
rm -f "${tmpfile}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Run a kata-manager.sh command
|
||||||
|
run_mgr()
|
||||||
|
{
|
||||||
|
[ -n "${KATA_DEV_MODE:-}" ] && return
|
||||||
|
silent_run $mgr $*
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
exit_handler()
|
exit_handler()
|
||||||
{
|
{
|
||||||
if [ "$?" -eq 0 ]
|
if [ "$?" -eq 0 ]
|
||||||
@@ -157,7 +166,7 @@ exit_handler()
|
|||||||
rm -rf "${tmp_dir}"
|
rm -rf "${tmp_dir}"
|
||||||
|
|
||||||
# Restore the default image in config file
|
# Restore the default image in config file
|
||||||
[ -n "${TRAVIS:-}" ] || silent_run $mgr configure-image
|
[ -n "${TRAVIS:-}" ] || run_mgr configure-image
|
||||||
|
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
@@ -185,7 +194,7 @@ exit_handler()
|
|||||||
|
|
||||||
if [ -z "${showKataRunFailure}" ]; then
|
if [ -z "${showKataRunFailure}" ]; then
|
||||||
# Restore the default image in config file
|
# Restore the default image in config file
|
||||||
silent_run $mgr configure-image
|
run_mgr configure-image
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -202,7 +211,7 @@ exit_handler()
|
|||||||
sudo -E ps -efwww | egrep "docker|kata" >&2
|
sudo -E ps -efwww | egrep "docker|kata" >&2
|
||||||
|
|
||||||
# Restore the default image in config file
|
# Restore the default image in config file
|
||||||
silent_run $mgr configure-image
|
run_mgr configure-image
|
||||||
}
|
}
|
||||||
|
|
||||||
die()
|
die()
|
||||||
@@ -231,7 +240,11 @@ silent_run()
|
|||||||
{
|
{
|
||||||
typeset -a commandLine=("$@")
|
typeset -a commandLine=("$@")
|
||||||
info "running: ${commandLine[@]}"
|
info "running: ${commandLine[@]}"
|
||||||
chronic "${commandLine[@]}"
|
if [ -z "${DEBUG:-}" ]; then
|
||||||
|
chronic "${commandLine[@]}"
|
||||||
|
else
|
||||||
|
"${commandLine[@]}"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -241,6 +254,8 @@ set_runtime()
|
|||||||
|
|
||||||
[ -z "$name" ] && die "need name"
|
[ -z "$name" ] && die "need name"
|
||||||
|
|
||||||
|
[ -n "${KATA_DEV_MODE}" ] && return
|
||||||
|
|
||||||
# Travis doesn't support VT-x
|
# Travis doesn't support VT-x
|
||||||
[ -n "${TRAVIS:-}" ] && return
|
[ -n "${TRAVIS:-}" ] && return
|
||||||
|
|
||||||
@@ -261,7 +276,6 @@ set_runtime()
|
|||||||
|
|
||||||
setup()
|
setup()
|
||||||
{
|
{
|
||||||
[ -z "$images_dir" ] && die "need images directory"
|
|
||||||
mkdir -p "${images_dir}"
|
mkdir -p "${images_dir}"
|
||||||
|
|
||||||
if [ -n "$CI" ]; then
|
if [ -n "$CI" ]; then
|
||||||
@@ -269,29 +283,23 @@ setup()
|
|||||||
sudo -E mkdir -p ${ci_results_dir}
|
sudo -E mkdir -p ${ci_results_dir}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
export USE_DOCKER=true
|
|
||||||
|
|
||||||
# Travis doesn't support VT-x
|
# Travis doesn't support VT-x
|
||||||
[ -n "${TRAVIS:-}" ] && return
|
[ -n "${TRAVIS:-}" ] && return
|
||||||
|
|
||||||
[ ! -d "${tests_repo_dir}" ] && git clone "https://${tests_repo}" "${tests_repo_dir}"
|
[ ! -d "${tests_repo_dir}" ] && git clone "https://${tests_repo}" "${tests_repo_dir}"
|
||||||
|
|
||||||
if [ -z "${KATA_DEV_MODE:-}" ]; then
|
if [ -z "${KATA_DEV_MODE}" ]; then
|
||||||
mkdir -p /etc/kata-containers/
|
mkdir -p /etc/kata-containers/
|
||||||
sudo cp -a /usr/share/defaults/kata-containers/configuration.toml /etc/kata-containers/configuration.toml
|
sudo cp -a /usr/share/defaults/kata-containers/configuration.toml /etc/kata-containers/configuration.toml
|
||||||
else
|
else
|
||||||
info "Running with KATA_DEV_MODE set, skipping installation of docker and kata packages"
|
info "Running with KATA_DEV_MODE set, skipping installation of docker and kata packages"
|
||||||
# Make sure docker & kata are available
|
|
||||||
command -v docker >/dev/null || die "docker cannot be found on your PATH"
|
|
||||||
local cfgRuntime=
|
|
||||||
cfgRuntime="$(docker info --format "{{(index .Runtimes \"${RUNTIME}\").Path}}")"
|
|
||||||
[ -n "$cfgRuntime" ] || die "${RUNTIME} is not a configured runtime for docker"
|
|
||||||
[ -x "$cfgRuntime" ] || die "docker ${RUNTIME} is linked to an invalid executable: $cfgRuntime"
|
|
||||||
fi
|
fi
|
||||||
silent_run $mgr enable-debug
|
run_mgr enable-debug
|
||||||
|
|
||||||
# Ensure "docker build" works
|
# "docker build" does not work with a VM-based runtime, and
|
||||||
set_runtime "${docker_build_runtime}"
|
# also does not accept a --runtime option, so our only
|
||||||
|
# option is to overwrite the system docker default runtime
|
||||||
|
set_runtime "${DOCKER_RUNTIME}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Fetches the distros test configuration from the distro-specific config.sh file.
|
# Fetches the distros test configuration from the distro-specific config.sh file.
|
||||||
@@ -347,6 +355,10 @@ get_distros_config()
|
|||||||
|
|
||||||
create_container()
|
create_container()
|
||||||
{
|
{
|
||||||
|
# If KATA_DEV_MODE is set, we don't have any way to point kata-runtime
|
||||||
|
# at the image/initrd to boot, so there's nothing to do
|
||||||
|
[ -n "${KATA_DEV_MODE}" ] && return
|
||||||
|
|
||||||
out=$(mktemp)
|
out=$(mktemp)
|
||||||
|
|
||||||
local file="/proc/version"
|
local file="/proc/version"
|
||||||
@@ -373,11 +385,11 @@ install_image_create_container()
|
|||||||
[ -n "${TRAVIS:-}" ] && return
|
[ -n "${TRAVIS:-}" ] && return
|
||||||
|
|
||||||
showKataRunFailure=1
|
showKataRunFailure=1
|
||||||
silent_run $mgr reset-config
|
run_mgr reset-config
|
||||||
if [ "${RUST_AGENT:-}" = "yes" ]; then
|
if [ "${RUST_AGENT:-}" = "yes" ]; then
|
||||||
silent_run $mgr enable-vsock
|
run_mgr enable-vsock
|
||||||
fi
|
fi
|
||||||
silent_run $mgr configure-image "$file"
|
run_mgr configure-image "$file"
|
||||||
create_container
|
create_container
|
||||||
showKataRunFailure=
|
showKataRunFailure=
|
||||||
}
|
}
|
||||||
@@ -393,11 +405,11 @@ install_initrd_create_container()
|
|||||||
[ -n "${TRAVIS:-}" ] && return
|
[ -n "${TRAVIS:-}" ] && return
|
||||||
|
|
||||||
showKataRunFailure=1
|
showKataRunFailure=1
|
||||||
silent_run $mgr reset-config
|
run_mgr reset-config
|
||||||
if [ "${RUST_AGENT:-}" = "yes" ]; then
|
if [ "${RUST_AGENT:-}" = "yes" ]; then
|
||||||
silent_run $mgr enable-vsock
|
run_mgr enable-vsock
|
||||||
fi
|
fi
|
||||||
silent_run $mgr configure-initrd "$file"
|
run_mgr configure-initrd "$file"
|
||||||
create_container
|
create_container
|
||||||
showKataRunFailure=
|
showKataRunFailure=
|
||||||
}
|
}
|
||||||
@@ -498,6 +510,7 @@ test_distros()
|
|||||||
get_distros_config "$distro"
|
get_distros_config "$distro"
|
||||||
local commonMakeVars=( \
|
local commonMakeVars=( \
|
||||||
USE_DOCKER=true \
|
USE_DOCKER=true \
|
||||||
|
DOCKER_RUNTIME="${DOCKER_RUNTIME}" \
|
||||||
ROOTFS_BUILD_DEST="$tmp_rootfs" \
|
ROOTFS_BUILD_DEST="$tmp_rootfs" \
|
||||||
IMAGES_BUILD_DEST="$images_dir" \
|
IMAGES_BUILD_DEST="$images_dir" \
|
||||||
DEBUG=1 )
|
DEBUG=1 )
|
||||||
@@ -623,6 +636,7 @@ test_dracut()
|
|||||||
local initrd_path="${images_dir}/kata-containers-initrd-dracut.img"
|
local initrd_path="${images_dir}/kata-containers-initrd-dracut.img"
|
||||||
local image_path="${images_dir}/kata-containers-image-dracut.img"
|
local image_path="${images_dir}/kata-containers-image-dracut.img"
|
||||||
local rootfs_path="${tmp_rootfs}/dracut_rootfs"
|
local rootfs_path="${tmp_rootfs}/dracut_rootfs"
|
||||||
|
local overlay_path="${tmp_rootfs}/dracut_overlay"
|
||||||
|
|
||||||
detect_go_version ||
|
detect_go_version ||
|
||||||
die "Could not detect the required Go version for AGENT_VERSION='${AGENT_VERSION:-master}'."
|
die "Could not detect the required Go version for AGENT_VERSION='${AGENT_VERSION:-master}'."
|
||||||
@@ -639,18 +653,26 @@ test_dracut()
|
|||||||
|
|
||||||
typeset -a dockerRunArgs=(\
|
typeset -a dockerRunArgs=(\
|
||||||
--rm \
|
--rm \
|
||||||
--runtime=runc \
|
--runtime="${DOCKER_RUNTIME}" \
|
||||||
-v "${images_dir}:${images_dir}" \
|
-v "${project_dir}":"${project_dir}" \
|
||||||
-v "${script_dir}/..":"${tmp_dir}" \
|
-v "${tmp_dir}":"${tmp_dir}" \
|
||||||
-v "${tmp_rootfs}:${tmp_rootfs}" \
|
|
||||||
-v /etc/localtime:/etc/localtime:ro \
|
-v /etc/localtime:/etc/localtime:ro \
|
||||||
dracut-test-osbuilder \
|
dracut-test-osbuilder \
|
||||||
)
|
)
|
||||||
typeset -a makeVars=(BUILD_METHOD=dracut TARGET_INITRD="${initrd_path}" TARGET_IMAGE=${image_path} TARGET_ROOTFS=${rootfs_path})
|
|
||||||
|
typeset -a makeVars=(\
|
||||||
|
BUILD_METHOD=dracut \
|
||||||
|
TARGET_INITRD="${initrd_path}" \
|
||||||
|
TARGET_IMAGE=${image_path} \
|
||||||
|
TARGET_ROOTFS=${rootfs_path} \
|
||||||
|
DRACUT_OVERLAY_DIR="${overlay_path}" \
|
||||||
|
USE_DOCKER=1 \
|
||||||
|
DOCKER_RUNTIME="${DOCKER_RUNTIME}" \
|
||||||
|
)
|
||||||
|
|
||||||
info "Making image for dracut inside a container"
|
info "Making image for dracut inside a container"
|
||||||
silent_run docker run ${dockerRunArgs[@]} make -C ${tmp_dir} ${makeVars[@]} rootfs
|
silent_run docker run ${dockerRunArgs[@]} make -C ${project_dir} ${makeVars[@]} rootfs
|
||||||
make_image USE_DOCKER=1 ${makeVars[@]}
|
make_image ${makeVars[@]}
|
||||||
local image_size=$(stat -c "%s" "${image_path}")
|
local image_size=$(stat -c "%s" "${image_path}")
|
||||||
local rootfs_size=$(get_rootfs_size "$rootfs_path")
|
local rootfs_size=$(get_rootfs_size "$rootfs_path")
|
||||||
built_images["dracut"]="${rootfs_size}:${image_size}"
|
built_images["dracut"]="${rootfs_size}:${image_size}"
|
||||||
@@ -659,7 +681,7 @@ test_dracut()
|
|||||||
|
|
||||||
if [ "$KATA_HYPERVISOR" != "firecracker" ]; then
|
if [ "$KATA_HYPERVISOR" != "firecracker" ]; then
|
||||||
info "Making initrd for dracut inside a container"
|
info "Making initrd for dracut inside a container"
|
||||||
silent_run docker run ${dockerRunArgs[@]} make -C ${tmp_dir} ${makeVars[@]} AGENT_INIT=yes clean initrd
|
silent_run docker run ${dockerRunArgs[@]} make -C ${project_dir} ${makeVars[@]} AGENT_INIT=yes clean initrd
|
||||||
local initrd_size=$(stat -c "%s" "${initrd_path}")
|
local initrd_size=$(stat -c "%s" "${initrd_path}")
|
||||||
built_initrds["dracut"]="${rootfs_size}:${initrd_size}"
|
built_initrds["dracut"]="${rootfs_size}:${initrd_size}"
|
||||||
install_initrd_create_container $initrd_path
|
install_initrd_create_container $initrd_path
|
||||||
|
Reference in New Issue
Block a user