summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSachin Bhamare <sbhamare@panasas.com>2012-05-01 15:17:01 -0400
committerSteve Dickson <steved@redhat.com>2012-05-01 15:17:01 -0400
commitef6462bd655e5ad9bca537e5f4ecff8df41ff1f2 (patch)
treed40c59a334fdf3419fea75755403e33e764bf167
parent946c1c81c2f38b65acff632be4d4604e3959a323 (diff)
downloadnfs-utils-ef6462bd655e5ad9bca537e5f4ecff8df41ff1f2.tar.gz
nfs-utils-ef6462bd655e5ad9bca537e5f4ecff8df41ff1f2.tar.xz
nfs-utils-ef6462bd655e5ad9bca537e5f4ecff8df41ff1f2.zip
osd_login: Commit the files that go along with autologin script
Signed-off-by: Steve Dickson <steved@redhat.com>
-rw-r--r--utils/osd_login/Makefile.am12
-rw-r--r--utils/osd_login/osd_login118
2 files changed, 130 insertions, 0 deletions
diff --git a/utils/osd_login/Makefile.am b/utils/osd_login/Makefile.am
new file mode 100644
index 0000000..adc493a
--- /dev/null
+++ b/utils/osd_login/Makefile.am
@@ -0,0 +1,12 @@
+## Process this file with automake to produce Makefile.in
+
+OSD_LOGIN_FILES= osd_login
+
+EXTRA_DIST= $(OSD_LOGIN_FILES)
+
+all-local: $(OSD_LOGIN_FILES)
+
+install-data-hook:
+ $(INSTALL) --mode 755 osd_login $(DESTDIR)/sbin/osd_login
+
+MAINTAINERCLEANFILES = Makefile.in
diff --git a/utils/osd_login/osd_login b/utils/osd_login/osd_login
new file mode 100644
index 0000000..08cd2d2
--- /dev/null
+++ b/utils/osd_login/osd_login
@@ -0,0 +1,118 @@
+#!/bin/bash
+#
+# osd_login : This script is part of the autologin feature
+# mandated by the pnfs-objects standard.
+# It is called from objlayoutdriver.ko in the kernel.
+
+# Copyright (C) 2012, Sachin Bhamare <sbhamare@panasas.com>
+# Copyright (C) 2012, Boaz Harrosh <bharrosh@panasas.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301 USA
+
+umask 022
+
+PATH="/sbin:/usr/sbin:/bin:/usr/bin"
+
+iscsiadm=/sbin/iscsiadm
+
+PARENT_PID=$BASHPID
+WATCHDOG_TIMEOUT=15
+
+protocol=""
+portal=""
+uri=""
+osdname=""
+systemid=""
+
+usage()
+{
+ echo "Usage: $0 -u <URI> -o <OSDNAME> -s <SYSTEMID>"
+ echo "Options:"
+ echo "-u target uri e.g. iscsi://<ip>:<port>"
+ echo "-o osdname of the target OSD"
+ echo "-s systemid of the target OSD"
+}
+
+parse_cmdline()
+{
+ argc=$#
+ if [ $# -lt 3 ]; then
+ usage
+ exit 1
+ fi
+
+ # parse the input arguments
+ while getopts "u:o:s:" options; do
+ case $options in
+ u ) uri=$OPTARG;;
+ o ) osdname=$OPTARG;;
+ s ) systemid=$OPTARG;;
+ \? ) usage
+ exit 1;;
+ * ) usage
+ exit 1;;
+ esac
+ done
+
+ echo "-u : $uri"
+ echo "-o : $osdname"
+ echo "-s : $systemid"
+
+ protocol=`echo $uri | awk -F ':' '{print $1}'`
+ portal=`echo $uri | awk -F '//' '{print $2}'`
+}
+
+watchdog()
+{
+ timeout=$1
+ portal=$2
+
+ sleep $timeout
+ if kill -9 $PARENT_PID; then
+ echo "watchdog : Timed out (>$timeout seconds) while login into $portal" | logger -t "osd_login"
+ fi
+ echo "watchdog: exiting .."
+ exit 2
+}
+
+login_iscsi_osd()
+{
+ echo "login into: $1"
+ if ! $iscsiadm -m discovery -o nonpersistent -t sendtargets -p $1 --login; then
+ echo "$iscsiadm -m discovery -t sendtargets -p $1 --login returned error $? !"
+ sleep 1;
+ fi
+}
+
+echo "============= osd_login ========="
+echo "progname : $0"
+parse_cmdline "$@"
+echo "protocol: $protocol"
+echo "portal: $portal"
+
+watchdog $WATCHDOG_TIMEOUT $portal &
+watchdog_pid=$!
+
+case $protocol in
+iscsi)
+ login_iscsi_osd $portal |& logger -t "osd_login"
+ ;;
+*)
+ echo "Error: protocol $protocol not supported !" | logger -t "osd_login"
+ ;;
+esac
+
+kill -9 $watchdog_pid
+exit 0