def deleteAgentFolder(rmt): """удалить файлы и папку агента если она пуста""" rmt.delTree(AGENT_PATH) if not rmt.errCode in (Error.SUCCESS, Error.FILE_NOT_FOUND, Error.PATH_NOT_FOUND): log.writeln(f" Delete dir {AGENT_PATH} ... ", Log.FAIL) raise ExceptionAgent(rmt.errCode, rmt.errMsg) rmt.delDir(AGENT_HOME_PATH) if not rmt.errCode in (Error.SUCCESS, Error.DIR_NOT_EMPTY): log.writeln(f" Delete dir {AGENT_HOME_PATH} ... ", Log.FAIL) raise ExceptionAgent(rmt.errCode, rmt.errMsg)
def deleteService(rmt): """остановить и удалить сервис""" rmt.ctrlService("stop", SERVICE_NAME) if rmt.errCode in (Error.SUCCESS, Error.SERVICE_NOT_ACTIVE): rmt.ctrlService("delete", SERVICE_NAME) if rmt.errCode != Error.SUCCESS: log.writeln(" Uninstall service ... ", Log.FAIL) raise ExceptionAgent(rmt.errCode, rmt.errMsg) elif rmt.errCode != Error.SERVICE_DOES_NOT_EXIST: log.writeln(" Stop service ... ", Log.FAIL) raise ExceptionAgent(rmt.errCode, rmt.errMsg)
def installService(rmt): """установить сервис""" binPath = f"{cfg.WIN_AGENT_VER_PATH}\\{cfg.DEFAULT_DAEMON_NAME}.exe --config {cfg.WIN_AGENT_VER_PATH}\\{cfg.DEFAULT_DAEMON_NAME}.conf" dispName = cfg.WIN_SERVICE_NAME start = "auto" descr = "Provides system monitoring" rmt.installService(cfg.WIN_SERVICE_NAME, binPath, dispName, start, descr) if rmt.errCode != Error.SUCCESS: log.writeln(" Innstall service ... ", Log.FAIL) raise ExceptionAgent(rmt.errCode, rmt.errMsg)
def cmdUninstall(ver, rmt, log): #--------------------------------------------------------------------------- # получить список сервисов srvNames = rmt.execute("SC queryex type= service state= all") if rmt.errCode != Error.SUCCESS: raise ExceptionAgent(rmt.errCode, rmt.errMsg) if not srvNames: return 2 err = 0 excMsg = " uninstalled ... " for srvName in srvNames: #------------------------------------------------------------------------- # выбрать сервисы zabbix srvName = re.search("(SERVICE_NAME:|ИМЯ_СЛУЖБЫ:) (ZABBIX.*)", srvName, flags=re.I+re.U) if srvName: SERVICE_NAME = srvName.group(2) #----------------------------------------------------------------------- # получить конфигурации сервисов srvConfs = rmt.ctrlService("qc", SERVICE_NAME) if rmt.errCode != Error.SUCCESS: raise ExceptionAgent(rmt.errCode, rmt.errMsg) if not srvConfs: continue for srvConf in srvConfs: srvConf = re.search("(binPath|ИМЯ_ДВОИЧНОГО_ФАЙЛА[\s]*:) (.*)", srvConf, flags=re.I+re.U) if not srvConf: continue try: verPath = srvConf.group(2).split()[0].strip().split('\\')[:-1] AGENT_PATH = "\\".join(verPath) AGENT_HOME_PATH = "\\".join(verPath[:-1]) log.writeln(f" {SERVICE_NAME}") WinAgent.deleteService(rmt) WinAgent.deleteAgentFolder(rmt) log.writeln(excMsg, Log.SUCCESS) #--------------------------------------------------------------------- except ExceptionAgent, exc: log.err(exc.errMsg) log.writeln(excMsg, Log.FAIL) err += 1
def cmdInstall(cfg, rmt, log): try: LOC_TMP_PATH = os.path.join(cfg.LOC_TMP_PATH, rmt.hostIp) # проверить папку с файлами агента устанавливаемой версии LOC_AGENT_VER_PATH = os.path.join(cfg.LOC_AGENTS_PATH, 'win', cfg.AGENT_VER) LOC_AGENT_xOS_PATH = os.path.join(LOC_AGENT_VER_PATH, rmt.xOS) if not os.path.isdir(LOC_AGENT_xOS_PATH): log.writeln(f" Check dir for agent {cfg.AGENT_VER} ... ", Log.FAIL) raise ExceptionAgent(None, f" Local dir {LOC_AGENT_xOS_PATH} is not exists") try: #------------------------------------------------------------------------- # копировать исходные файлы во временную папку dst = os.path.join(LOC_TMP_PATH, cfg.AGENT_VER) msg = f" Copy {LOC_AGENT_xOS_PATH} to {dst} ... " shutil.copytree(LOC_AGENT_xOS_PATH, dst) #------------------------------------------------------------------------- WinAgent.prepareConfig(rmt) except IOError, exc: log.writeln(msg, Log.FAIL) raise ExceptionAgent(None, str(exc)) #------------------------------------------------------------------------- # удалить файлы и папку агента rmt.delTree(cfg.WIN_AGENT_VER_PATH) if not rmt.errCode in (Error.SUCCESS, Error.FILE_NOT_FOUND, Error.PATH_NOT_FOUND): log.writeln(f' Delete dir "{cfg.WIN_AGENT_VER_PATH}" ... ', Log.FAIL) raise ExceptionAgent(rmt.errCode, rmt.errMsg) #--------------------------------------------------------------------------- # создать папку WIN_AGENT_VER_PATH и копировать файлы из tmp rmt.mkDir(cfg.WIN_AGENT_VER_PATH) msg = f" Create dir {cfg.WIN_AGENT_VER_PATH} on remote host ... " if rmt.errCode != Error.SUCCESS: log.writeln(msg, Log.FAIL) raise ExceptionAgent(rmt.errCode, rmt.errMsg) rmt.ftpDnldDir(cfg.FTP_SERVER, f"{rmt.hostIp}/{cfg.AGENT_VER}", cfg.WIN_AGENT_VER_PATH) msg = f" Copy files to {cfg.WIN_AGENT_VER_PATH} on remote host ... " if rmt.errCode != Error.SUCCESS: log.writeln(msg, Log.FAIL) raise ExceptionAgent(rmt.errCode, rmt.errMsg) #--------------------------------------------------------------------------- # удалить временную папку try: shutil.rmtree(LOC_TMP_PATH) except IOError, exc: log.writeln(f" Delete dir {LOC_TMP_PATH} ... ", Log.FAIL) raise ExceptionAgent(rmt.errCode, rmt.errMsg)
class NixAgent(Agent): @staticmethod def cmdStart(cfg, rmt, log): rmt.ctrlService("start", cfg.NIX_SERVICE_NAME) if rmt.errCode in (0, ): return 0 elif rmt.systemd and rmt.errCode == 5: return 2 #elif not rmt.systemd and rmt.errCode == -5: # return 2 else: log.err(rmt.errMsg) return 1 @staticmethod def cmdStop(cfg, rmt, log): rmt.ctrlService("stop", cfg.NIX_SERVICE_NAME) if rmt.errCode in (0, ): return 0 elif rmt.systemd and rmt.errCode == 5: return 2 #elif not rmt.systemd and rmt.errCode == -5: # return 2 else: log.err(rmt.errMsg) return 1 @staticmethod def cmdRestart(cfg, rmt, log): rmt.ctrlService("restart", cfg.NIX_SERVICE_NAME) if rmt.errCode in (0, ): return 0 elif rmt.systemd and rmt.errCode == 5: return 2 #elif not rmt.systemd and rmt.errCode == -5: # return 2 else: log.err(rmt.errMsg) return 1 @staticmethod def cmdInstall(cfg, rmt, log): try: #------------------------------------------------------------------------- # на удаленном хосте определить имя OS OS_NAME = rmt.getOsName() if rmt.errCode != 0: log.writeln(" Determination of the OS name ... ", Log.FAIL) raise ExceptionAgent(rmt.errCode, rmt.errMsg) #------------------------------------------------------------------------- # на удаленном хосте определить версию ядра OS kernelVer = rmt.kernelVer() if rmt.errCode != 0: log.writeln(" Determination of the kernel version ... ", Log.FAIL) raise ExceptionAgent(rmt.errCode, rmt.errMsg) kernelVer = kernelVer.split('.') if kernelVer[0] == 2 and kernelVer[1] <= 4: KERNEL_VER = "linux_2.4" else: KERNEL_VER = "linux_2.6" #------------------------------------------------------------------------- # на локальном хосте подготовить пути для временной папки LOC_TMP_PATH = os.path.join( cfg.LOC_TMP_PATH, rmt.hostIp ) LOC_TMP_AGENT_PATH = os.path.join( LOC_TMP_PATH, cfg.AGENT_VER ) #------------------------------------------------------------------------- # на локальном хосте проверить папку с файлами агента устанавливаемой версии locAgentPath = os.path.join(cfg.LOC_AGENTS_PATH, OS_NAME, KERNEL_VER, cfg.AGENT_VER, rmt.xOS) if not os.path.isdir(locAgentPath): log.writeln(f" Check dir for agent {cfg.AGENT_VER} ... " Log.FAIL) raise ExceptionAgent(None, f" Source dir {locAgentPath} is not exists") #------------------------------------------------------------------------- try: #----------------------------------------------------------------------- # на локальном хосте создать папку в TMP и копировать файлы агента из исходной папки msg = f" Copy {locAgentPath} to {LOC_TMP_AGENT_PATH} ... " shutil.copytree(locAgentPath, LOC_TMP_AGENT_PATH) #----------------------------------------------------------------------- # на локальном хосте подготовить конфигурационный файл msg = " Prepare config file ... " pidFilePath = os.path.join(cfg.NIX_AGENT_VER_PATH, f"{cfg.DEFAULT_DAEMON_NAME}.pid") logFilePath = os.path.join(cfg.NIX_AGENT_VER_PATH, f"{cfg.DEFAULT_DAEMON_NAME}.log") locTmpConfPath = os.path.join(LOC_TMP_AGENT_PATH, f"{cfg.DEFAULT_DAEMON_NAME}.conf") locConfPath = os.path.join(cfg.LOC_AGENTS_PATH, OS_NAME, "tmpl", f"{cfg.DEFAULT_DAEMON_NAME}.conf") with open(locConfPath, "r") as confFile, open(locTmpConfPath, 'w') as tmpConfFile: NixAgent.prepareConfig( confFile, tmpConfFile, hostname = rmt.hostname, logFile = logFilePath, pidFile = pidFilePath, serverIp = cfg.SERVER_IP, listenPort = cfg.AGENT_PORT_ENA ) CONF_PATH = os.path.join(cfg.NIX_AGENT_VER_PATH, f"{cfg.DEFAULT_DAEMON_NAME}.conf") #----------------------------------------------------------------------- # на локальном хосте подготовить скрипт автозапуска агента msg = f" Prepare {cfg.NIX_SERVICE_NAME} autostart script ... " cfgFile = os.path.join(cfg.NIX_AGENT_VER_PATH, f"{cfg.DEFAULT_DAEMON_NAME}.conf") ExecStart = f"{os.path.join(cfg.NIX_AGENT_VER_PATH, "sbin", cfg.DEFAULT_DAEMON_NAME)} -c {cfgFile}" TMP_AUTOSTART_FILE_FULLNAME = os.path.join(cfg.NIX_AGENT_VER_PATH, f"{cfg.NIX_DEFAULT_SERVICE_NAME}.init") locTmpAutostartPath = os.path.join(LOC_TMP_AGENT_PATH, f"{cfg.NIX_DEFAULT_SERVICE_NAME}.init") with open(locTmpAutostartPath, "w") as tmpAutostartFile: #--------------------------------------------------------------------- if rmt.systemd: AUTOSTART_FILE_FULLNAME = f"/lib/systemd/system/{cfg.NIX_SERVICE_NAME}.service" with open(os.path.join(cfg.LOC_AGENTS_PATH, OS_NAME, "tmpl", "{cfg.NIX_DEFAULT_SERVICE_NAME}.systemd"), "r") as autostartFile: ln = autostartFile.readline() while ln: if ln.find("Environment=") == 0: ln = f'Environment="CONFFILE={cfgFile}"\n' elif ln.find("PIDFile=") == 0: ln = f"PIDFile={os.path.join(cfg.NIX_AGENT_VER_PATH, f'{cfg.DEFAULT_DAEMON_NAME}.pid'.)}\n" elif ln.find("ExecStart=") == 0: ln = f"ExecStart={ExecStart}\n" tmpAutostartFile.write(ln) ln = autostartFile.readline() #--------------------------------------------------------------------- else: AUTOSTART_FILE_FULLNAME = f"/etc/init.d/{cfg.NIX_SERVICE_NAME}" with open(os.path.join(cfg.LOC_AGENTS_PATH, OS_NAME, "tmpl", f"{cfg.NIX_DEFAULT_SERVICE_NAME}.init.d"), "r") as autostartFile: ln = autostartFile.readline() while ln: if ln.find("PIDFILE=") == 0: ln = f"PIDFILE={os.path.join(cfg.NIX_AGENT_VER_PATH, f'{cfg.DEFAULT_DAEMON_NAME}.pid')}\n" elif ln.find("START_CMD=") == 0: ln = f'START_CMD="{ExecStart}"\n' tmpAutostartFile.write(ln) ln = autostartFile.readline() except IOError, exc: log.writeln(msg, Log.FAIL) raise ExceptionAgent(None, str(exc)) #------------------------------------------------------------------------- # User # на удаленном хосте создать группу AGENT_USERGROUP rmt.addUsergroup(cfg.NIX_AGENT_USERGROUP) if not rmt.errCode in (0, 9): log.writeln(f' Create usergroup "{cfg.NIX_AGENT_USERGROUP}" ... ', Log.FAIL) raise ExceptionAgent(rmt.errCode, rmt.errMsg) # на удаленном хосте создать пользователя USER agentShell = "/bin/bash" rmt.addUser( usr = Agent.NIX_USER, home = cfg.NIX_AGENT_USER_HOME_PATH, sh = agentShell, grp = cfg.NIX_AGENT_USERGROUP ) if rmt.errCode == 9: rmt.chgUser( usr = Agent.NIX_USER, home = cfg.NIX_AGENT_USER_HOME_PATH, sh = agentShell ) if rmt.errCode != 0: log.writeln( f' Change home dir to "{cfg.NIX_AGENT_USER_HOME_PATH}" and shell to "{agentShell}" for user ... ', Log.FAIL ) raise ExceptionAgent(rmt.errCode, rmt.errMsg) elif rmt.errCode != 0: log.writeln(f' Create user "{Agent.NIX_USER}" ... ', Log.FAIL) raise ExceptionAgent(rmt.errCode, rmt.errMsg) # на удаленном хосте поменять пароль пользователя if rmt.chgPasswd(Agent.NIX_USER, Agent.NIX_PASSWD)!= 0: log.writeln(f' Change password for user "{Agent.NIX_USER}" ... ', Log.FAIL) raise ExceptionAgent(0, rmt.errMsg) # на удаленном хосте создать, если не существует, домашнюю папку пользователя rmt.mkDir(cfg.NIX_AGENT_HOME_PATH, owner=("root", cfg.NIX_AGENT_USERGROUP), mode="u=rwx,g=rwx,o=") if rmt.errCode != 0: log.writeln(f' Create home dir "{cfg.NIX_AGENT_HOME_PATH}" for user ... ', Log.FAIL) raise ExceptionAgent(rmt.errCode, rmt.errMsg) #------------------------------------------------------------------------- # Copy # на удаленном хосте удалить папку AGENT_HOME/agents/AGENT_VER rmt.delTree(cfg.NIX_AGENT_VER_PATH) if rmt.errCode != 0: log.writeln(f' Delete dir "{cfg.NIX_AGENT_VER_PATH}" ... ', Log.FAIL) raise ExceptionAgent(rmt.errCode, rmt.errMsg) #------------------------------------------------------------------------- try: # на локальном хосте подключить удаленный хост по sftp sftp = SFTPClient.getSFTPClient(Agent.NIX_USER, Agent.NIX_PASSWD, rmt.hostIp) # копировать на удаленный хост файлы sftp.putDir(LOC_TMP_AGENT_PATH, cfg.NIX_AGENT_HOME_PATH) # закрыть sftp соединение sftp.close() except IOError, exc: log.writeln(' Copy files to remote host ... ', Log.FAIL) raise ExceptionAgent(None, str(exc)) # на локальном хосте удалить временную папку try: shutil.rmtree(LOC_TMP_PATH, True) except IOError, exc: log.writeln(f" Delete dir {LOC_TMP_PATH} ... ", Log.FAIL) raise ExceptionAgent(None, str(exc))
def cmdUninstall(ver, rmt, log): pattern = "^[[:alpha:]]+[[:blank:]]ALL=\(root\)[[:blank:]]NOPASSWD:[[:blank:]]{}$" if rmt.systemd: AUTOSTART_PATH = "/lib/systemd/system" SUDOERS_START_PTRN = pattern.format("/bin/systemctl[[:blank:]]start[[:blank:]]{}.service") SUDOERS_STOP_PTRN = pattern.format("/bin/systemctl[[:blank:]]stop[[:blank:]]{}.service") SUDOERS_RESTART_PTRN = pattern.format("/bin/systemctl[[:blank:]]restart[[:blank:]]{}.service") else: AUTOSTART_PATH = "/etc/init.d" SUDOERS_START_PTRN = pattern.format("/etc/init.d/{}[[:blank:]]start") SUDOERS_STOP_PTRN = pattern.format("/etc/init.d/{}[[:blank:]]stop") SUDOERS_RESTART_PTRN = pattern.format("/etc/init.d/{}[[:blank:]]restart") # получить список сервисов cmdStr = f"ls {AUTOSTART_PATH} | grep -i --color=never ZABBIX" if ver != "all": cmdStr += f" | grep -i --color=never {ver}" srvNames = rmt.execute(cmdStr) if not srvNames: return 2 err = 0 excMsg = " uninstalled ... " for srvName in srvNames: try: SERVICE_NAME = srvName.strip().rstrip(".service") AUTOSTART_FILE_FULLNAME = f"{AUTOSTART_PATH}/{srvName}" cmdStr = f"cat {AUTOSTART_FILE_FULLNAME} | grep -i --color=never {{}}" cmdStr = cmdStr.format("ExecStart=") if rmt.systemd else cmdStr.format("START_CMD=") execStart = rmt.execute(cmdStr) if rmt.errCode != 0: raise ExceptionAgent(rmt.errCode, rmt.errMsg) path = execStart[0][10:].strip().strip('"').strip("'").split(' -c') CONF_FILE_PATH = path[1].strip() daemonFilePath = path[0].strip().split('/') #----------------------------------------------------------------------- cmdStr = 'cat {} | grep -i --color=never --regexp="^LogFile="' LOG_FILE_PATH = rmt.execute(cmdStr.format(CONF_FILE_PATH)) if rmt.errCode != 0: raise ExceptionAgent(rmt.errCode, rmt.errMsg) LOG_FILE_PATH = LOG_FILE_PATH[0][8:].strip() AGENT_SBIN_PATH = '/'.join(daemonFilePath[:-1]) AGENT_PATH = '/'.join(daemonFilePath[:-2]) AGENT_VER = re.search("v\d+(\.\d+)+", daemonFilePath[-3]) if AGENT_VER: AGENT_VER = AGENT_VER.group(0) AGENT_HOME_PATH = "/".join(daemonFilePath[:-3]) AGENT_BIN_PATH = f"{AGENT_PATH}/bin" log.writeln(f" Agent version: {AGENT_VER}") # остановить агента rmt.ctrlService("stop", SERVICE_NAME) if rmt.systemd and rmt.errCode in (0, 5): # запретить автозапуск агента rmt.ctrlService("disable", SERVICE_NAME) if not rmt.errCode in (0, 1): log.writeln(" Systemd disable agent ... ", Log.FAIL) raise ExceptionAgent(rmt.errCode, rmt.errMsg) elif not rmt.systemd and rmt.errCode in (0, ): pass else: log.writeln(" Stopping agent ... ", Log.FAIL) raise ExceptionAgent(rmt.errCode, rmt.errMsg) # удалить скрипт автозапуска агента rmt.delFile(AUTOSTART_FILE_FULLNAME) if rmt.errCode != 0: log.writeln(f' Delete autostart script "{AUTOSTART_FILE_FULLNAME}" ... ', Log.FAIL) raise ExceptionAgent(rmt.errCode, rmt.errMsg) # удалить разрешения для пользователя на start/stop/restart из sudoers scr = '\n'.join(( ":>/root/sudoers", "chmod u=rw,g=,o= /root/sudoers", "fnd=0", "while read ln; do", f" if [[ ! $ln =~ {SUDOERS_START_PTRN.format(SERVICE_NAME)} ]] && [[ ! $ln =~ {SUDOERS_STOP_PTRN.format(SERVICE_NAME)} ]] && [[ ! $ln =~ {SUDOERS_RESTART_PTRN.format(SERVICE_NAME)} ]]; then", ' >>/root/sudoers echo \"$ln\"', " else", " fnd=1", " fi", "done </etc/sudoers", "ret=$?", "if [ $ret -eq 0 ] && [ $fnd -eq 1 ]; then", " mv -fb /root/sudoers /etc/sudoers", "else", " rm -f /root/sudoers", "fi" )) cmdStr = f">/root/scr echo '{scr}'" cmdStr += "&&chmod u+x /root/scr" cmdStr += "&&/root/scr" cmdStr += "&&rm -f /root/scr" rmt.execute(cmdStr) if rmt.errCode != 0: log.writeln(" Remove start/stop/restart agent from sudoers ... ", Log.FAIL) raise ExceptionAgent(rmt.errCode, rmt.errMsg) # удалить исполняемый файл zbxDaemonFilePath = f"{AGENT_SBIN_PATH}/zabbix_agentd" rmt.delFile(zbxDaemonFilePath) if rmt.errCode != 0: log.writeln(f" Delete {zbxDaemonFilePath} ... ", Log.FAIL) raise ExceptionAgent(rmt.errCode, rmt.errMsg) # удалить zabbix_get файл zbxGetFilePath = f"{AGENT_BIN_PATH}/zabbix_get" rmt.delFile(zbxGetFilePath) if rmt.errCode != 0: log.writeln(f" Delete {zbxGetFilePath} ... ", Log.FAIL) raise ExceptionAgent(rmt.errCode, rmt.errMsg) # удалить zabbix_sender файл zbxSndrFilePath = f"{AGENT_BIN_PATH}/zabbix_sender" rmt.delFile(zbxSndrFilePath) if rmt.errCode != 0: log.writeln(f" Delete {zbxSndrFilePath} ... ", Log.FAIL) raise ExceptionAgent(rmt.errCode, rmt.errMsg) # удалить .conf файл rmt.delFile(CONF_FILE_PATH) if rmt.errCode != 0: log.writeln(f" Delete {CONF_FILE_PATH} ... ", Log.FAIL) raise ExceptionAgent(rmt.errCode, rmt.errMsg) # удалить .log файл rmt.delFile(LOG_FILE_PATH) if rmt.errCode != 0: log.writeln(f" Delete {LOG_FILE_PATH} ... ", Log.FAIL) raise ExceptionAgent(rmt.errCode, rmt.errMsg) if AGENT_PATH != '/': # удалить каталог AGENT_BIN_PATH rmt.delDir(AGENT_BIN_PATH) if rmt.errCode != 0: log.writeln(f" Delete dir {AGENT_BIN_PATH} ... ", Log.FAIL) raise ExceptionAgent(rmt.errCode, rmt.errMsg) # удалить каталог AGENT_SBIN_PATH rmt.delDir(AGENT_SBIN_PATH) if rmt.errCode != 0: log.writeln(f" Delete dir {AGENT_SBIN_PATH} ... ", Log.FAIL) raise ExceptionAgent(rmt.errCode, rmt.errMsg) # если путь содержит версию, удалить каталог агента if AGENT_VER: rmt.delDir(AGENT_PATH) if rmt.errCode != 0: log.writeln(f" Delete dir {AGENT_PATH} ... ", Log.FAIL) raise ExceptionAgent(rmt.errCode, rmt.errMsg) log.writeln(excMsg, Log.SUCCESS) except ExceptionAgent, exc: log.err(exc.errMsg) log.writeln(excMsg, Log.FAIL) err += 1 log.writeln()
except IOError, exc: log.writeln(' Copy files to remote host ... ', Log.FAIL) raise ExceptionAgent(None, str(exc)) # на локальном хосте удалить временную папку try: shutil.rmtree(LOC_TMP_PATH, True) except IOError, exc: log.writeln(f" Delete dir {LOC_TMP_PATH} ... ", Log.FAIL) raise ExceptionAgent(None, str(exc)) # на удаленном хосте изменить владельца и установить разрешения для папки и файлов агента rmt.chgOwner("root", cfg.NIX_AGENT_USERGROUP, cfg.NIX_AGENT_HOME_PATH, True) if rmt.errCode != 0: log.writeln(f' Change owner for dir "{cfg.NIX_AGENT_HOME_PATH}" ... ', Log.FAIL) raise ExceptionAgent(rmt.errCode, rmt.errMsg) rmt.chgMode("u=rwX,g=rwX,o=rX", cfg.NIX_AGENT_HOME_PATH, True) if rmt.errCode != 0: log.writeln(f' Change mode for dir "{cfg.NIX_AGENT_HOME_PATH}" ... ', Log.FAIL) raise ExceptionAgent(rmt.errCode, rmt.errMsg) path = os.path.join(cfg.NIX_AGENT_VER_PATH, "sbin") rmt.chgMode("u=rwx,g=rwx,o=rx", path, True) if rmt.errCode != 0: log.writeln(f' Change mode for dir "{path}" ... ', Log.FAIL) raise ExceptionAgent(rmt.errCode, rmt.errMsg) path = os.path.join(cfg.NIX_AGENT_VER_PATH, "bin") rmt.chgMode('u=rwx,g=rwx,o=rx', path, True) if rmt.errCode != 0:
def cmdRestart(rmt, cfg, log): raise ExceptionAgent(None, " Agent.cmdRestart must be overridden. ")
def cmdStop(rmt, cfg, log): raise ExceptionAgent(None, " Agent.cmdStop must be overridden. ")
def connect(hostIp, sudo): def getPasswd(os): if os == "Win": if hasattr(Auth, "WIN_INSTALLER_USER"): Agent.WIN_INSTALLER_USER = Auth.WIN_INSTALLER_USER if hasattr(Auth, "WIN_INSTALLER_PASSWD"): Agent.WIN_INSTALLER_PASSWD = Auth.WIN_INSTALLER_PASSWD if not Agent.WIN_INSTALLER_PASSWD: if not Agent.WIN_INSTALLER_USER: Agent.WIN_INSTALLER_USER = raw_input("Win-admin authorization required\nUsername: "******"Username: {Agent.WIN_INSTALLER_USER}") Agent.NIX_INSTALLER_PASSWD = getpass("Password: "******"Nix": if hasattr(Auth, "NIX_INSTALLER_USER"): Agent.NIX_INSTALLER_USER = Auth.NIX_INSTALLER_USER if hasattr(Auth, "NIX_INSTALLER_PASSWD"): Agent.NIX_INSTALLER_PASSWD = Auth.NIX_INSTALLER_PASSWD Agent.NIX_USER = Auth.NIX_USER Agent.NIX_PASSWD = Auth.NIX_PASSWD if not Agent.NIX_INSTALLER_PASSWD: if not Agent.NIX_INSTALLER_USER: Agent.NIX_INSTALLER_USER = raw_input("Nix-admin authorization required\nUsername: "******"Username: {Agent.NIX_INSTALLER_USER}") Agent.NIX_INSTALLER_PASSWD = getpass('Password: ') #--------------------------------------------------------------------------- # Try Win #if Agent.WIN_INSTALLER_USER is None or Agent.WIN_INSTALLER_PASSWD is None: # getPasswd("Win") #rmt = WinRemote(hostIp, Agent.WIN_INSTALLER_USER, Agent.WIN_INSTALLER_PASSWD) #hostname = rmt.getHostname() #if rmt.errCode == 0: # rmt.hostname = hostname # rmt.os = "Win" # from winAgent import WinAgent # rmt.agent = WinAgent #elif rmt.errCode == -1: if 1: #------------------------------------------------------------------------- # Try Nix try: if Agent.NIX_INSTALLER_USER is None or Agent.NIX_INSTALLER_PASSWD is None: getPasswd("Nix") if sudo: rmt = NixRemote(hostIp, Agent.NIX_INSTALLER_USER, Agent.NIX_INSTALLER_PASSWD, True) else: rmt = NixRemote(hostIp, Agent.NIX_USER, Agent.NIX_PASSWD, False) rmt.os = "Nix" from nixAgent import NixAgent rmt.agent = NixAgent rmt.hostname = rmt.getHostname() if rmt.errCode != 0: raise ExceptionAgent(rmt.errCode, rmt.errMsg) rmt.systemd = rmt.chkSystemd() if rmt.errCode != 0: raise ExceptionAgent(rmt.errCode, rmt.errMsg) except ExceptionPxssh as exc: raise ExceptionAgent(-1, exc) #------------------------------------------------------------------------- else: raise ExceptionAgent(rmt.errCode, rmt.errMsg) rmt.hostIp = hostIp rmt.xOS = f"x{rmt.getXOS()}" if rmt.errCode != 0: raise ExceptionAgent(rmt.errCode, rmt.errMsg) return rmt
def cmdUninstall(rmt, cfg, log): raise ExceptionAgent(None, " Agent.cmdUninstall must be overridden. ")
def startService(rmt): """запустить агент""" rmt.ctrlService("start", cfg.WIN_SERVICE_NAME) if rmt.errCode != Error.SUCCESS: log.writeln(" Starting agent ... ", Log.FAIL) raise ExceptionAgent(rmt.errCode, rmt.errMsg)