Spec-Zone.ru › Ansible 2.11

community.routeros.api – Модуль Ansible для API RouterOS

Примечание

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

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

Для использования в книге задач укажите: community.routeros.api.

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

Описание

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

Требования

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

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

Параметры

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

Примечания

Примечание

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

Примеры

---
- name: Use 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.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.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.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 }}'

    - name: Store query_id for later usage
      ansible.builtin.set_fact:
        query_id: "{{ queryout['msg'][0]['.id'] }}"

    - name: Update ".id = {{ query_id }}" taken with custom fact "fquery_id"
      community.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 }}"
      community.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'
      community.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"
      community.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.

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


Авторы

  • Николай Дачев (@NikolayDachev)

© 2012–2018 Michael DeHaan
© 2018–2021 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.11/collections/community/routeros/api_module.html

Spec-Zone.ru

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