diff --git a/vm-mount b/vm-mount index bc262a3..1057b30 100755 --- a/vm-mount +++ b/vm-mount @@ -1,32 +1,54 @@ #!/usr/bin/env sh +# TODO: This needs to be tested and also handle errors more effectively. -vm_name="$1" -network_name="default" -mountpoint_parent="${HOME}/src" -remote_directory="/home/lumia/src/" +NETWORK_NAME="default" +MOUNTPOINT_PARENT="${HOME}/src" +REMOTE_DIRECTORY="/home/lumia/src/" -mountpoint="${mountpoint_parent}/${vm_name}.vm" +if [ "$1" = "-u" ]; then + vm_name="$2" + mountpoint="${MOUNTPOINT_PARENT}/${vm_name}.vm" + # TODO: Print some messages here. -if [ "$(virsh list | grep "${vm_name}")" = "" ]; then - virsh start "${vm_name}" -fi + if mount | grep -q "on ${mountpoint} "; then + fusermount -u "${mountpoint}" + fi -echo "Waiting for ${vm_name} to connect to the network..." -vm_ip_address="" + if virsh list | grep -q " ${vm_name} "; then + virsh destroy "${vm_name}" + fi -while [ "${vm_ip_address}" = "" ]; do - virsh_line="" - virsh_line="$(virsh net-dhcp-leases "${network_name}" | grep "${vm_name}") > /dev/null" - if [ "${virsh_line}" != "" ]; then - vm_ip_address="$(echo "${virsh_line}" | sed "s/\\( \\)*/\\1/g" | cut -d " " -f6 | cut -d "/" -f1)" + if [ -d "${mountpoint}" ]; then + rmdir "${mountpoint}" fi -done -mkdir -p "${mountpoint}" +else + vm_name="$1" + mountpoint="${MOUNTPOINT_PARENT}/${vm_name}.vm" + + if [ "$(virsh list | grep " ${vm_name} ")" = "" ]; then + virsh start "${vm_name}" + fi -echo "Attempting to mount over ssh." -until sshfs "${vm_ip_address}:${remote_directory}" "${mountpoint}" -do - sleep 3 - echo "An error occurred, retrying." -done + echo "Waiting for ${vm_name} to connect to the network..." + vm_ip_address="" + + # TODO: Consider using a sleep here? + while [ "${vm_ip_address}" = "" ]; do + virsh_line="" + virsh_line="$(virsh net-dhcp-leases "${NETWORK_NAME}" | grep "${vm_name}") > /dev/null" + if [ "${virsh_line}" != "" ]; then + vm_ip_address="$(echo "${virsh_line}" | sed "s/\\( \\)*/\\1/g" | cut -d " " -f6 | cut -d "/" -f1)" + fi + done + + # TODO: Make sure this directory isn't made if the vm fails to start or connect. + mkdir -p "${mountpoint}" + + # TODO: This needs a better "error" message and a proper timeout. + echo "Attempting to mount over ssh." + until sshfs "${vm_ip_address}:${REMOTE_DIRECTORY}" "${mountpoint}"; do + sleep 3 + echo "An error occurred, retrying." + done +fi