Export iSCSI with gustini

This document describes how to add new new volumes on gustini and add them into the OS.

via Web-Frontend

* Log into gustini via webfrontend
* Manage
  + Volume Management
    - add volume 
      add volume size and name but leave LUN blank (NONE)
    - volume mapping
      find the next free scsi-lun
      * run "multipathd -k" on dijkstra
        + show topology
	geo2-boot (3600c0ff000d5f6bde2d4cf4901000000) dm-7 HP      ,MSA2012i      
	[size=245M][features=0][hwhandler=0]
	\_ round-robin 0 [prio=0][active]
	 \_ 1:0:0:1 sda 8:0   [active][ready]
	 \_ 0:0:0:1 sdb 8:16  [active][ready]
                  ^ that is the LUN
      find the next unused one and map it
  + on dijkstra: rescan the iscsi bus
    iscsiadm -m node --targetname "iqn.1986-03.com.hp:storage.msa2012i.0834d5ecda.a" --rescan

  + on dijkstra: add aliases to the wwids (show topology)
  + on dijkstra: service multipath-tools reload

via telnet interface

* Log into gustini via telnet
* create a new volume (eg berlioz-boot) on vdisk giustini-vdisk-1:
  + create volume vdisk giustini-vdisk-1 size 256MB berlioz-boot
  (there is a 'help create volume' command with lots of informations)
* find the next free LUN numbers on traetta:
  + show host-maps traetta
* map the new volume to traetta.debian.org, LUN 12
  + map volume berlioz-boot lun 12 host traetta access rw
  (again, there is a 'help map volume' command with lots of informations)

* Run 'show host-maps $host' again, then, on the host, run:
	convert_sn() {
	  local sn a b c d
	  sn="$1"
	  a="${sn%??????????????????????????}"; sn="${sn#??????}"
	  b="${sn%????????????????????}"; sn="${sn#??????}"
	  c="${sn%??????????????}"; sn="${sn#??????}"
	  d="$sn"

	  if [ "${c#0000}" = "$c" ]; then
	    echo >&2 "sn has unexpected value ($1: $a - $b - $c - $d)"
	    return 1
	  fi

	  echo "36${a}000${b}${c#0000}${d}"
	  return 0
	}

	parse_volume() {
	  host=`hostname`
	  echo "Paste appropriate 'show host-maps $host' output line:"
	  read name sn id lun access channels

	  if [ "$access" != "rw" ]; then
	    echo >&2 "Do not have rw access"
	    return 1
	  fi

	  if [ "$(echo -n "$sn" | wc -c)" != "32" ]; then
	    echo >&2 "Unexpected sn length in '$sn' (wanted 32 chars)"
	    return 1
	  fi

	  wwid=$(convert_sn "$sn")

	  if [ -z "$wwid" ]; then
	    return 1
	  fi

	  echo ""
	  echo "  multipath {"
	  echo "    wwid $wwid"
	  echo "    alias $name"
	  echo "  }"
	  echo ""

	  mp="$(multipath -ll $wwid)"
	  if [ -z "$mp" ]; then
	    echo >&2 "Warning: multipath does not know about $wwid"
	    return 1
	  fi

	  if ! echo "$mp" | grep -q ":$lun "; then
	    echo >&2 "Warning: Are you sure $wwid is lun $lun?  multipath -ll disagrees"
	    return 1
	  fi
	}

	parse_volume