set -e
fail () { printf >&2 "%s: %s\n" "$0" "$*"; exit 127; }
-. /etc/lsb-release
+if test -f /etc/lsb-release; then . /etc/lsb-release; fi
-d="${USERV_U_distro-$DISTRIB_CODENAME}"
-n="${USERV_U_nominum-adt}"
+d="${USERV_U_distro:-$DISTRIB_CODENAME}"
+n="${USERV_U_nominum:-adt}"
-case "$dn" in
+for v in ssh_privkey ssh_keyident_args; do
+ eval "
+ if [ \"x\$USERV_U_$v\" != x ]; then
+ export adt_$v=\"\$USERV_U_$v\"
+ fi
+ "
+done
+
+if [ "x$adt_ssh_privkey$adt_ssh_keyident_args" = x ]; then
+ export adt_ssh_keyident_args=' '
+ # There's no point directing userv callers to use the one in
+ # /root/.ssh/id_dsa_adt* since that one is only readable by
+ # root. So if they don't specify one we just let them have
+ # whatever the default is.
+fi
+
+nd="${n}_${d}"
+
+case "$nd" in
*/*|.*|*.*|*_*_*) fail 'dangerous format in distro or nominum' ;;
adt*) ;;
*) fail 'userv adtxenlvm only supports nominums starting with adt' ;;
esac
-test -d /var/lib/autopkgtest/xenlvm/"$dn" || fail 'unknown distro or nominum'
+nddir=/var/lib/autopkgtest/xenlvm/"$nd"
+test -d "$nddir" || fail 'unknown distro or nominum'
run () {
base="$1"; shift
}
case "$1" in
-with) run adt-xenlvm-with-testbed sh -c 'echo y && exec cat' ;;
pon0) run adt-xenlvm-on-testbed -- --print0-command ;;
+console) xm console "$nd" ;;
+with)
+ ADT_LOCKED="$nddir.lock" with-lock-ex -w "$nddir.lock" sh -ec '
+ while adt-xenlvm-with-testbed \
+ --adt-distro="$1" --adt-nominum="$2" \
+ sh -c "echo y && read again" && \
+ echo n && read again; do
+ :
+ done
+ ' locked-fragment "$d" "$n"
+;;
*) fail 'unknown mode'
esac