40 lines
1.1 KiB
Python
40 lines
1.1 KiB
Python
# 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
|