| #!/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" |