Найти в Дзене
NTMaster

Использование Ansible для управления MikroTik

Возник вопрос автоматизации процесса управления маршрутизаторами фирмы MikroTik. Т.к. для настройки серверов используется Ansible, то и решение использовать его было логичным. В руководствах описана очень удобная возможность использования playbook для разных операционных систем с разной системой команд. Выглядит это примерно так: " --- - hosts: all tasks: - group_by: key: os_{{ ansible_distribution }} - hosts: os_CentOS gather_facts: False tasks: - # tasks that only happen on CentOS go here При этом если добавить роутер RouteOS в список устройств, то Ansible выдаст ошибку на этапе сбора фактов о системе, т.к. он пытается загрузить и выполнить Python-скрипт, чего на MikroTik не возможно. В итоге, был использован следующий костыль: Файл hosts: [all:vars]
os=other
[servers]
srv1
srv2
[os_RouteOS]
gw1
gw2
Файл group_vars/os_RouteOS os: RouteOS
Файл playbook: ---
# На основании переменной os разбиваем на группы для MikroTik и остальных узлов

Возник вопрос автоматизации процесса управления маршрутизаторами фирмы MikroTik. Т.к. для настройки серверов используется Ansible, то и решение использовать его было логичным. В руководствах описана очень удобная возможность использования playbook для разных операционных систем с разной системой команд. Выглядит это примерно так:

"

---
- hosts:
all tasks:
- group_by: key: os_{{ ansible_distribution }}
- hosts: os_CentOS
gather_facts: False
tasks:
- # tasks that only happen on CentOS go here

При этом если добавить роутер RouteOS в список устройств, то Ansible выдаст ошибку на этапе сбора фактов о системе, т.к. он пытается загрузить и выполнить Python-скрипт, чего на MikroTik не возможно.

В итоге, был использован следующий костыль:

Файл hosts:

[all:vars]
os=other

[servers]
srv1
srv2

[os_RouteOS]
gw1
gw2

Файл group_vars/os_RouteOS

os: RouteOS

Файл playbook:

---
# На основании переменной os разбиваем на группы для MikroTik и остальных узлов
- hosts: all
gather_facts: no
tasks:
- group_by:
key: os_{{os}}

# Для всех узлов, кроме MikroTik, собираем факты и раскидываем по специфическим группам
- hosts: os_other
tasks:
- group_by:
key: os_{{ansible_distribution}}

# Сюда попадут только устройства с CentOS, кстати, факты собирать второй раз нет необходимости
- hosts: os_CentOS
gather_facts: no
tasks:
- debug:
msg: "CentOS"

# Сюда попадут только MikroTik, т.е. устройства из группы [os_RouterOS]. А здесь факты собирать нельзя.
- hosts: os_RouteOS
gather_facts: no
tasks:
- debug:
msg: "Mikrotik"