- """
- Jeffery Russell
- 4-27-18
- """
-
- import subprocess
- import sys
-
- from utils import module
- import configuration
-
-
- """
- The mounts.txt file is a sequence of three strings
-
- user@remote.server.address
- /remote/mount/point
- /local/mount/point
- """
- MOUNT_FILE = configuration.get_config()["mounts"]
-
-
- def mount_drive(remote_connection, remote_mount_point, local_mount_point):
- """
- Calls sshfs to mount a remote connection on a local mount point over ssh
- """
- runCode = subprocess.call(["sshfs", "-o", "allow_other",
- remote_connection + ":" + remote_mount_point, local_mount_point])
- if runCode == 0:
- print("Mounted " + remote_connection + ":" + remote_mount_point +
- " to " + local_mount_point)
- else:
- print("Failed to mount " + remote_connection + ":" + remote_mount_point)
-
-
- def mount_drives():
- """
- Mounts all the ssh drives in the configuration file
- """
- file = module.input_file(MOUNT_FILE)
- if len(file) == 0:
- print(MOUNT_FILE + " is empty")
- else:
- for i in range(0, len(file), 3):
- mount_drive(file[i], file[i + 1], file[i + 2])
-
-
- def unmount_drive(local_mount_point):
- """
- UnMounts a drive from a computer
- """
- runCode = subprocess.call(["fusermount", "-u", local_mount_point])
-
- if runCode == 0:
- print("Un-Mounted " + local_mount_point)
- else:
- print("Failed to Un-Mount " + local_mount_point)
-
-
- def unmount_all_drives():
- """
- UnMounts the ssh drives from the computer
- """
- file = module.input_file(MOUNT_FILE)
- for i in range(0, len(file), 3):
- unmount_drive(file[i + 2])
-
-
- def forcefully_unmount_drive(local_mount_point):
- """
- Forcefully un-mounts a ssh drive
- :param local_mount_point:
- :return:
- """
- runCode = subprocess.call(["sudo","umount", "-l", local_mount_point])
- if runCode == 0:
- print("Un-Mounted " + local_mount_point)
- else:
- print("Failed to Un-Mount " + local_mount_point)
-
-
- def forcefully_unmount_drives():
- """
- Forcefully un-mounts all drives from the system
- :return:
- """
- file = module.input_file(MOUNT_FILE)
- for i in range(0, len(file), 3):
- forcefully_unmount_drive(file[i + 2])
-
-
- def remove_drive():
- """
- Prompts the user and removes a drive from MOUNT_FILE
- """
- options = []
- file = module.input_file(MOUNT_FILE)
- for i in range(0, len(file), 3):
- options.append(str(len(options) + 1) + ") " + file[i])
-
- options.append("A) Exit")
-
- module.print_menu("Remove SSH Drive", options)
-
- i = input("Enter Option:")
-
- if i.lower() != 'a' and int(i) <= len(file)/3 and int(i) > 0:
- index = (int(i) - 1) * 3
-
- f = open(MOUNT_FILE, "w")
- for x in range(0, len(file), 3):
- if index != x:
- f.write(file[x] + "\n")
- f.write(file[x + 1] + "\n")
- f.write(file[x + 2] + "\n")
- f.close()
-
-
- def add_drive_to_config(remote_connection, remote_mount_point,
- local_mount_point):
- """
- Adds a new network drive to the default mount config file
- """
- module.append_file(MOUNT_FILE, remote_connection)
- module.append_file(MOUNT_FILE, remote_mount_point)
- module.append_file(MOUNT_FILE, local_mount_point)
-
-
- def add_drive():
- """
- Prompts the user to enter information to add ssh mount drive to config
- """
- ssh_acct = input("Enter your ssh account:")
- remote_mount = input("Enter the remote mount point:")
- local_mount = input("Enter the local mount point:")
- add_drive_to_config(ssh_acct, remote_mount, local_mount)
-
-
- def view_drives():
- """
- Views the current drives to the user
- """
- drives = []
- file = module.input_file(MOUNT_FILE)
- for i in range(0, len(file), 3):
- drives.append(str(int(int(i)/3 + 1)) + ") " + file[i])
- drives.append(" " + file[i + 1])
- drives.append(" " + file[i + 2])
- module.print_menu("SSH Drives", drives)
-
-
- def print_mount_menu():
- """
- Displays box which has mount menu options
- """
- module.print_menu("SSH Drive Manager ", ["1) Mount SSH Drives",
- "2) Un-Mount SSH Drives",
- "3) Remove Remote Drive",
- "4) Add Drive to Mount",
- "5) View Drives",
- "6) Usage",
- "7) Manage Config",
- "8) Forcefully Un-Mount SSH Drives",
- "9) Exit"])
-
-
- def manage_mount_file():
- """
- Method which prompts user which action to take with mounts file
- """
- print_mount_menu()
- i = input("Enter Option:")
- while i != '9':
- if i == '4':
- add_drive()
- elif i == '3':
- remove_drive()
- elif i == '5':
- view_drives()
- elif i == '1':
- mount_drives()
- elif i == '2':
- unmount_all_drives()
- elif i == '8':
- forcefully_unmount_drives()
- elif i == '6':
- print_usage()
- elif i == '7':
- configuration.main()
- else:
- print("Invalid Option")
- if i != '1' and i != '2':
- print_mount_menu()
- i = input("Enter Option:")
- else:
- break
-
-
- def print_usage():
- """
- Prints the usage message to the terminal
- """
- print("Usage:")
- print("\t-m mounts drives to computer")
- print("\t-u unmounts drives from the computer")
-
-
- def main():
- """
- Parses cmd line input and calls appropriate functions
- """
- if len(sys.argv) > 1:
- if sys.argv[1].lower() == "-m":
- mount_drives()
- elif sys.argv[1].lower() == "-u":
- unmount_all_drives()
- else:
- print("Invalid Command")
- print_usage()
- else:
- manage_mount_file()
-
-
- """
- Makes sure that other programs don't execute the main
- """
- if __name__ == '__main__':
- try:
- main()
- except KeyboardInterrupt:
- exit()
|