#!/bin/bash # Notes: # - Please install "jq" package before using this driver. DIR=$(dirname "$(readlink -f "$0")") JQ="/usr/bin/jq" MOUNT_CIFS="$DIR/cifs" LOG="/var/log/cifs-driver.log" VER="1.0.0" usage() { err "Invalid usage. Usage: " err "\t$0 init" err "\t$0 mount " err "\t$0 unmount " exit 1 } err() { echo $* 1>&2 } log() { echo $* >&1 } ismounted() { MOUNT=`findmnt -n ${MNTPATH} 2>/dev/null | cut -d' ' -f1` [ "${MOUNT}" = "${MNTPATH}" ] } mount() { MNTPATH="$1" VOLUME_SRC=$(echo "$2"|"$JQ" -r '.source') READ_MODE=$(echo "$2"|"$JQ" -r '.["kubernetes.io/readwrite"]') MOUNT_OPTIONS=$(echo "$2"|"$JQ" -r '.mountOptions // empty') USERNAME=$(echo "$2"|"$JQ" -r '.["kubernetes.io/secret/username"] // empty'|base64 -d) PASSWORD=$(echo "$2"|"$JQ" -r '.["kubernetes.io/secret/password"] // empty'|base64 -d) ALL_OPTIONS="username=${USERNAME},password=${PASSWORD},${READ_MODE}" if [ -n "$MOUNT_OPTIONS" ]; then ALL_OPTIONS="${ALL_OPTIONS},${MOUNT_OPTIONS}" fi if ismounted ; then log '{"status": "Success"}' exit 0 fi echo "`date` EXEC: mkdir -p ${MNTPATH}" >> $LOG mkdir -p ${MNTPATH} >>$LOG 2>&1 #mounting echo "`date` EXEC: /bin/mount -t cifs ${VOLUME_SRC} ${MNTPATH}" >>$LOG /bin/mount -t cifs "${VOLUME_SRC}" "${MNTPATH}" -o "${ALL_OPTIONS}" >>$LOG 2>&1 if [ $? -ne 0 ]; then errorLog=`tail -n 1 "${LOG}"` err "{ \"status\": \"Failure\", \"message\": \"Failed to mount device ${DMDEV} at ${MNTPATH}, user:${USERNAME}, ${VOLUME_SRC}, error log:${errorLog}\" }" exit 1 fi log '{"status": "Success"}' exit 0 } unmount() { MNTPATH="$1" if ! ismounted ; then log '{"status": "Success"}' exit 0 fi echo "`date` EXEC: umount $MNTPATH" >>$LOG umount "${MNTPATH}" >>$LOG 2>&1 if [ $? -ne 0 ]; then errorLog=`tail -n 1 "${LOG}"` err "{ \"status\": \"Failed\", \"message\": \"Failed to unmount volume at ${MNTPATH}, error log:${errorLog}\" }" exit 1 fi echo "`date` EXEC: rmdir ${MNTPATH}" >> $LOG rmdir "${MNTPATH}" >> $LOG 2>&1 log '{"status": "Success"}' exit 0 } op=$1 if [ "$op" = "init" ]; then log '{"status": "Success", "capabilities": {"attach": false}}' exit 0 fi if [ $# -lt 2 ]; then usage fi shift case "$op" in mount) mount $* ;; unmount) unmount $* ;; *) usage esac exit 1