diff --git a/qa/tasks/cephfs/mount.py b/qa/tasks/cephfs/mount.py index d3cb0a429ed..03fb38cf60e 100644 --- a/qa/tasks/cephfs/mount.py +++ b/qa/tasks/cephfs/mount.py @@ -194,15 +194,49 @@ 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): - if isinstance(args, str): - args = args.split() + cwd=None, omit_sudo=True): + args = args.split() if isinstance(args, str) else args + # XXX: all commands ran with CephFS mount as CWD must be executed with + # superuser privileges when tests are being run using teuthology. + if args[0] != 'sudo': + args.insert(0, 'sudo') + if not cwd: + cwd = self.mountpoint - args = ["cd", self.mountpoint, run.Raw('&&'), "sudo"] + args - return self.client_remote.run(args=args, stdout=StringIO(), - stderr=StringIO(), wait=wait, - stdin=stdin, check_status=check_status, - omit_sudo=omit_sudo) + 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 = '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 open_no_data(self, basename): """ diff --git a/qa/tasks/vstart_runner.py b/qa/tasks/vstart_runner.py index 919ac92c58b..f19cd112aa5 100644 --- a/qa/tasks/vstart_runner.py +++ b/qa/tasks/vstart_runner.py @@ -512,7 +512,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) @@ -532,67 +531,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 @@ -721,66 +659,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