mirror of
https://github.com/samba-team/samba.git
synced 2024-12-23 17:34:34 +03:00
e70e77383c
This has bit-rotted, at least for NFS. It can be fixed but it is better to remove it because it adds a lot of unnecessary complexity. Variable event_name becomes unused so remove it. Also remove associated tests. To continue to manage/unmanage services while CTDB is running: * Start service by hand and then flag it as managed * Mark service as unmanaged and shut it down by hand In some cases CTDB does something fancy - e.g. start Samba under "nice", so care is needed. One technique is to disable the eventscript, mark as managed, run the startup event by hand and then re-enable the eventscript. Signed-off-by: Martin Schwenke <martin@meltin.net> Reviewed-by: Amitay Isaacs <amitay@gmail.com>
90 lines
1.9 KiB
Bash
Executable File
90 lines
1.9 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# CTDB event script for TGTD based iSCSI
|
|
|
|
[ -n "$CTDB_BASE" ] || \
|
|
CTDB_BASE=$(d=$(dirname "$0") ; cd -P "$d" ; dirname "$PWD")
|
|
|
|
. "${CTDB_BASE}/functions"
|
|
|
|
# service_name is used by various functions
|
|
# shellcheck disable=SC2034
|
|
service_name="iscsi"
|
|
|
|
loadconfig
|
|
|
|
is_ctdb_managed_service || exit 0
|
|
|
|
[ -z "$CTDB_START_ISCSI_SCRIPTS" ] && {
|
|
echo "No iscsi start script directory found"
|
|
exit 0
|
|
}
|
|
|
|
case "$1" in
|
|
ipreallocated)
|
|
all_ips=$($CTDB -X ip | tail -n +2)
|
|
|
|
# Block the iSCSI port. Only block for the address families
|
|
# we have configured. This copes with, for example, ip6tables
|
|
# being unavailable on an IPv4-only system.
|
|
have_ipv4=false
|
|
have_ipv6=false
|
|
# x is intentionally ignored
|
|
# shellcheck disable=SC2034
|
|
while IFS='|' read x ip pnn x ; do
|
|
case "$ip" in
|
|
*:*) have_ipv6=true ;;
|
|
*) have_ipv4=true ;;
|
|
esac
|
|
done <<EOF
|
|
$all_ips
|
|
EOF
|
|
if $have_ipv4 ; then
|
|
iptables -I INPUT 1 -p tcp --dport 3260 -j DROP
|
|
fi
|
|
if $have_ipv6 ; then
|
|
ip6tables -I INPUT 1 -p tcp --dport 3260 -j DROP
|
|
fi
|
|
|
|
# Stop iSCSI daemon
|
|
killall -9 tgtd >/dev/null 2>/dev/null
|
|
|
|
pnn=$(ctdb_get_pnn)
|
|
[ -n "$pnn" ] || die "Failed to get node pnn"
|
|
|
|
# Start iSCSI daemon
|
|
tgtd >/dev/null 2>&1
|
|
|
|
# Run a script for each currently hosted public IP address
|
|
ips=$(echo "$all_ips" | awk -F'|' -v pnn="$pnn" '$3 == pnn {print $2}')
|
|
for ip in $ips ; do
|
|
script="${CTDB_START_ISCSI_SCRIPTS}/${ip}.sh"
|
|
if [ -x "$script" ] ; then
|
|
echo "Starting iSCSI service for public address ${ip}"
|
|
"$script"
|
|
fi
|
|
done
|
|
|
|
# Unblock iSCSI port. These can be unconditional (compared to
|
|
# blocking above), since errors are redirected.
|
|
while iptables -D INPUT -p tcp --dport 3260 -j DROP >/dev/null 2>&1 ; do
|
|
:
|
|
done
|
|
while ip6tables -D INPUT -p tcp --dport 3260 -j DROP >/dev/null 2>&1 ; do
|
|
:
|
|
done
|
|
|
|
;;
|
|
|
|
shutdown)
|
|
# Shutdown iSCSI daemon when ctdb goes down
|
|
killall -9 tgtd >/dev/null 2>&1
|
|
;;
|
|
|
|
monitor)
|
|
ctdb_check_tcp_ports 3260 || exit $?
|
|
;;
|
|
esac
|
|
|
|
exit 0
|