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