618294259a88d03ecd67448a6ef638973840de8a
[invirt/packages/xvm-iscsi-config.git] / debian / xvm-iscsi-config.postinst
1 #!/bin/bash
2 # postinst script for xvm-iscsi-config
3 #
4 # see: dh_installdeb(1)
5
6 set -e
7
8 # Source debconf library
9 . /usr/share/debconf/confmodule
10
11 # summary of how this script can be called:
12 #        * <postinst> `configure' <most-recently-configured-version>
13 #        * <old-postinst> `abort-upgrade' <new version>
14 #        * <conflictor's-postinst> `abort-remove' `in-favour' <package>
15 #          <new-version>
16 #        * <postinst> `abort-remove'
17 #        * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
18 #          <failed-install-package> <version> `removing'
19 #          <conflicting-package> <version>
20 # for details, see http://www.debian.org/doc/debian-policy/ or
21 # the debian-policy package
22
23 # dh_installdeb will replace this with shell code automatically
24 # generated by other debhelper scripts.
25
26 #DEBHELPER#
27
28 get_current_sessions() {
29     for i in $(cd /sys/class/iscsi_session/ && ls); do
30         echo $(cat /sys/class/iscsi_connection/connection${i#session}:0/persistent_address) \
31 $(cat /sys/class/iscsi_host/$(readlink /sys/class/iscsi_session/$i/device | perl -ne '/host\d+/ && print $&')/netdev)
32     done | sort
33 }
34
35 get_new_sessions() {
36     for i in $(invirt-getconf --ls iscsi.targets); do
37         echo $(invirt-getconf iscsi.targets.$i.ip) $(invirt-getconf iscsi.targets.$i.iface)
38     done | sort
39 }
40
41 case "$1" in
42     configure)
43         db_get xvm-iscsi-config/username
44         USERNAME="$RET"
45         db_get xvm-iscsi-config/password
46         PASSWORD="$RET"
47         db_stop
48         
49         OLD_USERNAME=$(invirt-getconf iscsi.username 2>/dev/null)
50         OLD_PASSWORD=$(invirt-getconf iscsi.password 2>/dev/null)
51
52         if [ -e /etc/invirt/conf.d/iscsi ]; then
53           # invirt.config.run_parts_list excludes backup filenames.
54           mv -f /etc/invirt/conf.d/iscsi /etc/invirt/conf.d/iscsi~
55         fi
56         cat >/etc/invirt/conf.d/iscsi <<EOF
57 iscsi:
58  username: $USERNAME
59  password: $PASSWORD
60 EOF
61
62         # Attempt to determine whether the iSCSI configuration has changed at all
63         safe=""
64
65         if [ -z "$2" ]; then
66             invoke-rc.d xvm-iscsi-config restart
67             invoke-rc.d open-iscsi restart
68         elif [[ "$USERNAME" -ne "$OLD_USERNAME" || "$PASSWORD" -ne "$OLD_PASSWORD" ]]; then
69             cat <<EOF
70 xvm-iscsi-config: The login credentials have changed.  Restart iscsi:
71   /etc/init.d/xvm-iscsi-config restart
72   /etc/init.d/open-iscsi restart
73 EOF
74             safe=no
75         fi
76         if ! diff <(get_current_sessions) <(get_new_sessions) >/dev/null; then
77             if [ -z "$safe" ]; then
78                 for i in $(invirt-getconf --ls iscsi.targets); do
79                     iscsiadm -m discovery -t st -p $(invirt-getconf iscsi.targets.$i.ip):3260 -I $(invirt-getconf iscsi.targets.$i.iface)
80                     iscsiadm -m node -p $(invirt-getconf iscsi.targets.$i.ip):3260 -I $(invirt-getconf iscsi.targets.$i.iface) -l
81                 done
82             else
83               for i in $(invirt-getconf --ls iscsi.targets); do
84                   echo "  "iscsiadm -m discovery -t st -p $(invirt-getconf iscsi.targets.$i.ip):3260 -I $(invirt-getconf iscsi.targets.$i.iface)
85                   echo "  "iscsiadm -m node -p $(invirt-getconf iscsi.targets.$i.ip):3260 -I $(invirt-getconf iscsi.targets.$i.iface) -l
86               done
87             fi
88             cat <<EOF
89 You may want to recreate the LVM nodes:
90   lvchange -a ln /dev/xenvg && lvchange -a y /dev/xenvg
91 This will leave VMs unable to access their disks, so migrate them first.
92
93 EOF
94         fi
95     ;;
96
97     abort-upgrade|abort-remove|abort-deconfigure)
98     ;;
99
100     *)
101         echo "postinst called with unknown argument \`$1'" >&2
102         exit 1
103     ;;
104 esac
105
106 exit 0