packer-cn/test/builder_lxc.bats

107 lines
3.1 KiB
Bash

#!/usr/bin/env bats
#
# This tests the lxc builder by creating minimal containers and checking that
# custom lxc container configuration files are successfully applied. The
# teardown function will delete any images in the output-lxc-* folders along
# with the auto-generated lxc container configuration files and hook scripts.
#load test_helper
#fixtures builder-lxc
FIXTURE_ROOT="$BATS_TEST_DIRNAME/fixtures/builder-lxc"
have_command() {
command -v "$1" >/dev/null 2>&1
}
# Required parameters
have_command lxc-create || {
echo "'lxc-create' must be installed via the lxc (or lxc1 for ubuntu >=16.04) package" >&2
exit 1
}
DESTROY_HOOK_SCRIPT=$FIXTURE_ROOT/destroy-hook.sh
DESTROY_HOOK_LOG=$FIXTURE_ROOT/destroy-hook.log
printf > "$DESTROY_HOOK_SCRIPT" '
echo "$LXC_NAME" > "%s"
' "$DESTROY_HOOK_LOG"
chmod +x "$DESTROY_HOOK_SCRIPT"
INIT_CONFIG=$FIXTURE_ROOT/lxc.custom.conf
printf > "$INIT_CONFIG" '
lxc.hook.destroy = %s
' "$DESTROY_HOOK_SCRIPT"
teardown() {
for f in "$INIT_CONFIG" "$DESTROY_HOOK_SCRIPT" "$DESTROY_HOOK_LOG"; do
[ -e "$f" ] && rm -f "$f"
done
rm -rf output-lxc-*
}
assert_build() {
local template_name="$1"
shift
local build_status=0
run packer build -var template_name="$template_name" "$@"
[ "$status" -eq 0 ] || {
echo "${template_name} build exited badly: $status" >&2
echo "$output" >&2
build_status="$status"
}
for expected in "output-lxc-${template_name}"/{rootfs.tar.gz,lxc-config}; do
[ -f "$expected" ] || {
echo "missing expected artifact '${expected}'" >&2
build_status=1
}
done
return $build_status
}
assert_container_name() {
local container_name="$1"
[ -f "$DESTROY_HOOK_LOG" ] || {
echo "missing expected lxc.hook.destroy logfile '$DESTROY_HOOK_LOG'"
return 1
}
read -r lxc_name < "$DESTROY_HOOK_LOG"
[ "$lxc_name" = "$container_name" ]
}
@test "lxc: build centos minimal.json" {
have_command yum || skip "'yum' must be installed to build centos containers"
local container_name=packer-lxc-centos
assert_build centos -var init_config="$INIT_CONFIG" \
-var container_name="$container_name" \
$FIXTURE_ROOT/minimal.json
assert_container_name "$container_name"
}
@test "lxc: build trusty minimal.json" {
have_command debootstrap || skip "'debootstrap' must be installed to build ubuntu containers"
local container_name=packer-lxc-ubuntu
assert_build ubuntu -var init_config="$INIT_CONFIG" \
-var container_name="$container_name" \
-var template_parameters="SUITE=trusty" \
$FIXTURE_ROOT/minimal.json
assert_container_name "$container_name"
}
@test "lxc: build debian minimal.json" {
have_command debootstrap || skip "'debootstrap' must be installed to build debian containers"
local container_name=packer-lxc-debian
assert_build debian -var init_config="$INIT_CONFIG" \
-var container_name="$container_name" \
-var template_parameters="SUITE=jessie" \
$FIXTURE_ROOT/minimal.json
assert_container_name "$container_name"
}