187

Ansible для Mikrotik: бэкапы по identity и псевдо-иммутабельность1

Внезапно появилось у меня 50 микротиков по филиалам. Задача – настроить бэкап в систему контроля версий и получить возможность выполнить какую-то настройку на всех микротиках, где этой настройки нет. Вторая задача стояла – научиться что-то делать в ansible. Тут ansible не содержит особых преимуществ перед обычным bash скриптом, кроме, может, скорости работы за счет параллельности выполнения.


Все мануалы, что я нашла, содержали инструкцию по бэкапу в ansible одного микротика и такие типа «экстраполируйте сами». Ну зашибись, вся проблема в том, что имя бэкапа задаётся вручную, а если микротиков много, то как-то сделанные бэкапы надо различать.


В микротике есть поле identity и логично было бы именем из identity и называть бэкап. Но вначале я не нашла как его сохранить в переменную и пошла задавать переменные вручную. Кому интересно про identity – переходите к способу 2.


Я опущу, как ставить ansible, задавать пароли и шифровать их, это как раз легко гуглится.


Способ с заданием имени бэкапа в переменной вручную.

ansible_user должен иметь доступ на микротик full, а сервер, с которого запускаете yml должен иметь доступ по ssh на микротик. При этом либо надо разок законнектиться по ssh до этого и сохранить ключи, либо отключить проверку ssh ключей в ansible.


Пикабу съедает пробелы. Ссылка на код текстом будет в конце

Но всё же меня глодала мысль, что можно использовать identity, а тут удачно работа оплатила курсы по всяким там девопс штукам и мне рассказали про register. Так что нет ничего невозможного, смотрите далее.


Способ с бэкапами микротика по identity

Тут проблема в том, что stdout_lines возвращает штуку типа [[u’name: Kostroma]] и как я ни крутила – как к массиву я к ней обратиться не могу. Так что немного через задницу (буду рада, если подскажете красивое решение) из этой строки выковыривается строка с непосредственно identity.


Теперь убираем в hosts file_name

Про то, как делать текстовый бэкап – в примере 1, скрестить ужа с ежом можете сами.

Мой скрипт по запихиванию в систему контроля версий и отсылки на почту. Вот тут я писала подробнее как настроить SVN


#!/bin/bash

now=$(date +"%d_%m_%Y")

rm /usr/scripts/log.txt

ansible-playbook --vault-password-file /etc/ansible/vault_pass_file /usr/scripts/mik-backup.yml >> /usr/scripts/log.txt

cd /usr/svn_backup_repo/DFL_BACKUPS

