summaryrefslogtreecommitdiff
blob: d045fae570fcc2f9a59b9e4e3d21d3cb82540ae9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/usr/bin/env bash

# KERNEL=="sd*", SUBSYSTEMS=="block", RUN{program}="/etc/udev/scripts/iscsidev.sh"

# we only care about iscsi devices
[[ $ID_VENDOR = "IET" ]] || exit 1

# don't care about partitions either
echo $DEVNAME | egrep -q "[0-9]$"
status=$?
[[ $status != 0 ]] || exit 1

#ID_MODEL=VIRTUAL-DISK
#ID_MODEL_ENC=VIRTUAL-DISK
#ID_REVISION=0001
#DEVTYPE=disk
#ID_BUS=scsi
#SUBSYSTEM=block
#ID_SERIAL=1IET_00010001
#DEVPATH=/devices/platform/host74/session68/target74:0:0/74:0:0:1/block/sde
#ID_VENDOR_ENC=IET\x20\x20\x20\x20\x20
#MINOR=64
#ID_SCSI=1
#ACTION=add
#PWD=/
#ID_PART_TABLE_UUID=54f71c65-a5d5-45cd-8915-5ffd5ff4fea6
#ID_FS_TYPE=
#USEC_INITIALIZED=999037905
#MAJOR=8
#ID_SCSI_SERIAL=beaf11
#DEVLINKS=/dev/disk/by-id/scsi-1IET_00010001
#DEVNAME=/dev/sde
#SHLVL=1
#ID_TYPE=disk
#ID_PART_TABLE_TYPE=gpt
#ID_VENDOR=IET
#ID_SERIAL_SHORT=IET_00010001
#SEQNUM=25775

# do the removal
if [[ $ACTION = 'remove' ]]; then
  # nohup needed so this isn't constantly run...
  nohup find -L /dev/disk/by-path/ -type l -lname ${DEVNAME} -exec rm "{}" + 2>/dev/null &
  exit 0
fi

TARGET_NAME=$(lsscsi -t | grep "${DEVNAME}" | awk '{print $3}' | awk -F, '{print $1}')
[[ $TARGET_NAME = '' ]] && exit 1

# we don't know which host is correct
declare -a POSSIBLE_HOSTS
declare -a POSSIBLE_PORTS
for item in $(cat /sys/class/iscsi_connection/connection*/address); do
  POSSIBLE_HOSTS+=("${item}")
done
for item in $(cat /sys/class/iscsi_connection/connection*/port); do
  POSSIBLE_PORTS+=("${item}")
done

#get correct ip and port
for ((i=0;i<${#POSSIBLE_HOSTS[@]};++i)); do
  printf "%s is in %s\n" "$POSSIBLE_HOSTS[i]}" "${POSSIBLE_PORTS[i]}"
  iscsiadm --mode node --targetname "${TARGET_NAME}" -p "${POSSIBLE_HOSTS[i]}":"${POSSIBLE_PORTS[i]}"
  status=$?
  if [[ $status = 0 ]]; then
    TARGET_IP="${POSSIBLE_HOSTS[i]}"
    TARGET_PORT="${POSSIBLE_PORTS[i]}"
    break
  fi
done

# exit if not found
[[ -z $TARGET_IP ]] && exit 1
[[ -z $TARGET_PORT ]] && exit 1

# actually create the link
mkdir -p /dev/disk/by-path/
ln -s "${DEVNAME}" "/dev/disk/by-path/ip-${TARGET_IP}:${TARGET_PORT}-iscsi-${TARGET_NAME}-lun-1"