fix: 1、修复远程控制功能远程机器没有自动安装rpc依赖的问题;2、修复了skipif.py插件中通过cpu name跳过失效的问题;3、优化了全局配置里面的一些问题;

Description:

Log:
This commit is contained in:
mikigo 2024-04-11 09:52:36 +08:00
parent 77d67f90bc
commit 82bb2263c8
3 changed files with 41 additions and 22 deletions

View File

@ -8,6 +8,7 @@ from enum import Enum
from enum import unique
from getpass import getuser
from os import popen
from os import getenv
from os.path import abspath
from os.path import dirname
from os.path import join
@ -189,13 +190,13 @@ class _GlobalConfig:
END_DATE = log_cli.get("END_DATE", default="")
# ====================== 动态获取变量 ======================
version_cfg = GetCfg("/etc/os-version", "Version")
VERSION = (version_cfg.get("EditionName[zh_CN]") or "") + (
version_cfg.get("MinorVersion") or ""
)
# IP
OS_VERSION = GetCfg("/etc/os-version", "Version")
HOST_IP = str(popen("hostname -I |awk '{print $1}'").read()).strip("\n").strip()
PRODUCT_INFO = popen("cat /etc/product-info").read()
VERSION = (OS_VERSION.get("EditionName[zh_CN]") or "") + (
OS_VERSION.get("MinorVersion") or ""
)
# machine type
# e.g. x86_64
SYS_ARCH = machine()
@ -226,12 +227,15 @@ class _GlobalConfig:
.read()
.split("=")[-1]
.strip("\n")
)
) or getenv("XDG_SESSION_TYPE")
class DisplayServer:
wayland = "wayland"
x11 = "x11"
if DISPLAY_SERVER not in (DisplayServer.x11, DisplayServer.wayland):
raise EnvironmentError(f"DISPLAY_SERVER: {DISPLAY_SERVER} why?")
IS_X11 = DISPLAY_SERVER == DisplayServer.x11
IS_WAYLAND = DISPLAY_SERVER == DisplayServer.wayland

View File

@ -49,15 +49,15 @@ def skipif_cpu_name(args: str):
_skip_key = args.split("&")
for key in _skip_key:
if (
os.popen(
f"echo '{GlobalConfig.PASSWORD}'| "
"sudo -S dmidecode -s system-product-name | awk '{print $NF}'"
)
.read()
.strip("\n")
.replace("-", "")
.replace("&", "")
== key
os.popen(
f"echo '{GlobalConfig.PASSWORD}'| "
"sudo -S dmidecode -s system-product-name | awk '{print $NF}'"
)
.read()
.split("\n")[0]
.replace("-", "")
.replace("&", "")
== key
):
return True
return False
@ -73,3 +73,11 @@ def skipif_os_version(args: str):
if key == GlobalConfig.OS_VERSION.get("MinorVersion"):
return True
return False
if __name__ == '__main__':
a = os.popen(
f"echo '{GlobalConfig.PASSWORD}'| "
"sudo -S dmidecode -s system-product-name | awk '{print $NF}'"
).read().split("\n")[0]
print(a)

View File

@ -60,8 +60,11 @@ def _exclude():
return exclude_str
def _ssh(ip, password, user):
return f"sshpass -p '{password}' ssh {user}@{ip}"
def _transfer_appname(ip, password, user, transfer_appname):
os.system(f'''sshpass -p '{password}' ssh {user}@{ip} "mkdir -p ~/{client_project_path}/apps"''')
os.system(
f"sshpass -p '{password}' rsync -av -e ssh --exclude='__pycache__' "
f"{conf.APPS_PATH}/{transfer_appname} {user}@{ip}:~/{client_project_path}/apps/{transfer_appname}"
@ -70,25 +73,29 @@ def _transfer_appname(ip, password, user, transfer_appname):
def _transfer_to_client(ip, password, user):
os.system(
f'''sshpass -p '{password}' ssh {user}@{ip} "mkdir -p ~/{client_project_path}"'''
f'''{_ssh(ip, password, user)} "mkdir -p ~/{client_project_path}"'''
)
os.system(
f"sshpass -p '{password}' rsync -av -e ssh {_exclude()} {conf.ROOT_DIR}/* "
f"{user}@{ip}:~/{client_project_path}/"
)
os.system(
f'''{_ssh(ip, password, user)} "cd ~/{client_project_path}/ && mkdir apps && touch apps/__init__.py"'''
)
os.system(
f'''{_ssh(ip, password, user)} "cd ~/{client_project_path}/apps/ && touch REMOTE"'''
)
if not os.popen(
f'''sshpass -p "{password}" ssh {user}@{ip} "cd ~/{client_project_path}/ && ls env_ok"'''
f'''{_ssh(ip, password, user)} "cd ~/{client_project_path}/ && ls env_ok"'''
).read().strip():
os.system(
f"sshpass -p '{password}' ssh {user}@{ip} "
f'"cd ~/{client_project_path}/ && '
f'bash env.sh -p {password} && touch env_ok"'
f'{_ssh(ip, password, user)} "cd ~/{client_project_path}/ && bash env.sh -p {password} && touch env_ok"'
)
def _start_client_service(ip, password, user, filename):
_cmd = (
f"nohup sshpass -p '{password}' ssh {user}@{ip} "
f"nohup {_ssh(ip, password, user)} "
f'"cd ~/{client_project_path}/src/remotectl/ && '
f'pipenv run python {filename}" > /tmp/{filename}.log 2>&1 &'
)
@ -114,7 +121,7 @@ def check_rpc_started(filename):
if transfer_appname:
_transfer_appname(ip, password, user, transfer_appname)
tool_status = os.popen(
f'''sshpass -p '{password}' ssh {user}@{ip} "ps -aux | grep {filename} | grep -v grep"'''
f'''{_ssh(ip, password, user)} "ps -aux | grep {filename} | grep -v grep"'''
).read()
if not tool_status:
_transfer_to_client(ip, password, user)