1
0
mirror of https://github.com/lxc/incus.git synced 2026-02-05 09:46:19 +01:00
Files
incus/test/suites/storage_driver_linstor.sh

115 lines
7.2 KiB
Bash
Raw Normal View History

# shellcheck shell=sh
test_storage_driver_linstor() {
# shellcheck disable=2039,3043
local INCUS_STORAGE_DIR incus_backend
incus_backend=$(storage_backend "$INCUS_DIR")
if [ "$incus_backend" != "linstor" ]; then
return
fi
INCUS_STORAGE_DIR=$(mktemp -d -p "${TEST_DIR}" XXXXXXXXX)
chmod +x "${INCUS_STORAGE_DIR}"
spawn_incus "${INCUS_STORAGE_DIR}" false
linstor_preconfigure "${INCUS_STORAGE_DIR}"
(
set -e
# shellcheck disable=2030
INCUS_DIR="${INCUS_STORAGE_DIR}"
# shellcheck disable=SC1009
incus storage create "incustest-$(basename "${INCUS_DIR}")-pool1" linstor linstor.resource_group.place_count=1
# Set default storage pool for image import.
incus profile device add default root disk path="/" pool="incustest-$(basename "${INCUS_DIR}")-pool1"
# Import image into default storage pool.
ensure_import_testimage
# Test that no invalid LINSTOR storage pool configuration keys can be set.
! incus storage create "incustest-$(basename "${INCUS_DIR}")-invalid-linstor-pool-config" linstor lvm.thinpool_name=bla || false
! incus storage create "incustest-$(basename "${INCUS_DIR}")-invalid-linstor-pool-config" linstor lvm.use_thinpool=false || false
! incus storage create "incustest-$(basename "${INCUS_DIR}")-invalid-linstor-pool-config" linstor lvm.vg_name=bla || false
! incus storage create "incustest-$(basename "${INCUS_DIR}")-invalid-linstor-pool-config" linstor drbd.auto_diskful=bla || false
! incus storage create "incustest-$(basename "${INCUS_DIR}")-invalid-linstor-pool-config" linstor drbd.auto_diskful=1s || false
! incus storage create "incustest-$(basename "${INCUS_DIR}")-invalid-linstor-pool-config" linstor drbd.on_no_quorum=bla || false
! incus storage create "incustest-$(basename "${INCUS_DIR}")-invalid-linstor-pool-config" linstor drbd.auto_add_quorum_tiebreaker=bla || false
# Test that all valid LINSTOR storage pool configuration keys can be set.
incus storage create "incustest-$(basename "${INCUS_DIR}")-valid-linstor-pool-config" linstor linstor.resource_group.place_count=2 linstor.resource_group.storage_pool=foo linstor.volume.prefix=bar drbd.auto_diskful=1h drbd.on_no_quorum=io-error drbd.auto_add_quorum_tiebreaker=true
linstor resource-group list-properties "incustest-$(basename "${INCUS_DIR}")-valid-linstor-pool-config" | grep 'DrbdOptions/auto-diskful.*60'
linstor resource-group list-properties "incustest-$(basename "${INCUS_DIR}")-valid-linstor-pool-config" | grep 'DrbdOptions/Resource/on-no-quorum.*io-error'
linstor resource-group list-properties "incustest-$(basename "${INCUS_DIR}")-valid-linstor-pool-config" | grep 'DrbdOptions/auto-add-quorum-tiebreaker.*true'
incus storage delete "incustest-$(basename "${INCUS_DIR}")-valid-linstor-pool-config"
# Test that all valid LINSTOR volume configuration keys can be set (except DrbdOptions/Resource/on-no-quorum, which wont appear here).
incus storage volume create "incustest-$(basename "${INCUS_DIR}")-pool1" c3 drbd.auto_diskful=5m drbd.auto_add_quorum_tiebreaker=true
linstor -m resource-definition list | jq -e 'any(.[0][];
.props["DrbdOptions/auto-add-quorum-tiebreaker"] == "true" and
.props["DrbdOptions/auto-diskful"] == "300" and
.props["Aux/Incus/name"] == "incus-volume-default_c3")'
incus storage volume delete "incustest-$(basename "${INCUS_DIR}")-pool1" c3
# Muck around with some containers on our pool.
incus init testimage c1 -s "incustest-$(basename "${INCUS_DIR}")-pool1"
incus list -c b c1 | grep "incustest-$(basename "${INCUS_DIR}")-pool1"
incus launch testimage c2 -s "incustest-$(basename "${INCUS_DIR}")-pool1"
incus list -c b c2 | grep "incustest-$(basename "${INCUS_DIR}")-pool1"
incus init testimage a -s "incustest-$(basename "${INCUS_DIR}")-pool1"
incus copy a b
incus delete a
incus init testimage a -s "incustest-$(basename "${INCUS_DIR}")-pool1"
incus copy a c
incus delete a
incus delete b
incus delete c
incus storage volume create "incustest-$(basename "${INCUS_DIR}")-pool1" c1
incus storage volume attach "incustest-$(basename "${INCUS_DIR}")-pool1" c1 c1 testDevice /opt
! incus storage volume attach "incustest-$(basename "${INCUS_DIR}")-pool1" c1 c1 testDevice2 /opt || false
incus storage volume detach "incustest-$(basename "${INCUS_DIR}")-pool1" c1 c1
incus storage volume attach "incustest-$(basename "${INCUS_DIR}")-pool1" custom/c1 c1 testDevice /opt
! incus storage volume attach "incustest-$(basename "${INCUS_DIR}")-pool1" custom/c1 c1 testDevice2 /opt || false
incus storage volume detach "incustest-$(basename "${INCUS_DIR}")-pool1" c1 c1
incus storage volume create "incustest-$(basename "${INCUS_DIR}")-pool1" c2
incus storage volume attach "incustest-$(basename "${INCUS_DIR}")-pool1" c2 c2 testDevice /opt
! incus storage volume attach "incustest-$(basename "${INCUS_DIR}")-pool1" c2 c2 testDevice2 /opt || false
incus storage volume detach "incustest-$(basename "${INCUS_DIR}")-pool1" c2 c2
incus storage volume attach "incustest-$(basename "${INCUS_DIR}")-pool1" c2 c2 testDevice /opt
! incus storage volume attach "incustest-$(basename "${INCUS_DIR}")-pool1" c2 c2 testDevice2 /opt || false
incus storage volume detach "incustest-$(basename "${INCUS_DIR}")-pool1" c2 c2
incus delete -f c1
incus delete -f c2
incus storage volume set "incustest-$(basename "${INCUS_DIR}")-pool1" c1 size 500MiB
incus storage volume unset "incustest-$(basename "${INCUS_DIR}")-pool1" c1 size
# Validate that we can restore to previous snapshots given that linstor.remove_snapshots is set
incus storage volume create "incustest-$(basename "${INCUS_DIR}")-pool1" c3
incus storage volume snapshot create "incustest-$(basename "${INCUS_DIR}")-pool1" c3 snap0
incus storage volume snapshot create "incustest-$(basename "${INCUS_DIR}")-pool1" c3 snap1
! incus storage volume snapshot restore "incustest-$(basename "${INCUS_DIR}")-pool1" c3 snap0 || false
incus storage volume set "incustest-$(basename "${INCUS_DIR}")-pool1" c3 linstor.remove_snapshots=true
incus storage volume snapshot restore "incustest-$(basename "${INCUS_DIR}")-pool1" c3 snap0 || false
incus storage volume snapshot list "incustest-$(basename "${INCUS_DIR}")-pool1" c3 | grep snap0
! incus storage volume snapshot list "incustest-$(basename "${INCUS_DIR}")-pool1" c3 | grep snap1 || false
# Cleanup
incus storage volume delete "incustest-$(basename "${INCUS_DIR}")-pool1" c1
incus storage volume delete "incustest-$(basename "${INCUS_DIR}")-pool1" c2
incus storage volume delete "incustest-$(basename "${INCUS_DIR}")-pool1" c3
incus image delete testimage
incus profile device remove default root
incus storage delete "incustest-$(basename "${INCUS_DIR}")-pool1"
)
# shellcheck disable=SC2031
kill_incus "${INCUS_STORAGE_DIR}"
}