Ansible + Mikrotik = Приключения
Как и в любой сказке всё началось довольно невинно, захотелось мне сконфижить пачку микротов разом, через Ansible, и тут пошло всё не так)
Очень кратко, что это и как работает, можно прочитать ТУТ
Кратно о том что есть у меня в распоряжении для теста:
- Ansible AWX
- CCR1036-12G-4S
Глава первая - Печальная!
При попытке выполнить сценарий на свои продовых микротах, я получаю ошибку:
The error was: ansible.module_utils.connection.ConnectionError: timeout value 30 seconds reached while trying to send command: b'
* на самом деле дебаг больше и сочнее, но для понимания сути, будет достаточно этого)
1 - первое, что пришло мне в голову, это править таймауты в ansible.cfg - не помогло!
2 - identity пользователя от которого выполняется сценарий, у меня это был ansible-ops.
* классический admin, был упразднен сразу же, ввиду его не модности и не безопасности)
Забегая на перед, отчасти проблема была в имени пользователя, ansible с микротиком на пару, плохо понимают имена пользователей с дефисами. (Вернее не понимают совсем)
3 - проведён ресёрч на тему длинны имени(Identity) самого Mikrotik, в процессе поиска, на гите, была найдена ветка со схожей проблемой, решение было таково, что длина имени, не должна превышать 32 символа, у меня она составляла 30 символов, так что мимо кассы)
4 - были переустановлены несколько видов и версий прошивок, из ветки stable\long-term, не помогло
5 - на финал был скинут в ноль CCR1036-12G-4S для теста, и... барабанная дробь, работает!
Глава вторая - победа, побед)
Проблема была обнаружена в имени Mikrotik, у меня они содержали пробелы и | (пайп лайны).
Дальше я решил проверить, а какие ещё символы Ansible + mikrotik на дух не переносят?
Какие символы в Identity Mikrotik, может переварить Ansible :
"test core router" - OK
"test-core-router" - OK
"test.core.router" - OK
"test:core:router" - NO
"test=core=router" - NO
Довольно важный момент состоит в том, что в имени пользователя от которого сценарий будет запущен, не должно быть дефиса(а возможно и других спец символов):
* ansible-ops = timeout!
Эта очень короткая записка о проблеме на которую я потратил неделю жизни и нервов)
Спасибо всем кто прочел, удачи и добра!)