65 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/zsh
 | |
| DEPENDENCIES+=(jq)
 | |
| REQUIRED_ENV+=(AWS__EFS__LOCAL_MOUNT_POINT)
 | |
| 
 | |
| use cloud/aws/cli
 | |
| #####################################################################
 | |
| 
 | |
| MAIN() {
 | |
| 	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" ] && sudo rmdir "$MOUNT_POINT" >/dev/null 2>&1
 | |
| 	[ -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 'for private file-systems, you 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'"
 | |
| 	}
 | |
| }
 |