From 751d432a8696c7fdceb9d9707c2b3331878342ea Mon Sep 17 00:00:00 2001 From: Rishabh Dave Date: Fri, 24 Jan 2020 16:10:58 +0530 Subject: [PATCH] qa/cephfs: move run_shell and related methods to mount.py LocalFuseMout and LocalKernelMount can directly inherit these methods from CephFSMount via FuseMount and KernelMount respectively. Moving would avoid duplication and would make these methods more accessible for reusing via inheritance. Signed-off-by: Rishabh Dave --- qa/tasks/cephfs/mount.py | 54 ++++++++++++++--- qa/tasks/vstart_runner.py | 122 -------------------------------------- 2 files changed, 47 insertions(+), 129 deletions(-) diff --git a/qa/tasks/cephfs/mount.py b/qa/tasks/cephfs/mount.py index b48be1d2dddd2..3511515fda5be 100644 --- a/qa/tasks/cephfs/mount.py +++ b/qa/tasks/cephfs/mount.py @@ -193,15 +193,55 @@ class CephFSMount(object): return six.ensure_str(p.stdout.getvalue().strip()) def run_shell(self, args, wait=True, stdin=None, check_status=True, - omit_sudo=True): + cwd=None, omit_sudo=True): + args = args.split() if isinstance(args, str) else args + if not cwd: + cwd = self.mountpoint + + return self.client_remote.run(args=args, stdin=stdin, wait=wait, + stdout=BytesIO(), stderr=BytesIO(), + cwd=cwd, check_status=check_status) + + def run_as_user(self, args, user, wait=True, stdin=None, + check_status=True, cwd=None): + if isinstance(args, str): + args = 'sudo -u %s -s /bin/bash -c %s' % (user, args) + elif isinstance(args, list): + cmdlist = args + cmd = '' + for i in cmdlist: + cmd = cmd + i + ' ' + args = ['sudo', '-u', user, '-s', '/bin/bash', '-c'] + args.append(cmd) + if not cwd: + cwd = self.mountpoint + + return self.client_remote.run(args=args, wait=wait, stdin=stdin, + stdout=BytesIO(), stderr=BytesIO(), + check_status=check_status, cwd=cwd) + + def run_as_root(self, args, wait=True, stdin=None, check_status=True, + cwd=None): if isinstance(args, str): - args = args.split() + args = 'sudo ' + args + if isinstance(args, list): + args.insert(0, 'sudo') + if not cwd: + cwd = self.mountpoint + + return self.client_remote.run(args=args, wait=wait, stdin=stdin, + stdout=BytesIO(), stderr=BytesIO(), + check_status=check_status, cwd=cwd) + + def testcmd(self, args, wait=True, stdin=None, cwd=None, omit_sudo=True): + return self.run_shell(args=args, wait=wait, stdin=stdin, cwd=cwd) + + def testcmd_as_user(self, args, user, wait=True, stdin=None, cwd=None): + return self.run_as_user(args=args, user=user, wait=wait, stdin=stdin, + cwd=cwd) - args = ["cd", self.mountpoint, run.Raw('&&'), "sudo"] + args - return self.client_remote.run(args=args, stdout=BytesIO(), - stderr=BytesIO(), wait=wait, - stdin=stdin, check_status=check_status, - omit_sudo=omit_sudo) + def testcmd_as_root(self, args, wait=True, stdin=None, cwd=None): + return self.run_as_root(args=args, wait=wait, stdin=stdin, cwd=cwd) def open_no_data(self, basename): """ diff --git a/qa/tasks/vstart_runner.py b/qa/tasks/vstart_runner.py index 7055ebb7c9d8d..ff71eafdda1d8 100644 --- a/qa/tasks/vstart_runner.py +++ b/qa/tasks/vstart_runner.py @@ -500,7 +500,6 @@ def safe_kill(pid): else: raise - class LocalKernelMount(KernelMount): def __init__(self, ctx, test_dir, client_id): super(LocalKernelMount, self).__init__(ctx, test_dir, client_id, LocalRemote(), None, None, None) @@ -520,67 +519,6 @@ class LocalKernelMount(KernelMount): else: return keyring_path - def run_shell(self, args, wait=True, stdin=None, check_status=True, - omit_sudo=False): - # FIXME maybe should add a pwd arg to teuthology.orchestra so that - # the "cd foo && bar" shenanigans isn't needed to begin with and - # then we wouldn't have to special case this - return self.client_remote.run(args=args, wait=wait, cwd=self.mountpoint, - stdin=stdin, check_status=check_status, - omit_sudo=omit_sudo) - - def run_as_user(self, args, user, wait=True, stdin=None, check_status=True): - # FIXME maybe should add a pwd arg to teuthology.orchestra so that - # the "cd foo && bar" shenanigans isn't needed to begin with and - # then we wouldn't have to special case this - if isinstance(args, str): - args = 'sudo -u %s -s /bin/bash -c %s' % (user, args) - elif isinstance(args, list): - cmdlist = args - cmd = '' - for i in cmdlist: - cmd = cmd + i + ' ' - args = ['sudo', '-u', user, '-s', '/bin/bash', '-c'] - args.append(cmd) - - return self.client_remote.run(args=args, wait=wait, cwd=self.mountpoint, - check_status=check_status, stdin=stdin, - omit_sudo=False) - - def run_as_root(self, args, wait=True, stdin=None, check_status=True): - # FIXME maybe should add a pwd arg to teuthology.orchestra so that - # the "cd foo && bar" shenanigans isn't needed to begin with and - # then we wouldn't have to special case this - if isinstance(args, str): - args = 'sudo ' + args - if isinstance(args, list): - args.insert(0, 'sudo') - - return self.client_remote.run(args=args, wait=wait, cwd=self.mountpoint, - check_status=check_status, - omit_sudo=False) - - def testcmd(self, args, wait=True, stdin=None, omit_sudo=False): - # FIXME maybe should add a pwd arg to teuthology.orchestra so that - # the "cd foo && bar" shenanigans isn't needed to begin with and - # then we wouldn't have to special case this - return self.run_shell(args, wait=wait, stdin=stdin, check_status=False, - omit_sudo=omit_sudo) - - def testcmd_as_user(self, args, user, wait=True, stdin=None): - # FIXME maybe should add a pwd arg to teuthology.orchestra so that - # the "cd foo && bar" shenanigans isn't needed to begin with and - # then we wouldn't have to special case this - return self.run_as_user(args, user=user, wait=wait, stdin=stdin, - check_status=False) - - def testcmd_as_root(self, args, wait=True, stdin=None): - # FIXME maybe should add a pwd arg to teuthology.orchestra so that - # the "cd foo && bar" shenanigans isn't needed to begin with and - # then we wouldn't have to special case this - return self.run_as_root(args, wait=wait, stdin=stdin, - check_status=False) - def setupfs(self, name=None): if name is None and self.fs is not None: # Previous mount existed, reuse the old name @@ -709,66 +647,6 @@ class LocalFuseMount(FuseMount): # to avoid assumptions about daemons' pwd return os.path.abspath("./client.{0}.keyring".format(self.client_id)) - def run_shell(self, args, wait=True, stdin=None, check_status=True, omit_sudo=True): - # FIXME maybe should add a pwd arg to teuthology.orchestra so that - # the "cd foo && bar" shenanigans isn't needed to begin with and - # then we wouldn't have to special case this - return self.client_remote.run(args=args, wait=wait, cwd=self.mountpoint, - stdin=stdin, check_status=check_status, - omit_sudo=omit_sudo) - - def run_as_user(self, args, user, wait=True, stdin=None, check_status=True): - # FIXME maybe should add a pwd arg to teuthology.orchestra so that - # the "cd foo && bar" shenanigans isn't needed to begin with and - # then we wouldn't have to special case this - if isinstance(args, str): - args = 'sudo -u %s -s /bin/bash -c %s' % (user, args) - elif isinstance(args, list): - cmdlist = args - cmd = '' - for i in cmdlist: - cmd = cmd + i + ' ' - args = ['sudo', '-u', user, '-s', '/bin/bash', '-c'] - args.append(cmd) - - return self.client_remote.run(args=args, wait=wait, cwd=self.mountpoint, - check_status=check_status, stdin=stdin, - omit_sudo=False) - - def run_as_root(self, args, wait=True, stdin=None, check_status=True): - # FIXME maybe should add a pwd arg to teuthology.orchestra so that - # the "cd foo && bar" shenanigans isn't needed to begin with and - # then we wouldn't have to special case this - if isinstance(args, str): - args = 'sudo ' + args - if isinstance(args, list): - args.insert(0, 'sudo') - - return self.client_remote.run(args=args, wait=wait, cwd=self.mountpoint, - check_status=check_status, - omit_sudo=False) - - def testcmd(self, args, wait=True, stdin=None, omit_sudo=True): - # FIXME maybe should add a pwd arg to teuthology.orchestra so that - # the "cd foo && bar" shenanigans isn't needed to begin with and - # then we wouldn't have to special case this - return self.run_shell(args, wait=wait, stdin=stdin, check_status=False, - omit_sudo=omit_sudo) - - def testcmd_as_user(self, args, user, wait=True, stdin=None): - # FIXME maybe should add a pwd arg to teuthology.orchestra so that - # the "cd foo && bar" shenanigans isn't needed to begin with and - # then we wouldn't have to special case this - return self.run_as_user(args, user=user, wait=wait, stdin=stdin, - check_status=False) - - def testcmd_as_root(self, args, wait=True, stdin=None): - # FIXME maybe should add a pwd arg to teuthology.orchestra so that - # the "cd foo && bar" shenanigans isn't needed to begin with and - # then we wouldn't have to special case this - return self.run_as_root(args, wait=wait, stdin=stdin, - check_status=False) - def setupfs(self, name=None): if name is None and self.fs is not None: # Previous mount existed, reuse the old name -- 2.39.5