#!/usr/bin/python """ Usage: softlayer_storage.py --type= [--hostname= --username= --password= --mountpoint= ] (mount | unmount) softlayer_storage.py --type= [options] (mount | unmount) Options: -h --help Show help screen --version Show version --type= Type of File Storage to mount ( consistent | nas ) --hostname= SoftLayer Storage hostname --username= SoftLayer Storage LUN username --password= SoftLayer Storage LUN password --mountpoint= The mountpoint to use [default: /mnt/nas] Description: For consistent performance file storate, make sure the host accessing the file storage has been authorized through the SoftLayer portal. """ import os import sys import docopt path = os.path.dirname(os.path.realpath(__file__)) path = os.path.realpath(os.path.join(path, '..', 'lib', 'python')) if path.startswith('/opt'): # if installed into system path, do not muck with things sys.path.append(path) from xcat import xcatutils def mount_nas_storage(hostname, user, passwd, mountPoint): print "Attempting to mount the NAS File Storage at %s" %(mountPoint) if xcatutils.isMounted(mountPoint): raise xcatutils.xCatError("The mount point %s is already in use." %(mountPoint)) cmd = "mount -t cifs //%s/%s -o username=%s,password=%s,rw,nounix,iocharset=utf8,file_mode=0644,dir_mode=0755 %s" %(hostname, user, user, passwd, mountPoint) out,err = xcatutils.run_command(cmd) if err: raise xcatutils.xCatError("Error when mounting. (%s)" %(err)) else: print "Success\n" # To help out with automount, print this msg print "\nNote: To configure automount on reboot, add the following into /etc/fstab:" cmd = "//%s/%s %s cifs defaults,username=%s,password=%s 0 0" %(hostname,user,mountPoint,user,passwd) print "%s\n" %(cmd) def mount_consistent_storage(hostname, user, mountPoint): # TODO: would be good to be able to specify the nfs version as a argument print "Attempting to mount the Consistent Performance File Storage at %s" %(mountPoint) if xcatutils.isMounted(mountPoint): raise xcatutils.xCatError("The mount point %s is already in use." %(mountPoint)) cmd = "mount -t nfs4 %s:/%s %s" %(hostname, user, mountPoint) out,err = xcatutils.run_command(cmd) if err: raise xcatutils.xCatError("Error when mounting. (%s)" %(err)) else: print "Success\n" # To help out with automount, print this msg print "\nNote: To configure automount on reboot, add the following into /etc/fstab:" cmd = "%s:/%s %s nfs4 defaults,hard,intr 0 0" %(hostname,user,mountPoint) print "%s\n" %(cmd) def unmount_storage(mountPoint): print "Attempting to unmount the NAS at %s..." %(mountPoint) if not xcatutils.isMounted(mountPoint): raise xcatutils.xCatError("The mount point %s is NOT mounted." %(mountPoint)) else: cmd = "umount %s" %(mountPoint) out,err = xcatutils.run_command(cmd) if err: print "Encountered error while unmounting..." print err def setup_softlayer_storage(): # # set code defaults to consistent file storage options # requirePassword=False preReqPackages = ['nfs-utils','nfs-utils-lib'] # # if NAS is selected as the type, override the code defaults # if 'nas' in arguments['--type']: requirePassword=True preReqPackages = ['cifs-utils'] # # verify information before starting # if arguments['--hostname'] is None: arguments['--hostname'] = xcatutils.getUserInput("Enter the SoftLayer storage hostname") if arguments['--username'] is None: arguments['--username'] = xcatutils.getUserInput("Enter the SoftLayer storage username") if arguments['--password'] is None and requirePassword: arguments['--password'] = xcatutils.getUserInput("Enter the SoftLayer storage password") # # install prereqs # print "Checking for installed packages: %s" %(preReqPackages) xcatutils.installPackages(preReqPackages) # # mount the file storage # if 'nas' in arguments['--type']: mount_nas_storage(arguments['--hostname'],arguments['--username'],arguments['--password'],arguments['--mountpoint']) elif 'consistent' in arguments['--type']: mount_consistent_storage(arguments['--hostname'],arguments['--username'],arguments['--mountpoint']) if __name__ == '__main__': try: arguments = (docopt.docopt(__doc__, version="1.0")) if not arguments['--type'] in ('nas', 'consistent'): raise xcatutils.xCatError("The type=%s is not a supported file system type." %(arguments['--type'])) if arguments['unmount']: unmount_storage(arguments['--mountpoint']) else: setup_softlayer_storage() except docopt.DocoptExit as e: print e except xcatutils.xCatError as e: print "xCatError: %s" %(e)