Как применять IP-адреса из файла hosts в качестве переменных Ansible для конфигурации Mikrotik?

Добрый день! <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.
  • 19 марта 2025 г. 13:14
Ответы на вопрос 2
Добрый день!

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

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