Compare commits

..

2 Commits
main ... dev1.2

Author SHA1 Message Date
sergey 0f2f4c2fba upd README.md 2025-07-09 21:34:47 +03:00
sergey bfd0dba360 upd README.md 2025-07-09 21:27:19 +03:00
4 changed files with 148 additions and 16 deletions

151
README.md
View File

@ -1,17 +1,142 @@
### 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" - для работы с гитом Проходит по списку устройств, подключается по ssh и получает backup.
- "netmiko>=4.5.0" - для подключения к сетевым устройствам Если есть изменения в конфиге - делает комит в локальный репозиторий.
- "schedule>=1.2.2" - для периодического выполнения backup Пушит все комиты в удалённый репозиторий.
Повторяет раз в сутки в указанное время.
Для запуска. ## Возможности
Переменные окружения (см. app/config/.env-template) - Сбор backup с mikrotik, snr, cisco(ios), ряд моделей cisco small business
app/config/config.ini - Удаление локального гит репозитория полсе пуша в удалённый.
Пример конфиг файла см. app/config/config-template.ini - Разбивать бэкапы по папкам внутри репозитория (по регулярному выражению от имени хоста)
Положить файл со списком устройств в папку config - Отправлять оповещение на почту, если есть ошибки при снятии бэкапов.
- Работать локально, без пуша в удалённый репозиторий
## Использование
### 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 (список устройств)
Пример содержимого config.ini
```text
# Конфиг для отправки оповещений через телеграм
[tg]
# 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
# Конфиг гит репозитория
[git]
# False \ True - включение\отключение отправки файлов в удалённый репозиторий
push: False
# Пользователь в локальном гите
user: net-bcp
mail: net-bcp@example.com
# Настройки для удалённого репозитория
# Пока только https
protocol: https
# url
remote: gitlab.example.com.ru/secure/backup-network-device.git
# ветка
branch: main
# Удаление локального репозитория после push
remove_local: False
[bcp]
# Файл со списком устройств. Должен лежать в папке config
file: dev_list.txt
# Регулярное выражение по которому будет парситься список устройств
pattern:(?P<name>\S+) (?P<ip>\d+\.\d+\.\d+\.\d+) (?P<vendor>\S+) (?P<model>\S+)
# Во сколько будет делаться бэкап
start_at: 18:59
# True \ False - Создание папок внутри репозитория. Если False, то все файлы будут сохраняться в корень
in_folder: True
# Регулярное выражение по которому будет парситься имя папки из названия девайса
folder_name_pattern: ^(.*?)-
# Если количество строк в конфиге меньше указанного значения - ошибка, изменения не записываются.
min_string_count: 50
[net_dev]
# True \ False - создание лога подключения к устройству (для тестов на одном устройстве)
debug: False
# Порт на который подключаться по ssh
ssh_port: 22
# Время, которое netmiko ждёт результата введённой команды
read_timeout: 30
[log]
# Уровень логов в консоль
console_lvl: 20
# Уровень логов в файл
file_lvl: 30
# Формат даты в логе
date_format: %Y-%m-%d %H:%M:%S
# Формат лога
format: [%(asctime)s.%(msecs)03d] %(module)-25s:%(lineno)4d | %(funcName)-20s| %(levelname)-8s | %(message)s
```
Пример содержимого dev_list.txt, которое попадёт под регулярное выражение по умолчанию.
```text
HOME-GW01 192.168.254.1 MikroTik RB5009UPr+S+
HOME-ASW02 192.168.250.202 MikroTik CRS310-8G+2S+
```

View File

@ -3,14 +3,19 @@
# False \ True - включение\отключение отправки оповещения в телеграм # False \ True - включение\отключение отправки оповещения в телеграм
send: False send: False
# Конфиг для отправки оповещений на почту телеграм
[mail] [mail]
# False \ True - включение\отключение отправки оповещения на почту # False \ True - включение\отключение отправки оповещения на почту
send: False send: False
# Адрес smtp сервера
server: smtp.example.com server: smtp.example.com
# Порт smtp сервера
port: 25 port: 25
# Адрес с которого отправляются оповещения
from_address: net-bcp@example.com from_address: net-bcp@example.com
# Адрес или список адресов, на которые отправляется оповещений
to_address: engineer@example.com, network_manager@example.com to_address: engineer@example.com, network_manager@example.com
# Тема письма
subject: Warning in backup network device subject: Warning in backup network device
# Конфиг гит репозитория # Конфиг гит репозитория
@ -20,6 +25,7 @@ push: False
# Пользователь в локальном гите # Пользователь в локальном гите
user: net-bcp user: net-bcp
mail: net-bcp@example.com mail: net-bcp@example.com
# Настройки для удалённого репозитория # Настройки для удалённого репозитория
# Пока только https # Пока только https
protocol: https protocol: https
@ -45,9 +51,11 @@ folder_name_pattern: ^(.*?)-
min_string_count: 50 min_string_count: 50
[net_dev] [net_dev]
# True \ False - создание лога подключения к устройству (для тестов на одном устройстве)
debug: False debug: False
# Порт на который подключаться по ssh # Порт на который подключаться по ssh
ssh_port: 22 ssh_port: 22
# Время, которое netmiko ждёт результата введённой команды
read_timeout: 30 read_timeout: 30
[log] [log]

View File

@ -1,4 +1,3 @@
version: '3.3'
services: services:
net-backup: net-backup:
image: git.sm8255082.ru/osnova/net-backup:1.2.0 image: git.sm8255082.ru/osnova/net-backup:1.2.0

View File

@ -1,6 +1,6 @@
[project] [project]
name = "net-backup" name = "net-backup"
version = "0.1.0" version = "1.2.0"
description = "Create backup network devices" description = "Create backup network devices"
readme = "README.md" readme = "README.md"
requires-python = ">=3.13" requires-python = ">=3.13"