mirror of https://github.com/hashicorp/packer
via - create_options: a list of options passed to lxc-create - start_options: a list of options passed to lxc-start - attach_options: a list of options passed to lxc-attach Also extended existing LXC builder BATS tests to exercise the new builder options, and added website docs.pull/5530/head
parent
fe4d4648e6
commit
1f2135f65e
@ -1,40 +1,106 @@
|
||||
#!/usr/bin/env bats
|
||||
#
|
||||
# This tests the lxc builder. The teardown function will
|
||||
# delete any images in the output-lxc-* folders.
|
||||
# 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
|
||||
command -v lxc-create >/dev/null 2>&1 || {
|
||||
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-*
|
||||
}
|
||||
|
||||
@test "lxc: build centos minimal.json" {
|
||||
run packer build -var template_name=centos $FIXTURE_ROOT/minimal.json
|
||||
[ "$status" -eq 0 ]
|
||||
[ -f output-lxc-centos/rootfs.tar.gz ]
|
||||
[ -f output-lxc-centos/lxc-config ]
|
||||
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" {
|
||||
run packer build -var template_name=ubuntu -var template_parameters="SUITE=trusty" $FIXTURE_ROOT/minimal.json
|
||||
[ "$status" -eq 0 ]
|
||||
[ -f output-lxc-ubuntu/rootfs.tar.gz ]
|
||||
[ -f output-lxc-ubuntu/lxc-config ]
|
||||
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" {
|
||||
run packer build -var template_name=debian -var template_parameters="SUITE=jessie" $FIXTURE_ROOT/minimal.json
|
||||
[ "$status" -eq 0 ]
|
||||
[ -f output-lxc-debian/rootfs.tar.gz ]
|
||||
[ -f output-lxc-debian/lxc-config ]
|
||||
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"
|
||||
}
|
||||
|
||||
Loading…
Reference in new issue