Добрый день! <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 в микротике, а перед тем как создавать, удалять предыдущий. либо делать проверку с условием.
Т.е. без таких проверок ансиблом сетевые устройства удобно подгототавливать с нуля, а уже настроенное устройство, нужно изворачиваться.