| 
									
										
										
										
											2022-04-28 16:09:23 -06:00
										 |  |  | #!/bin/zsh | 
					
						
							| 
									
										
										
										
											2023-02-21 18:44:27 -07:00
										 |  |  | DEPENDENCIES+=(jq) | 
					
						
							|  |  |  | REQUIRED_ENV+=(AWS__EFS__LOCAL_MOUNT_POINT) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use cloud/aws/cli | 
					
						
							| 
									
										
										
										
											2022-04-28 16:09:23 -06:00
										 |  |  | ##################################################################### | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-06 14:06:44 -07:00
										 |  |  | MAIN() { | 
					
						
							| 
									
										
										
										
											2023-02-21 18:44:27 -07:00
										 |  |  | 	GETSUDO || exit 1 | 
					
						
							| 
									
										
										
										
											2022-04-28 16:09:23 -06:00
										 |  |  | 	[ ! -d $AWS__EFS__LOCAL_MOUNT_POINT ] && { | 
					
						
							|  |  |  | 		sudo mkdir $AWS__EFS__LOCAL_MOUNT_POINT \ | 
					
						
							| 
									
										
										
										
											2023-02-21 18:44:27 -07:00
										 |  |  | 			&& STATUS "created local mount point '$AWS__EFS__LOCAL_MOUNT_POINT'" | 
					
						
							| 
									
										
										
										
											2022-04-28 16:09:23 -06:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	local FS_ID=$(\ | 
					
						
							| 
									
										
										
										
											2023-02-21 18:44:27 -07:00
										 |  |  | 		AWS efs describe-file-systems \ | 
					
						
							| 
									
										
										
										
											2022-04-28 16:09:23 -06:00
										 |  |  | 		| jq -r '.[] | .[] | .FileSystemId' \ | 
					
						
							| 
									
										
										
										
											2023-02-21 18:44:27 -07:00
										 |  |  | 		| FZF 'select a filesystem to mount' \ | 
					
						
							| 
									
										
										
										
											2022-04-28 16:09:23 -06:00
										 |  |  | 	) | 
					
						
							| 
									
										
										
										
											2023-02-21 18:44:27 -07:00
										 |  |  | 	[ ! $FS_ID ] && ABORT | 
					
						
							| 
									
										
										
										
											2022-04-28 16:09:23 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	local MOUNT_POINT="$AWS__EFS__LOCAL_MOUNT_POINT/$FS_ID" | 
					
						
							| 
									
										
										
										
											2022-07-01 20:57:03 -06:00
										 |  |  | 	[ -d "$MOUNT_POINT" ] && sudo rmdir "$MOUNT_POINT" >/dev/null 2>&1 | 
					
						
							| 
									
										
										
										
											2022-04-28 16:09:23 -06:00
										 |  |  | 	[ -d "$MOUNT_POINT" ] && { | 
					
						
							| 
									
										
										
										
											2023-02-21 18:44:27 -07:00
										 |  |  | 		STATUS "$FS_ID is already mounted" | 
					
						
							| 
									
										
										
										
											2022-04-28 16:09:23 -06:00
										 |  |  | 		exit 0 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-21 18:44:27 -07:00
										 |  |  | 	local MOUNT_TARGETS=$(AWS efs describe-mount-targets --file-system-id $FS_ID) | 
					
						
							| 
									
										
										
										
											2022-04-28 16:09:23 -06:00
										 |  |  | 	local ZONE=$(\ | 
					
						
							|  |  |  | 		echo $MOUNT_TARGETS \ | 
					
						
							|  |  |  | 		| jq -r '.[] | .[] | .AvailabilityZoneName' \ | 
					
						
							| 
									
										
										
										
											2023-02-21 18:44:27 -07:00
										 |  |  | 		| sort -u | FZF 'select availability zone'\ | 
					
						
							| 
									
										
										
										
											2022-04-28 16:09:23 -06:00
										 |  |  | 	) | 
					
						
							| 
									
										
										
										
											2023-02-21 18:44:27 -07:00
										 |  |  | 	[ ! $ZONE ] && ABORT | 
					
						
							| 
									
										
										
										
											2022-04-28 16:09:23 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	local MOUNT_IP=$(\ | 
					
						
							|  |  |  | 		echo $MOUNT_TARGETS \ | 
					
						
							|  |  |  | 		| jq -r ".[] | .[] | select (.AvailabilityZoneName == \"$ZONE\") | .IpAddress" \ | 
					
						
							|  |  |  | 		| head -n1 \ | 
					
						
							|  |  |  | 	) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-21 18:44:27 -07:00
										 |  |  | 	SUCCESS 'ready to mount!' | 
					
						
							|  |  |  | 	REMINDER 'for private file-systems, you must be connected to the appropriate VPN' | 
					
						
							| 
									
										
										
										
											2022-04-28 16:09:23 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-21 18:44:27 -07:00
										 |  |  | 	STATUS "file system id    : $FS_ID" | 
					
						
							|  |  |  | 	STATUS "availability zone : $ZONE" | 
					
						
							|  |  |  | 	STATUS "file system ip    : $MOUNT_IP" | 
					
						
							|  |  |  | 	STATUS "local mount point : $MOUNT_POINT" | 
					
						
							| 
									
										
										
										
											2022-04-28 16:09:23 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-21 18:44:27 -07:00
										 |  |  | 	Yn 'proceed?' || ABORT | 
					
						
							| 
									
										
										
										
											2022-04-28 16:09:23 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	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" \ | 
					
						
							| 
									
										
										
										
											2023-02-21 18:44:27 -07:00
										 |  |  | 		&& SUCCESS "mounted at '$MOUNT_POINT'" \ | 
					
						
							| 
									
										
										
										
											2022-04-28 16:09:23 -06:00
										 |  |  | 		|| { | 
					
						
							|  |  |  | 		sudo rmdir $MOUNT_POINT >/dev/null 2>&1 | 
					
						
							| 
									
										
										
										
											2023-02-21 18:44:27 -07:00
										 |  |  | 		FAIL 2 "unable to mount '$FS_ID'" | 
					
						
							| 
									
										
										
										
											2022-04-28 16:09:23 -06:00
										 |  |  | 	} | 
					
						
							|  |  |  | } |