NetBSD/etc/rc.d/iscsid_volumes

123 lines
2.2 KiB
Bash
Executable File

#!/bin/sh
#
# $NetBSD: iscsid_volumes,v 1.4 2023/07/22 10:31:35 mlelstv Exp $
#
# PROVIDE: iscsid_volumes
# REQUIRE: iscsid
# BEFORE: securelevel mountcritremote
$_rc_subr_loaded . /etc/rc.subr
name="iscsid_volumes"
rcvar=$name
start_cmd="iscsid_volumes_start"
stop_cmd="iscsid_volumes_stop"
iscsid_volumes_start()
{
test -f /etc/iscsi/volumes || return 0
while read host target digest auth user alias; do
case $host in
\#*|"") ;;
*)
topts=''
case $digest in
*d*) topts="$topts -d";;
esac
case $digest in
*h*) topts="$topts -h";;
esac
pass="-"
mpass="-"
if [ -f /etc/iscsi/auths ]; then
while read entry dummy; do
case $entry in
*:chap:*|\
*:CHAP:*|\
*:none:*)
dummy=${entry#*:}
entry=${entry%%:*}:${dummy#*:}
;;
esac
case $entry in
\#*|"") ;;
"$user":*) pass=${entry#*:} ;;
"$target":*) mpass=${entry#*:} ;;
esac
done < /etc/iscsi/auths
fi
case $host in
*:*)
port=${host#*:}
host=${host%%:*}
;;
*)
port=3260
;;
esac
echo "Add target ${alias:-$target}"
out=$(/sbin/iscsictl add_target$topts \
-a "$host" \
-p "$port" \
-n "$target" \
-t "$auth" \
-u "$user" \
-s "$pass" \
-S "$mpass" \
${alias:+-N} ${alias:+"$alias"})
echo "$out"
case $out in
Added\ Target\ [1-9]*,\ Portal\ [1-9]*\ )
out=${out% }
portal=${out##* }
echo "Login $target via Portal $portal"
/sbin/iscsictl login -P "$portal"
;;
esac
esac
done < /etc/iscsi/volumes
}
iscsid_volumes_stop()
{
test -f /etc/iscsi/volumes || return 0
while read host target digest auth user alias; do
case $host in
\#*|"") ;;
*)
echo "Remove target ${alias:-$target}"
/sbin/iscsictl list_sessions \
| while read key1 num key2 sesstarget; do
if [ x"$key1" = x"Session" -a \
x"$key2" = x"Target" -a \
x"$sesstarget" = x"$target" ]; then
/sbin/iscsictl logout -I "$num" | grep -v '^OK$'
fi
done
/sbin/iscsictl list_targets \
| while read num talias ttarget; do
if [ x"$ttarget" = x"$target" ]; then
/sbin/iscsictl remove_target -I "$num"
fi
done
;;
esac
done < /etc/iscsi/volumes
}
load_rc_config $name
run_rc_command "$1"