Compare commits
2 Commits
Author | SHA1 | Date |
---|---|---|
|
0f2f4c2fba | |
|
bfd0dba360 |
151
README.md
151
README.md
|
@ -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+
|
||||||
|
```
|
||||||
|
|
|
@ -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]
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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"
|
||||||
|
|
Loading…
Reference in New Issue