Spec-Zone.ru › Ansible 2.10

community.network.routeros_api – Модуль Ansible для API RouterOS

Примечание

Этот плагин входит в состав коллекции community.network (версия 1.3.0).

Для его установки используйте: ansible-galaxy collection install community.network.

Для использования в плейбуке, укажите: community.network.routeros_api.

Новый в версии 1.1.0: коллекции community.network

  • Описание
  • Требования
  • Параметры
  • Примечания
  • Примеры
  • Значения возврата

Описание

  • Модуль Ansible для API RouterOS с использованием библиотеки librouteros.
  • Этот модуль может добавлять, удалять, обновлять, запрашивать и выполнять произвольные команды в RouterOS через API.

Требования

Ниже приведены требования к хосту, на котором выполняется этот модуль.

  • librouteros
  • Python >= 3.6 (для librouteros)

Параметры

Параметр Варианты/Значения по умолчанию Комментарии
add
строка
Добавит выбранные аргументы в выбранный путь конфигурации RouterOS.
Пример address=1.1.1.1/32 interface=ether1.
Эквивалент в RouterOS CLI /ip address add address=1.1.1.1/32 interface=ether1.
cmd
строка
Выполнит любую/произвольную команду в выбранном пути, после команды можно добавить .id.
Пример пути system script и команды run .id=*03 эквивалентен в RouterOS CLI /system script run number=0.
Пример пути ip address и команды print эквивалентен в RouterOS CLI /ip address print.
hostname
строка / обязательно
Имя хоста RouterOS API.
password
строка / обязательно
Пароль пользователя RouterOS.
path
строка / обязательно
Основной путь для всех остальных аргументов.
Если другие аргументы не заданы, API вернёт все элементы в выбранном пути.
Пример ip address. Эквивалент в RouterOS CLI /ip address print.
port
целое число
Порт API RouterOS. Если установлен ssl, порт будет применяться к ssl соединению.
Значения по умолчанию 8728 для HTTP API и 8729 для HTTPS API.
query
строка
Запрос заданного пути для атрибутов запроса из RouterOS API и возвращает '.id'.
WHERE – ключевое слово, которое расширяет запрос. Формат WHERE: ключ оператор значение – со знаками пробела.
Допустимые операторы WHERE: ==, !=, >, <.
Пример пути ip address и запроса .id address вернёт только .id и address для всех элементов в пути ip address.
Пример пути ip address и запроса .id address WHERE address == 1.1.1.3/32. Вернет только .id и address для элементов в пути ip address, где адрес равен 1.1.1.3/32.
Пример пути interface и запроса mtu name WHERE mut > 1400 вернет только интерфейсы mtu,name, где mtu больше 1400.
Эквивалент в RouterOS CLI /interface print where mtu > 1400.
remove
строка
Удаляет конфигурацию/значение из RouterOS по '.id'.
Пример *03 удалит конфигурацию/значение с id=*03 в выбранном пути.
Эквивалент в RouterOS CLI /ip address remove numbers=1.
Примечание number в RouterOS CLI отличается от .id.
ssl
булево
    Варианты:
  • нет ←
  • да
Если установлено, TLS будет использоваться для подключения к API RouterOS.
update
строка
Обновляет конфигурацию/значение в RouterOS по '.id' в выбранном пути.
Пример .id=*03 address=1.1.1.3/32 и путь ip address заменит существующий IP-адрес на .id=*03.
Эквивалент в RouterOS CLI /ip address set address=1.1.1.3/32 numbers=1.
Примечание number в RouterOS CLI отличается от .id.
username
строка / обязательно
Имя пользователя RouterOS.

Примечания

Примечание

  • add, remove, update, cmd и query взаимоисключающие.
  • check_mode не поддерживается.

Примеры

