"""clientutils module contains functions required for performing certain operations on client Supported Wrappers :- ----------- *) umount *) umountall *) mount *) mountall """ import atfutils import hostutils from atfglobals import GlobalObj import pdb def umount(mountkey): """unmounts a mountpoint Parameters: mountkey : name given to a mount as specified in testenv.cfg file. Ex:-"mount1" Returns: Success : 0 Failure : 1` """ logger = GlobalObj.getLoggerObj() base_command = "umount" env = GlobalObj.getTestenvObj() cm = GlobalObj.getConnectionsManagerObj() mount_obj = env.getMount(mountkey) if not mount_obj: logger.error("InValid Mount. '%s' not defined in TestEnvironment" % mountkey) return 1 clientkey = mount_obj.client client_connection = cm.getConnection(clientkey) if not client_connection: logger.error("SSH connection to host '%s' has not been established" % clientkey) return 1 command = ' '.join([base_command, mount_obj.dir]) logger.debug('%s: Executing Command: %s' % (clientkey, command)) output = client_connection.executecommand(command) return_status = atfutils.assert_success(output['exitstatus']) atfutils.print_stdout(output['stdoutdata']) atfutils.print_stderr(output['stderrdata']) if return_status: stdoutdata = str(output["stdoutdata"]) if ((stdoutdata.rfind("not found")) or (stdoutdata.rfind("not mount"))): return_status = 0 else: logger.error("Unable to umount %s" % mountkey) return return_status def umountall(): """unmounts all mount specified in testenv.cfg file. Ex:- mount1, mount2 etc Parameters: None Returns: Success : 0 Failure : 1` """ env = GlobalObj.getTestenvObj() failure_flag = False mounts_keys = env.getMountsKeys() for mountkey in mounts_keys: return_status = umount(mountkey) if return_status: failure_flag = True if failure_flag: return 1 else: return 0 def mount(mountkey): """mounts a filesystem Parameters: mountkey : name given to a mount as specified in testenv.cfg file. Ex:-"mount1" Returns: Success : 0 Failure : 1` """ logger = GlobalObj.getLoggerObj() base_command = "mount" env = GlobalObj.getTestenvObj() cm = GlobalObj.getConnectionsManagerObj() command = [base_command] options = [] mount_obj = env.getMount(mountkey) if not mount_obj: logger.error("InValid Mount. %s not defined in TestEnvironment" % mountkey) return 1 clientkey = mount_obj.client client_connection = cm.getConnection(clientkey) if not client_connection: logger.error("SSH connection to host '%s' has not been established" % clientkey) return 1 return_status = hostutils.mkdir(clientkey, mount_obj.dir) if return_status: return return_status mountdevice_obj = mount_obj.device device = mountdevice_obj.hostname + ":/" + mountdevice_obj.volumename options.extend(["-t", mount_obj.type]) if mount_obj.logfile: options.extend(["-o", ("log-file="+mount_obj.logfile), "log-level=INFO"]) if mount_obj.options: options.extend([mount_obj.option]) options.extend([device, mount_obj.dir]) command.extend(options) command = ' '.join(command) logger.debug('%s: Executing Command: %s' % (clientkey, command)) output = client_connection.executecommand(command) return_status = atfutils.assert_success(output['exitstatus']) atfutils.print_stdout(output['stdoutdata']) atfutils.print_stderr(output['stderrdata']) return return_status def mountall(): """mounts a filesystem for all mounts specified in testenv.cfg file. Parameters: None Returns: Success : 0 Failure : 1` """ env = GlobalObj.getTestenvObj() mounts_keys = env.getMountsKeys() for mountkey in mounts_keys: return_status = mount(mountkey) if return_status: return return_status return 0 def execute_on_mount(mountkey, command, commandInput=None): """ """ logger = GlobalObj.getLoggerObj() env = GlobalObj.getTestenvObj() mount_obj = env.getMount(mountkey) if not mount_obj: logger.error("InValid Mount. %s not defined in TestEnvironment" % mountkey) return 1 clientkey = mount_obj.client mountdir = mount_obj.dir command = "cd " + mountdir + " ;" + command output = hostutils.execute_command(clientkey, command, commandInput) return output['exitstatus'] __all__ = ['execute_on_mount', 'umount', 'umountall', 'mount', 'mountall'] ##def umountall(clientkey): ## """ ## """ ## base_command = "umount " ## env = GlobalObj.get_testenv_obj() ## cm = GlobalObj.get_connectionsmanager_obj() ## client_obj = env.getclient(clientkey) ## mountdir = client_obj.mountdir ## volume = client_obj.device ## client = cm.getconnection(clientkey) ## ## mountpoints = [] ## success_flag = False ## failure_flag = False ## command = "mount | grep " + mountdir ## output = client.executecommand(command) ## if not output["exitstatus"]: ## for data in output["stdoutdata"]: ## mountpoints.append(data.split(" ")[2]) ## ## for mountpoint in mountpoints: ## command = base_command + mountpoint ## output = client.executecommand(command) ## return_code = utils.assert_success(output['exitstatus']) ## if return_code: ## failure_flag = True ## else: ## success_flag = True ## continue ## ## if failure_flag: ## return 1 ## ## mountpoints = [] ## success_flag = False ## failure_flag = False ## command = "mount | grep " + volume ## output = client.executecommand(command) ## if not output["exitstatus"]: ## for data in output["stdoutdata"]: ## mountpoints.append(data.split(" ")[2]) ## ## for mountpoint in mountpoints: ## command = base_command + mountpoint ## output = client.executecommand(command) ## return_code = utils.assert_success(output['exitstatus']) ## if return_code: ## failure_flag = True ## else: ## success_flag = True ## continue ## ## if failure_flag: ## return 1 ## ## return 0 ##def cd_mount(mountkey): ## """ ## """ ## env = GlobalObj.getTestenvObj() ## mount_obj = env.getMount(mountkey) ## if not mount_obj: ## print "InValid Mount. %s not defined in TestEnvironment" % mountkey ## return 1 ## ## clientkey = mount_obj.client ## dirpath = mount_obj.dir ## return_status = hostutils.cd(clientkey, dirpath) ## return return_status ## ##def cd_allmounts(): ## """ ## """ ## env = GlobalObj.getTestenvObj() ## mounts_keys = env.getMountsKeys() ## for mountkey in mounts_keys: ## return_status = cd_mount(mountkey) ## if return_status: ## return return_status ## ## return 0