-#!/bin/sh
+#!/bin/bash
# postinst script for xvm-iscsi-config
#
# see: dh_installdeb(1)
#DEBHELPER#
+get_current_sessions() {
+ for i in $(cd /sys/class/iscsi_session/ && ls); do
+ echo $(cat /sys/class/iscsi_connection/connection${i#session}:0/persistent_address) \
+$(cat /sys/class/iscsi_host/$(readlink /sys/class/iscsi_session/$i/device | perl -ne '/host\d+/ && print $&')/netdev)
+ done | sort
+}
+
+get_new_sessions() {
+ for i in $(invirt-getconf --ls iscsi.targets); do
+ for j in $(invirt-getconf --ls iscsi.targets.$i.ifaces); do
+ echo $(invirt-getconf iscsi.targets.$i.ip) $(invirt-getconf iscsi.targets.$i.ifaces.$j)
+ done
+ done | sort
+}
+
case "$1" in
configure)
- db_get xvm-iscsi-config/address
- ADDRESS="$RET"
db_get xvm-iscsi-config/username
USERNAME="$RET"
db_get xvm-iscsi-config/password
PASSWORD="$RET"
db_stop
+ OLD_USERNAME=$(invirt-getconf iscsi.username 2>/dev/null)
+ OLD_PASSWORD=$(invirt-getconf iscsi.password 2>/dev/null)
+
+ if [ -e /etc/invirt/conf.d/iscsi ]; then
+ # invirt.config.run_parts_list excludes backup filenames.
+ mv -f /etc/invirt/conf.d/iscsi /etc/invirt/conf.d/iscsi~
+ fi
cat >/etc/invirt/conf.d/iscsi <<EOF
iscsi:
- address: $ADDRESS
username: $USERNAME
password: $PASSWORD
EOF
- invoke-rc.d xvm-iscsi-config restart
- invoke-rc.d open-iscsi restart
- iscsiadm -m discovery -t st -p $(invirt-getconf iscsi.address):3260
+
+ # Attempt to determine whether the iSCSI configuration has changed at all
+ safe=""
+
+ if [ -z "$2" ]; then
+ invoke-rc.d xvm-iscsi-config restart
+ invoke-rc.d open-iscsi restart
+ elif [[ "$USERNAME" -ne "$OLD_USERNAME" || "$PASSWORD" -ne "$OLD_PASSWORD" ]]; then
+ cat <<EOF
+xvm-iscsi-config: The login credentials have changed. Restart iscsi:
+ /etc/init.d/xvm-iscsi-config restart
+ /etc/init.d/open-iscsi restart
+EOF
+ safe=no
+ fi
+ if ! diff <(get_current_sessions) <(get_new_sessions) >/dev/null; then
+ if [ -z "$safe" ]; then
+ /usr/lib/xvm-iscsi-connect
+ else
+ echo " /usr/lib/xvm-iscsi-connect"
+ fi
+ cat <<EOF
+You may want to recreate the LVM nodes:
+ lvchange -a ln /dev/xenvg && lvchange -a y /dev/xenvg
+This will leave VMs unable to access their disks, so migrate them first.
+
+EOF
+ fi
;;
abort-upgrade|abort-remove|abort-deconfigure)