diff --git a/README.md b/README.md index f843e97..ea3e8c5 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,68 @@ -### Network devices backup. +# Network devices backup. -Раз в сутки, в указанное время, подключается к сетевым устройствам. -Отправляет коммит в удалённый репозиторий. +Скрипт на python для автоматизации сбора backup с сетевых устройств. +Используется: +- Python 3.13 +- "gitpython>=3.1.44" - для работы с гитом +- "netmiko>=4.5.0" - для подключения к сетевым устройствам +- "schedule>=1.2.2" - для периодического выполнения backup -Python 3.13 -Используются библиотеки: -- "gitpython>=3.1.44" - для работы с гитом -- "netmiko>=4.5.0" - для подключения к сетевым устройствам -- "schedule>=1.2.2" - для периодического выполнения backup +## Описание работы: +После запуска клонирует удалённый репозиторий. +Проходит по списку устройств, подключается по ssh и получает backup. +Если есть изменения в конфиге - делает комит в локальный репозиторий. +Пушит все комиты в удалённый репозиторий. +Повторяет раз в сутки в указанное время. -Для запуска. -Переменные окружения (см. app/config/.env-template) -app/config/config.ini -Пример конфиг файла см. app/config/config-template.ini -Положить файл со списком устройств в папку config \ No newline at end of file +## Возможности +- Сбор backup с mikrotik, snr, cisco(ios), ряд моделей cisco small business +- Удаление локального гит репозитория полсе пуша в удалённый. +- Разбивать бэкапы по папкам внутри репозитория (по регулярному выражению от имени хоста) +- Отправлять оповещение на почту, если есть ошибки при снятии бэкапов. +- Работать локально, без пуша в удалённый репозиторий + +## Использование +### Docker +Для запуска +- Создать папку для проекта. +- Внутри папки создать: +- - Файл docker-compose.yaml +- - Папку logs (в эту папку будут писаться логи) +- - Папку config (в этой папке будет конфиг файл и список сетевых устройств) +- - Папку backups (в этой папке будет git репозиторий с backup-ами ) + +Пример docker-compose файла: app/docker/docker-compose.yaml + +Закомментированные переменные нужны, только в случае, если используются соответствующие функции. + +```yaml +services: + net-backup: + image: git.sm8255082.ru/osnova/net-backup:1.2.0 + restart: "no" + volumes: + - ./logs:/app/logs + - ./config:/app/config + - ./backups:/app/backups + environment: + - TZ=Europe/Moscow # Часовой пояс. + - NET_DEV_USER=admin # Имя пользователя для подключаться к устройствам. + #- NET_DEV_DOMAIN=local # Домен, если используется доменная учётная запись. + - NET_DEV_PWD=password # Пароль от УЗ для подключения к устройствам. + #- GIT_USERNAME=git_user # Название токена, используемого для пуша коммитов в gitlab. + #- GIT_TOKEN=bla-bla-lba # Токен, используемый для пуша коммитов в gitlab. + #- MAIL_USER=mail_user # Пользователь для авторизации на smtp сервере + #- MAIL_PWD=bla-bla-lba # Пароль для авторизации на smtp сервере +``` + +### Настройка +В папке config: +- Создать файл config.ini (пример содержимого app/config/config-template.ini) +- Создать файл dev_list.txt (список устройств) + +Пример содержимого dev_list.txt, которое попадёт под регулярное выражение по умолчанию. +```text +HOME-GW01 192.168.254.1 MikroTik RB5009UPr+S+ +HOME-ASW02 192.168.250.202 MikroTik CRS310-8G+2S+ +``` diff --git a/app/config/config-template.ini b/app/config/config-template.ini index 7b3434b..3be2073 100644 --- a/app/config/config-template.ini +++ b/app/config/config-template.ini @@ -3,14 +3,19 @@ # False \ True - включение\отключение отправки оповещения в телеграм send: False - +# Конфиг для отправки оповещений на почту телеграм [mail] # False \ True - включение\отключение отправки оповещения на почту send: False +# Адрес smtp сервера server: smtp.example.com +# Порт smtp сервера port: 25 +# Адрес с которого отправляются оповещения from_address: net-bcp@example.com +# Адрес или список адресов, на которые отправляется оповещений to_address: engineer@example.com, network_manager@example.com +# Тема письма subject: Warning in backup network device # Конфиг гит репозитория @@ -20,6 +25,7 @@ push: False # Пользователь в локальном гите user: net-bcp mail: net-bcp@example.com + # Настройки для удалённого репозитория # Пока только https protocol: https @@ -45,9 +51,11 @@ folder_name_pattern: ^(.*?)- min_string_count: 50 [net_dev] +# True \ False - создание лога подключения к устройству (для тестов на одном устройстве) debug: False # Порт на который подключаться по ssh ssh_port: 22 +# Время, которое netmiko ждёт результата введённой команды read_timeout: 30 [log] diff --git a/docker/docker-compose.yaml b/docker/docker-compose.yaml index 7cb1c5d..7760e85 100644 --- a/docker/docker-compose.yaml +++ b/docker/docker-compose.yaml @@ -1,4 +1,3 @@ -version: '3.3' services: net-backup: image: git.sm8255082.ru/osnova/net-backup:1.2.0 diff --git a/pyproject.toml b/pyproject.toml index f2c3f3a..16b1224 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "net-backup" -version = "0.1.0" +version = "1.2.0" description = "Create backup network devices" readme = "README.md" requires-python = ">=3.13"