svn add mikrotik/* --force -q >> /usr/scripts/log.txt

svn commit -m "added backups $now" >> /usr/scripts/log.txt

/usr/bin/mail it@mydomain.ru < /usr/scripts/log.txt -s "Отчет о бэкапах Mikrotik"


Иммутабельность – это неизменность. То есть если уже, например, в файле есть такие изменения, то второй раз они не делаются. Это то, в чем фишка Ansible и то, что не реализовано для микротиков (так как например в firewall важен порядок применения – это одна из причин, почему в его конфиге не поддерживается иммутабельность).


Теперь сюжет из жизни: мне понадобилось вкатить на все микротики одинаковый фильтр сетей OSPF – оставить только серые сети и фильтрануть по маске 10.0.0.0/8. При этом на каких-то микротиках я это уже делала, но не помню на каких. Прощелкать 50 штук – ну такая себе забава.


Итого сливается бэкап в текстовом виде, идет поиск по нужной строке и если она не найдена, то выполняем команду. А если найдена – ничего не делаем. Такая вот псевдо-иммутабельность получается. Да, один скрипт – одна команда, что не очень удобно, под список команд надо дорабатывать.

Сылка на весь код текстом вот

Ну и я не претендую на гуру, только-только начала щупать Ansible, надеюсь кому-нибудь пригодится.

Лига Сисадминов

2.4K постов18.9K подписчиков

Правила сообщества

Мы здесь рады любым постам связанным с рабочими буднями специалистов нашей сферы деятельности.

2
DELETED
Автор поста оценил этот комментарий

Спасибо - познавательно.

Сам всё никак не доберусь до централизованного управления (зоо)парком Микротиков )

Но я таки хочу попробовать их CAPsMAN, для начала...

P.S. Было бы круто на Habr-e опубликовать это всё.

раскрыть ветку (1)
4
Автор поста оценил этот комментарий

Ура, хоть кто-то написал коммент) мне на хабре не очень понравилось писать - не тянут мои посты, там высокий штиль нужен и более основательный подход

показать ответы
0
Автор поста оценил этот комментарий

все круто, автору респект, но блин зачем svn? нам же Боженька гит дал

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Это была проба пера по молодости, уже всё в гите)

0
Автор поста оценил этот комментарий

Приветствую!


Что случится, если у разных маршрутизаторов совпадет identity?

При этом в RouterOS есть более уникальная вещь: [system license get system-id].

Если объединить identity с номером лицензии в именах коллизий потенциально меньше будет.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Добрый день. Если совпадет identity, значит я не донастроила роутер, в этом случае да, какого-то бэкапа не будет. В принципе, объединить identity с id идея здравая

показать ответы
0
Автор поста оценил этот комментарий

А у Вас есть пост как Вас в это сетевое болото занесло? Интересно было б почитать.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Как я стала админом Если коротко - училась и пошла работать по специальности. Или вопрос про конкретную организацтю?

показать ответы
0
Автор поста оценил этот комментарий
Так ли сложны они в настройке, сойдут ли кинетик для нетребовательной инфраструктуры сети?
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Микротики не сложны, мануалов куча. Кинетики - не имела дела, не могу сказать. Если вы хотите в сети делать всякие извращения, то берите микротик, вы получите взрослый роутер, который умеет всё или почти всё. А если задача просто воткнуть какой-то роутер на точку, то можно и смотреть что попроще.

показать ответы
Автор поста оценил этот комментарий
И добавили ещё один сервис который на ваших объемах ну совсем не нужен, не самое однозначное решение. Оперировать 8 сетями тоже так себе решение.
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

А почему на наших объемах новый сервис не нужен?

Про сеть тоже не поняла - задача отфильтровать белые адреса была из ospf таблицы при redistribute static. Впрочем, потом решила по другому - попилила на зоны и включила суммирование на границе зон. Тут это просто как пример задачи.

показать ответы
0
Автор поста оценил этот комментарий

Привет. Решил проблему, если интересно:

добавил 'b' в plugins/action/net_get.py

try: with open(tmp_dest_file, "rb") as f: new_content = f.read() with open(dest, "rb") as f: old_content = f.read() except (IOError, OSError): os.remove(tmp_dest_file) raise

и указал в переменных

ansible_network_cli_ssh_type: paramiko

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Спасибо, может кому пригодится

0
Автор поста оценил этот комментарий

Вопрос назрел, сорян конечно, но гугл не помог. Только в двух местах встретил подобную проблему и то без ответа. Не сталкивалась с тем, что netcommon.net_get сливает неполные файлы по sftp? Буквально строчек десять из всего export compact. Да и .backup файлы по размеру не бьются на самом Микроте и в сохранёнке.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Честно - не было. Были проблемы с tftp и нестабильным соединением аналогичные, ну собственно, там стабилизацией соединения решилось. Ну и вопрос - а не пишут ли файл с одним именем два процесса? А то может один записал, второй затер, первый дописал 10 строк. Анзибль же параллелит.

показать ответы
0
Автор поста оценил этот комментарий
Спасибо за статью и плейбук. Очень пригодились мне как делающему первые шаги в ансибле. Всё работает куль.
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

О! Огонь, кому-то это помогло, очень рада))

показать ответы
0
Автор поста оценил этот комментарий

Как с вами связаться? Нужно обучение по этой истории, не бесплатно конечно.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Сорян, во-перых, я с тех пор не сильно в эту тему углублялась. Во-торых, я ебашу по выходным, у меня есть личная жизнь и вешать на себя обучение не хочу. Если есть конкретные вопросы по посту, можно написать тут или  на VirraVirra@yandex.ru - если будет время и настроение, отвечу.

0
Автор поста оценил этот комментарий

Добрый день. Такой вопрос, если создавать ssh ключ для подключения к нескольким микротам, нужно ли указывать пароль на него? Ведь он будет при каждом обращении его спрашивать. Или его можно где-то один раз указать?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

ssh умеет подключаться по ключу и пароль в этом случае не нужен. Пару вашего ключа надо будет разлить по микротам. Вроде закрытый по микротам разливаете, с открытым подключаетесь.

0
Автор поста оценил этот комментарий
Все уже изобрели до вас. Разверните oxidized - система берет список железа из файла, сливает конфиг по расписанию и складывает в гит. Имеет веб интерфейс. Показывает изменения. Использую более чем на 300 тиках.
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Спасибо, мне уже советовали, изначально под мой зоопарк длинков, который был не подходило. А теперь как бы зачем уже менять.

0
Автор поста оценил этот комментарий
Ансибл это конечно хорошо, но разве в микротике нет нативного способа сохранять конфигурацию устройства? К примеру сгрузить файл конфигурации на ftp?
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Всё равно прикручивать следилку и систему контроля версий и отправку единого отчета. Мне больше нравится инициировать бэкап из одного места.

показать ответы
0
Автор поста оценил этот комментарий
По хорошему да, но масштаба и структуры организации ТС я не знаю ) поэтому исхожу из наиболее вероятного, неизвестно что у них там за софт, но раз уж есть 50 роутеров и оспф то мониторинг должен быть по любому )
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Есть мониторинг, в заббиксе, спасибо за совет, подумаю как лучше сделать

0
Автор поста оценил этот комментарий

По хорошему список оборудования должен лежать в CMDB(вместе с датами закупки, гарантии, кому выдано, где расположено...) и при установленном флаге "Работает"(или "мониторинг") уже попадать в системы мониторинга и управления.

Сами же базовые версии CMDB обычно входят в сосав систем Service Desk(Help Desk).

Дальше "взрослые" конторы интегрируют это добро с бухгалтерскими системами, инвентаризационными и системами технического учёта, но тут уже начинается настоящая попаболь.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Вот про CMDB я услышала только месяц назад, это ещё впереди

0
Автор поста оценил этот комментарий

Плодить сервис на каждую задачу плохая практика в мелко конторах. С годами они копятся умирают и тд. Касательно OSPF достаточно использовать !allowed/24 discard на каждом конечном устройстве в ospf-out. Опять же зоны - куда они в таких масштабах

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Я передам нашей конторе в 5000 человек, что она мелкая и зоны ей не нужны))

4
Автор поста оценил этот комментарий
@virrasha, Попробуйте для сетевого бэкапа этот инструмент использовать.
копирует, возможность просматривать изменение, как в гите, плюс разные устройства.
использую на 50 разных устройствах, полет хороший.
https://cbackup.me/ru/
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Спасибо, посмотрю

0
Автор поста оценил этот комментарий
А правда, что с вайфаем у микротиков есть проблемы?
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

По отзывам да. Лично опять же не сталкивалась, у нас без вайфая они, под другие задачи