Добрый день! <br/> Я начинаю изучать Ansible для настройки сетевого оборудования и у меня есть список хостов в файле hosts. Также имеется следующая конфигурация для настройки отправки логов с оборудования Mikrotik: <br/> <pre><code>--- - name: Setup_Logging_v7 community.routeros.command: commands: # Добавление Log сервера - /system/logging/action/add bsd-syslog=yes name=logserv remote=10.0.1.16 src-address=0.0.0.0 target=remote - /system/logging/add action=logserv topics=critical - /system/logging/add action=logserv topics=error - /system/logging/add action=logserv topics=info - /system/logging/add action=logserv topics=warning</code></pre> <br/> Подскажите, как можно автоматически вставлять IP-адреса из списка hosts, заменив значение 0.0.0.0 на соответствующий src-address в конфигурации. Например, для устройства с адресом 10.1.1.1 должно получиться так: <br/> <pre><code>--- - name: Setup_Logging_v7 community.routeros.command: commands: # Добавление Log сервера - /system/logging/action/add bsd-syslog=yes name=logserv remote=10.0.1.16 src-address=10.1.1.1 target=remote - /system/logging/add action=logserv topics=critical - /system/logging/add action=logserv topics=error - /system/logging/add action=logserv topics=info - /system/logging/add action=logserv topics=warning</code></pre> <br/> У меня есть около 150 устройств, и для каждого нужно указать свой IP-адрес в параметре src-address.
Добрый день! Вы можете использовать Ansible для замены IP-адреса в вашей конфигурации, воспользовавшись переменными для хостов. Для этого вам нужно будет организовать ваш инвентарь (hosts файл) и создать плейбук, который будет динамически подставлять значения IP-адресов. Вот как можно это сделать шаг за шагом: 1. **Создайте инвентарь:** Убедитесь, что ваш файл `hosts` выглядит следующим образом: ```ini [routers] router1 ansible_host=10.1.1.1 router2 ansible_host=10.1.1.2 router3 ansible_host=10.1.1.3 # и так далее ``` 2. **Создайте плейбук:** В вашем Ansible плейбуке подставьте переменную, которая будет ссылаться на IP-адрес устройства, используя `ansible_host`: ```yaml --- - name: Setup Logging on Mikrotik hosts: routers gather_facts: no tasks: - name: Setup Logging v7 community.routeros.command: commands: # Добавление Log сервера - "/system/logging/action/add bsd-syslog=yes name=logserv remote=10.0.1.16 src-address={{ ansible_host }} target=remote" - "/system/logging/add action=logserv topics=critical" - "/system/logging/add action=logserv topics=error" - "/system/logging/add action=logserv topics=info" - "/system/logging/add action=logserv topics=warning" ``` ### Объяснение: - **`hosts: routers`** - здесь мы указываем, что плейбук будет выполняться для группы хостов, которые определены в вашем файле `hosts`. - **`ansible_host`** - это встроенная переменная Ansible, которая содержит IP-адрес хоста. Это значение подставляется в строке конфигурации с `src-address={{ ansible_host }}`. 3. **Запустите плейбук:** Используйте команду для запуска плейбука: ```bash ansible-playbook -i hosts your_playbook.yml ``` Где `your_playbook.yml` — название вашего плейбука, а `-i hosts` — указывает на файл инвентаря. Таким образом, Ansible автоматически подставит правильный IP-адрес для каждого устройства в конфигурации.
Подставить переменную из инвентори вроде {{ ansible_ssh_host }}
но проверить перед этим сначала в модуле debug.
и ещё замечание, в микротик остутствует python и используется raw метод, а это значит нет идемподентности, т.е. вам нужно самому проверять дубли, в противном случае у вас будет каждый запуск ансибла плодить новые экшены логгинга.
самый простой способ задавать вменяемый комментарий при создании любого item в микротике, а перед тем как создавать, удалять предыдущий. либо делать проверку с условием.
Т.е. без таких проверок ансиблом сетевые устройства удобно подгототавливать с нуля, а уже настроенное устройство, нужно изворачиваться.