---
- name: Test routeros_api
  hosts: localhost
  gather_facts: no
  vars:
    hostname: "ros_api_hostname/ip"
    username: "admin"
    password: "secret_password"

    path: "ip address"

    nic: "ether2"
    ip1: "1.1.1.1/32"
    ip2: "2.2.2.2/32"
    ip3: "3.3.3.3/32"

  tasks:
    - name: Get "{{ path }} print"
      community.network.routeros_api:
        hostname: "{{ hostname }}"
        password: "{{ password }}"
        username: "{{ username }}"
        path: "{{ path }}"
      register: print_path

    - name: Dump "{{ path }} print" output
      ansible.builtin.debug:
        msg: '{{ print_path }}'

    - name: Add ip address "{{ ip1 }}" and "{{ ip2 }}"
      community.network.routeros_api:
        hostname: "{{ hostname }}"
        password: "{{ password }}"
        username: "{{ username }}"
        path: "{{ path }}"
        add: "{{ item }}"
      loop:
        - "address={{ ip1 }} interface={{ nic }}"
        - "address={{ ip2 }} interface={{ nic }}"
      register: addout

    - name: Dump "Add ip address" output - ".id" for new added items
      ansible.builtin.debug:
        msg: '{{ addout }}'

    - name: Query for ".id" in "{{ path }} WHERE address == {{ ip2 }}"
      community.network.routeros_api:
        hostname: "{{ hostname }}"
        password: "{{ password }}"
        username: "{{ username }}"
        path: "{{ path }}"
        query: ".id address WHERE address == {{ ip2 }}"
      register: queryout

    - name: Dump "Query for" output and set fact with ".id" for "{{ ip2 }}"
      ansible.builtin.debug:
        msg: '{{ queryout }}'

    - ansible.builtin.set_fact:
        query_id : "{{ queryout['msg'][0]['.id'] }}"

    - name: Update ".id = {{ query_id }}" taken with custom fact "fquery_id"
      routeros_api:
        hostname: "{{ hostname }}"
        password: "{{ password }}"
        username: "{{ username }}"
        path: "{{ path }}"
        update: ".id={{ query_id }} address={{ ip3 }}"
      register: updateout

    - name: Dump "Update" output
      ansible.builtin.debug:
        msg: '{{ updateout }}'

    - name: Remove ips - stage 1 - query ".id" for "{{ ip2 }}" and "{{ ip3 }}"
      routeros_api:
        hostname: "{{ hostname }}"
        password: "{{ password }}"
        username: "{{ username }}"
        path: "{{ path }}"
        query: ".id address WHERE address == {{ item }}"
      register: id_to_remove
      loop:
        - "{{ ip2 }}"
        - "{{ ip3 }}"

    - name: set fact for ".id" from "Remove ips - stage 1 - query"
      ansible.builtin.set_fact:
        to_be_remove: "{{ to_be_remove |default([]) + [item['msg'][0]['.id']] }}"
      loop: "{{ id_to_remove.results }}"

    - name: Dump "Remove ips - stage 1 - query" output
      ansible.builtin.debug:
        msg: '{{ to_be_remove }}'

    # Remove "{{ rmips }}" with ".id" by "to_be_remove" from query
    - name: Remove ips - stage 2 - remove "{{ ip2 }}" and "{{ ip3 }}" by '.id'
      routeros_api:
        hostname: "{{ hostname }}"
        password: "{{ password }}"
        username: "{{ username }}"
        path: "{{ path }}"
        remove: "{{ item }}"
      register: remove
      loop: "{{ to_be_remove }}"

    - name: Dump "Remove ips - stage 2 - remove" output
      ansible.builtin.debug:
        msg: '{{ remove }}'

    - name: Arbitrary command example "/system identity print"
      routeros_api:
        hostname: "{{ hostname }}"
        password: "{{ password }}"
        username: "{{ username }}"
        path: "system identity"
        cmd: "print"
      register: cmdout

    - name: Dump "Arbitrary command example" output
      ansible.builtin.debug:
        msg: "{{ cmdout }}"

Значения возврата

Общие значения возврата описаны здесь, следующие являются полями, уникальными для этого модуля:

Ключ Возвращаемое Описание
message
список / элементы=строка
всегда
Все выводы находятся в списке со словарями элементов, возвращёнными API RouterOS.

Пример:
[{...},{...}]


Авторы

  • Nikolay Dachev (@NikolayDachev)

© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.10/collections/community/network/routeros_api_module.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API