# !/usr/bin/env bash # Copyright 2012 Citrix Systems, Inc. Licensed under the # Apache License, Version 2.0 (the "License"); you may not use this # file except in compliance with the License. Citrix Systems, Inc. # reserves all rights not expressly granted by the License. # You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # Automatically generated by addcopyright.py at 04/03/2012 # lu_share.sh -- makes all logical units (LUs) available over iSCSI, for a specified initiator IQN # OpenSolaris usage() { printf "Usage: %s -i [ -s | -u ]\n" $(basename $0) >&2 } valid_target_name() { # echo $1 | grep ':lu:' >/dev/null return $? } target_iqn_from_target_name() { # echo $1 | cut -d':' -f1,2,3 } hg_from_initiator_iqn() { # echo $1 return 0 } lu_name_from_target_name() { # echo $1 | cut -d':' -f5 } view_entry_from_hg_and_lu_name() { # local hg=$1 local lu_name=$2 local view= local last_view= local last_hg= for w in $(stmfadm list-view -l $lu_name) do case $w in [0-9]*) last_view=$w ;; esac if [ "$w" == "$hg" ] then echo $last_view return 0 fi done return 1 } create_host_group() { # local hg=$1 local i_iqn=$2 local host_group= local result= result=$(stmfadm create-hg $hg 2>&1) if [ $? -ne 0 ] then echo $result | grep "already exists" > /dev/null if [ $? -ne 0 ] then printf "%s: create-hg %s failed due to %s\n" $(basename $0) $i_iqn $result >&2 return 11 fi fi result=$(stmfadm add-hg-member -g $hg $i_iqn 2>&1) if [ $? -ne 0 ] then echo $result | grep "already exists" > /dev/null if [ $? -ne 0 ] then printf "%s: unable to add %s due to %s\n" $(basename $0) $i_iqn $result >&2 return 12 fi fi return 0 } add_view() { # local i=1 local hg=$1 local lu=$2 while [ $i -lt 500 ] do local lun=$[ ( $RANDOM % 512 ) ] local result= result=$(stmfadm add-view -h $hg -n $lun $lu 2>&1) if [ $? -eq 0 ] then printf "lun %s for luname %s\n" $lun $lu >&2 #stmfadm list-view -l $lu #sbdadm list-lu return 0 fi echo $result | grep "view entry exists" > /dev/null if [ $? -eq 0 ] then return 0 fi echo $result | grep "LUN already in use" > /dev/null if [ $? -ne 0 ] then echo $result return 1 fi let i=i+1 done printf "Unable to add view after lots of tries\n" >&2 return 1 } add_view_and_hg() { # local i_iqn=$1 local lu_name=$2 local hg="Migration" local result= if ! create_host_group $hg $i_iqn then printf "%s: create_host_group failed: %s %s\n" $(basename $0) $i_iqn $lu_name >&2 return 22 fi if ! add_view $hg $lu_name then return 1 fi return 0 } remove_view() { # local lu_name=$1 local hg="Migration" local view=$(view_entry_from_hg_and_lu_name $hg $lu_name) if [ -n "$view" ] then local result= result=$(stmfadm remove-view -l $lu_name $view 2>&1) if [ $? -ne 0 ] then echo $result | grep "not found" if [ $? -eq 0 ] then return 0 fi echo $result | grep "no views found" if [ $? -eq 0 ] then return 0 fi printf "Unable to remove view due to: $result\n" >&2 return 5 fi fi return 0 } # set -x iflag= sflag= uflag= while getopts 'sui:' OPTION do case $OPTION in i) iflag=1 init_iqn="$OPTARG" ;; s) sflag=1 ;; u) uflag=1 ;; *) usage exit 2 ;; esac done if [ "$sflag$iflag" != "11" -a "$uflag" != "1" ] then usage exit 3 fi lu_names="$(stmfadm list-lu | cut -d":" -f2)" for lu_name in $lu_names do if [ "$uflag" == "1" ] then remove_view $lu_name if [ $? -gt 0 ] then printf "%s: remove_view failed: %s\n" $(basename $0) $lu_name >&2 exit 1 fi else if [ "$sflag" == "1" ] then add_view_and_hg $init_iqn $lu_name if [ $? -gt 0 ] then printf "%s: add_view failed: %s\n" $(basename $0) $lu_name >&2 exit 1 fi fi fi done if [ "$uflag" == "1" ] then stmfadm delete-hg "Migration" fi exit 0