Добавил модуль для работы с ZFS снапшотами
This commit is contained in:
@@ -21,6 +21,12 @@ if not logger.handlers:
|
||||
logger.addHandler(handler)
|
||||
logger.setLevel(logging.INFO)
|
||||
|
||||
# Ожидаемые «ошибки» ZFS при бэкапе — не логируем WARNING при suppress_warnings=True
|
||||
KNOWN_ZFS_ERRORS = (
|
||||
"dataset already exists",
|
||||
"not an earlier snapshot from the same fs",
|
||||
)
|
||||
|
||||
|
||||
class SSHBase:
|
||||
"""
|
||||
@@ -115,7 +121,7 @@ class SSHBase:
|
||||
logger.error(f"Неожиданная ошибка при подключении к {self.hostname}:{self.port}: {e}")
|
||||
raise Exception(f"Неожиданная ошибка при подключении: {e}")
|
||||
|
||||
def cmd(self, command: str, sleep: float = 0.1, out_to_print: bool = False) -> List[str]:
|
||||
def cmd(self, command: str, sleep: float = 0.1, out_to_print: bool = False, suppress_warnings: bool = False) -> List[str]:
|
||||
"""
|
||||
Выполнение команды на удаленном сервере
|
||||
|
||||
@@ -123,6 +129,8 @@ class SSHBase:
|
||||
command: Команда для выполнения
|
||||
sleep: Задержка после выполнения команды (секунды)
|
||||
out_to_print: Не используется (оставлено для обратной совместимости)
|
||||
suppress_warnings: Если True и stderr содержит ожидаемые ZFS-сообщения (KNOWN_ZFS_ERRORS),
|
||||
не логировать WARNING (для чистых логов бэкапа).
|
||||
|
||||
Returns:
|
||||
list: [stdout, stderr] - вывод команды и ошибки
|
||||
@@ -156,7 +164,11 @@ class SSHBase:
|
||||
|
||||
# Если команда завершилась с ошибкой, добавляем информацию в stderr
|
||||
if exit_status != 0:
|
||||
logger.warning(f"Команда завершилась с кодом возврата {exit_status}: {command}")
|
||||
skip_warning = suppress_warnings and any(
|
||||
err in stderr_data.lower() for err in KNOWN_ZFS_ERRORS
|
||||
)
|
||||
if not skip_warning:
|
||||
logger.warning(f"Команда завершилась с кодом возврата {exit_status}: {command}")
|
||||
if not stderr_data.strip():
|
||||
stderr_data = f"Команда завершилась с кодом возврата {exit_status}"
|
||||
else:
|
||||
|
||||
Reference in New Issue
Block a user