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