From: Ramana Raja Date: Thu, 24 Sep 2020 13:53:09 +0000 (+0530) Subject: vstart_runner: add write_file and sudo_write_file X-Git-Tag: v16.1.0~886^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a177b470aa48a84e5346b310efa4fd626025dbfa;p=ceph.git vstart_runner: add write_file and sudo_write_file ... methods in LocalRemote class. These methods are called in some of the recently added cephfs tests. They were implemented in teuthology's Remote class, but not in vstart_runner's LocalRemote class. Hence some cephfs tests couldn't be run locally using vstart_runner without this change. Signed-off-by: Ramana Raja --- diff --git a/qa/tasks/vstart_runner.py b/qa/tasks/vstart_runner.py index 334ed172f363..4d374101a438 100644 --- a/qa/tasks/vstart_runner.py +++ b/qa/tasks/vstart_runner.py @@ -307,6 +307,43 @@ class LocalRemote(object): from tempfile import mktemp return mktemp(suffix=suffix, dir=parentdir) + def write_file(self, path, data, sudo=False, mode=None, owner=None, + mkdir=False, append=False): + """ + Write data to file + + :param path: file path on host + :param data: str, binary or fileobj to be written + :param sudo: use sudo to write file, defaults False + :param mode: set file mode bits if provided + :param owner: set file owner if provided + :param mkdir: preliminary create the file directory, defaults False + :param append: append data to the file, defaults False + """ + dd = 'sudo dd' if sudo else 'dd' + args = dd + ' of=' + path + if append: + args += ' conv=notrunc oflag=append' + if mkdir: + mkdirp = 'sudo mkdir -p' if sudo else 'mkdir -p' + dirpath = os.path.dirname(path) + if dirpath: + args = mkdirp + ' ' + dirpath + '\n' + args + if mode: + chmod = 'sudo chmod' if sudo else 'chmod' + args += '\n' + chmod + ' ' + mode + ' ' + path + if owner: + chown = 'sudo chown' if sudo else 'chown' + args += '\n' + chown + ' ' + owner + ' ' + path + omit_sudo = False if sudo else True + self.run(args=args, stdin=data, omit_sudo=omit_sudo) + + def sudo_write_file(self, path, data, **kwargs): + """ + Write data to file with sudo, for more info see `write_file()`. + """ + self.write_file(path, data, sudo=True, **kwargs) + def _perform_checks_and_return_list_of_args(self, args, omit_sudo): # Since Python's shell simulation can only work when commands are # provided as a list of argumensts...