| # SPDX-License-Identifier: GPL-2.0 |
| |
| import os |
| import string |
| import subprocess |
| import random |
| |
| from lib.py import cmd |
| |
| |
| class Remote: |
| def __init__(self, name, dir_path): |
| self.name = name |
| self.dir_path = dir_path |
| self._tmpdir = None |
| |
| def __del__(self): |
| if self._tmpdir: |
| cmd("rm -rf " + self._tmpdir, host=self) |
| self._tmpdir = None |
| |
| def cmd(self, comm): |
| return subprocess.Popen(["ssh", "-q", self.name, comm], |
| stdout=subprocess.PIPE, stderr=subprocess.PIPE) |
| |
| def _mktmp(self): |
| return ''.join(random.choice(string.ascii_lowercase) for _ in range(8)) |
| |
| def deploy(self, what): |
| if not self._tmpdir: |
| self._tmpdir = "/tmp/" + self._mktmp() |
| cmd("mkdir " + self._tmpdir, host=self) |
| file_name = self._tmpdir + "/" + self._mktmp() + os.path.basename(what) |
| |
| if not os.path.isabs(what): |
| what = os.path.abspath(self.dir_path + "/" + what) |
| |
| cmd(f"scp {what} {self.name}:{file_name}") |
| return file_name |