Пример #1
0
 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)
Пример #2
0
 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)
Пример #3
0
 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)
Пример #4
0
  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
Пример #5
0
 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)
Пример #6
0
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))
Пример #7
0
  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()
Пример #8
0
      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. ")
Пример #10
0
 def cmdStop(rmt, cfg, log):
   raise ExceptionAgent(None, "    Agent.cmdStop must be overridden. ")
Пример #11
0
  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
Пример #12
0
 def cmdUninstall(rmt, cfg, log):
   raise ExceptionAgent(None, "    Agent.cmdUninstall must be overridden. ")
Пример #13
0
 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)