From ef6462bd655e5ad9bca537e5f4ecff8df41ff1f2 Mon Sep 17 00:00:00 2001 From: Sachin Bhamare Date: Tue, 1 May 2012 15:17:01 -0400 Subject: [PATCH] osd_login: Commit the files that go along with autologin script Signed-off-by: Steve Dickson --- utils/osd_login/Makefile.am | 12 ++++ utils/osd_login/osd_login | 118 ++++++++++++++++++++++++++++++++++++ 2 files changed, 130 insertions(+) create mode 100644 utils/osd_login/Makefile.am create mode 100644 utils/osd_login/osd_login 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 +# Copyright (C) 2012, Boaz Harrosh +# +# 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 -o -s " + echo "Options:" + echo "-u target uri e.g. iscsi://:" + 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 -- 2.39.2