#!/bin/zsh source ${0:a:h}/common.zsh __CHECK_IMPORTS ##################################################################### _EFS_CONNECT() { __GETSUDO || exit 1 [ ! -d $AWS__EFS__LOCAL_MOUNT_POINT ] && { sudo mkdir $AWS__EFS__LOCAL_MOUNT_POINT \ && __STATUS "created local mount point '$AWS__EFS__LOCAL_MOUNT_POINT'" } local FS_ID=$(\ _AWS efs describe-file-systems \ | jq -r '.[] | .[] | .FileSystemId' \ | __FZF 'select a filesystem to mount' \ ) [ ! $FS_ID ] && __ABORT local MOUNT_POINT="$AWS__EFS__LOCAL_MOUNT_POINT/$FS_ID" [ -d "$MOUNT_POINT" ] && { __STATUS "$FS_ID is already mounted" exit 0 } local MOUNT_TARGETS=$(_AWS efs describe-mount-targets --file-system-id $FS_ID) local ZONE=$(\ echo $MOUNT_TARGETS \ | jq -r '.[] | .[] | .AvailabilityZoneName' \ | sort -u | __FZF 'select availability zone'\ ) [ ! $ZONE ] && __ABORT local MOUNT_IP=$(\ echo $MOUNT_TARGETS \ | jq -r ".[] | .[] | select (.AvailabilityZoneName == \"$ZONE\") | .IpAddress" \ | head -n1 \ ) __SUCCESS 'ready to mount!' __REMINDER 'your device must be connected to the appropriate VPN' __STATUS "file system id : $FS_ID" __STATUS "availability zone : $ZONE" __STATUS "file system ip : $MOUNT_IP" __STATUS "local mount point : $MOUNT_POINT" __Yn 'proceed?' || __ABORT sudo mkdir $MOUNT_POINT \ && sudo mount \ -t nfs4 \ -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport \ $MOUNT_IP:/ \ "$MOUNT_POINT" \ && __SUCCESS "mounted at '$MOUNT_POINT'" \ || { sudo rmdir $MOUNT_POINT >/dev/null 2>&1 __FAIL 2 "unable to mount '$FS_ID'" } } ##################################################################### _EFS_CONNECT