1*1a20a9a0SJakub Kicinski# SPDX-License-Identifier: GPL-2.0
2*1a20a9a0SJakub Kicinski
3*1a20a9a0SJakub Kicinskiimport os
4*1a20a9a0SJakub Kicinskiimport string
5*1a20a9a0SJakub Kicinskiimport subprocess
6*1a20a9a0SJakub Kicinskiimport random
7*1a20a9a0SJakub Kicinski
8*1a20a9a0SJakub Kicinskifrom lib.py import cmd
9*1a20a9a0SJakub Kicinski
10*1a20a9a0SJakub Kicinski
11*1a20a9a0SJakub Kicinskiclass Remote:
12*1a20a9a0SJakub Kicinski    def __init__(self, name, dir_path):
13*1a20a9a0SJakub Kicinski        self.name = name
14*1a20a9a0SJakub Kicinski        self.dir_path = dir_path
15*1a20a9a0SJakub Kicinski        self._tmpdir = None
16*1a20a9a0SJakub Kicinski
17*1a20a9a0SJakub Kicinski    def __del__(self):
18*1a20a9a0SJakub Kicinski        if self._tmpdir:
19*1a20a9a0SJakub Kicinski            cmd("rm -rf " + self._tmpdir, host=self)
20*1a20a9a0SJakub Kicinski            self._tmpdir = None
21*1a20a9a0SJakub Kicinski
22*1a20a9a0SJakub Kicinski    def cmd(self, comm):
23*1a20a9a0SJakub Kicinski        return subprocess.Popen(["ssh", "-q", self.name, comm],
24*1a20a9a0SJakub Kicinski                                stdout=subprocess.PIPE, stderr=subprocess.PIPE)
25*1a20a9a0SJakub Kicinski
26*1a20a9a0SJakub Kicinski    def _mktmp(self):
27*1a20a9a0SJakub Kicinski        return ''.join(random.choice(string.ascii_lowercase) for _ in range(8))
28*1a20a9a0SJakub Kicinski
29*1a20a9a0SJakub Kicinski    def deploy(self, what):
30*1a20a9a0SJakub Kicinski        if not self._tmpdir:
31*1a20a9a0SJakub Kicinski            self._tmpdir = "/tmp/" + self._mktmp()
32*1a20a9a0SJakub Kicinski            cmd("mkdir " + self._tmpdir, host=self)
33*1a20a9a0SJakub Kicinski        file_name = self._tmpdir + "/" + self._mktmp() + os.path.basename(what)
34*1a20a9a0SJakub Kicinski
35*1a20a9a0SJakub Kicinski        if not os.path.isabs(what):
36*1a20a9a0SJakub Kicinski            what = os.path.abspath(self.dir_path + "/" + what)
37*1a20a9a0SJakub Kicinski
38*1a20a9a0SJakub Kicinski        cmd(f"scp {what} {self.name}:{file_name}")
39*1a20a9a0SJakub Kicinski        return file_name
40