community.routeros.api 模块 – Ansible RouterOS API 模块

注意

此模块是 community.routeros 集合 (版本 3.1.0) 的一部分。

如果您使用的是 ansible 包,则可能已安装此集合。它不包含在 ansible-core 中。要检查是否已安装它,请运行 ansible-galaxy collection list

要安装它,请使用:ansible-galaxy collection install community.routeros。您需要其他需求才能使用此模块,有关详细信息,请参阅 需求

要在 playbook 中使用它,请指定:community.routeros.api

概要

  • 使用 Python librouteros 库的 RouterOS API Ansible 模块。

  • 此模块可以通过 API 添加、删除、更新、查询和执行 RouterOS 中的任意命令。

需求

执行此模块的主机需要以下需求。

  • 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

ca_path

路径

在 community.routeros 1.2.0 中添加

包含用于证书验证的 CA 证书的 PEM 格式文件。

另请参见 validate_cert_hostname。仅在 tls=truevalidate_certs=true 时使用。

cmd

字符串

在选定路径中执行任何/任意命令,在命令之后我们可以添加 .id

例如路径 system script 和 cmd run .id=*03 在 RouterOS CLI 中等效于 /system script run number=0

例如路径 ip address 和 cmd print 在 RouterOS CLI 中等效于 /ip address print

encoding

字符串

在 community.routeros 2.1.0 中添加

与 RouterOS 设备通信时使用指定的编码。

默认值为 ASCII。请注意,UTF-8 需要 librouteros 3.2.1 或更高版本。

默认值: "ASCII"

extended_query

字典

从 RouterOS API 获取选定查询属性的扩展查询给定路径。

扩展查询允许连接输入。如果没有匹配的条目,将返回空列表。

attributes

列表 / 元素=字符串 / 必需

要返回的属性列表。

extended_query.where[] 子句中使用的每个属性都需要在此处列出。

where

列表 / 元素=字典

允许限制返回的对象。

此处的所有条件必须全部匹配。一个extended_query.where[].or条件需要至少一个子条件匹配。

属性

字符串

运算符

字符串

用于匹配的运算符。

对于相等,使用==eq。对于小于,使用<less。对于大于,使用>more

使用in检查值是否属于列表的一部分。在这种情况下,extended_query.where[].value必须是一个列表。

必须指定extended_query.where[].or,或者同时指定extended_query.where[].attributeextended_query.where[].isextended_query.where[].value

选项

  • "=="

  • "!="

  • ">"

  • "<"

  • "in"

  • "eq"

  • "not"

  • "more"

  • "less"

列表 / 元素=字典

一个条件列表,其中至少一个条件必须匹配。

必须指定extended_query.where[].or,或者同时指定extended_query.where[].attributeextended_query.where[].isextended_query.where[].value

属性

字符串 / 必需

要匹配的属性。必须是extended_query.attributes的一部分。

运算符

字符串 / 必需

用于匹配的运算符。

对于相等,使用==eq。对于小于,使用<less。对于大于,使用>more

使用in检查值是否属于列表的一部分。在这种情况下,extended_query.where[].or[].value必须是一个列表。

选项

  • "=="

  • "!="

  • ">"

  • "<"

  • "in"

  • "eq"

  • "not"

  • "more"

  • "less"

任意 / 必需

要比较的值。对于extended_query.where[].or[].is=in,必须是列表。

任意

force_no_cert

布尔值

在community.routeros 2.4.0中添加

tls=true时,设置为true以在没有证书的情况下连接。

另见validate_certs

注意:这强制使用匿名Diffie-Hellman (ADH) 密码。该协议容易受到中间人攻击,因为交换中使用的密钥未经身份验证。与其只是在没有证书的情况下连接以“使事情正常工作”,不如查看validate_certsca_path

选项

  • false ← (默认)

  • true

主机名

字符串 / 必需

RouterOS主机名API。

密码

字符串 / 必需

RouterOS用户密码。

路径

字符串 / 必需

所有其他参数的主路径。

如果未设置其他参数,api将返回所选路径中的所有项目。

示例ip address。相当于RouterOS CLI /ip address print

端口

整数

RouterOS api端口。如果设置了tls,则端口将应用于TLS/SSL连接。

HTTP API的默认值为8728,HTTPS API的默认值为8729

查询

字符串

从RouterOS aip中查询给定路径的选定查询属性。

WHERE是扩展查询的关键字。WHERE格式为键运算符值 - 带空格。

WHERE有效运算符为==eq!=not>more<less

示例路径ip address和查询.id address将只返回.idaddress,适用于ip address路径中的所有项目。

示例路径ip address和查询.id address WHERE address == 1.1.1.3/32。将只返回.idaddress,适用于ip address路径中address等于1.1.1.3/32的项目。

示例路径interface和查询mtu name WHERE mut > 1400将只返回mtu大于1400的接口mtu,name

RouterOS CLI中的等效命令/interface print where mtu > 1400

删除

字符串

通过“.id”从RouterOS删除配置/值。

示例*03将删除所选路径中id=*03的配置/值。

RouterOS CLI中的等效命令/ip address remove numbers=1

注意RouterOS CLI中的number.id不同。

超时

整数

在community.routeros 2.3.0中添加

请求超时。

默认值:10

tls

别名:ssl

布尔值

如果设置,将使用TLS进行RouterOS API连接。

选项

  • false ← (默认)

  • true

更新

字符串

通过所选路径中的“.id”更新RouterOS中的配置/值。

示例.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

注意RouterOS CLI中的number.id不同。

用户名

字符串 / 必需

RouterOS登录用户。

validate_cert_hostname

布尔值

在 community.routeros 1.2.0 中添加

设置为true以验证证书中的主机名。

另见validate_certs。仅在tls=truevalidate_certs=true时使用。

选项

  • false ← (默认)

  • true

validate_certs

布尔值

在 community.routeros 1.2.0 中添加

设置为false以跳过TLS证书的验证。

另见validate_cert_hostname。仅在tls=true时使用。

注意:与其仅仅禁用证书验证以“使事情正常工作”,不如考虑创建您自己的CA证书并用它来签署用于路由器的证书。您可以使用ca_path选项告诉模块您的CA证书。

选项

  • false

  • true ← (默认)

属性

属性

支持

描述

action_group

动作组: community.routeros.api

在 community.routeros 2.1.0 中添加

module_defaults中使用group/community.routeros.api设置此模块的默认值。

check_mode

支持:不支持

可以在check_mode下运行,并在不修改目标的情况下返回更改状态预测。

diff_mode

支持:不支持

在差异模式下,将返回有关更改内容(或在check_mode下可能需要更改的内容)的详细信息。

平台

平台: RouterOS

可以对其进行操作的目标操作系统/系列。

备注

注意

参见

另见

如何引用和取消引用命令和参数

如何引用和取消引用命令和参数

community.routeros.api_facts

使用API从运行MikroTik RouterOS的远程设备收集事实信息。

community.routeros.api_find_and_modify

使用API查找和修改信息。

community.routeros.api_info

从API检索信息。

community.routeros.api_modify

使用API修改路径下的数据。

如何使用RouterOS API连接到RouterOS设备

如何使用RouterOS API连接到RouterOS设备

示例

- name: Get example - ip address print
  community.routeros.api:
    hostname: "{{ hostname }}"
    password: "{{ password }}"
    username: "{{ username }}"
    path: "ip address"
  register: ipaddrd_printout

- name: Dump "Get example" output
  ansible.builtin.debug:
    msg: '{{ ipaddrd_printout }}'

- name: Add example - ip address
  community.routeros.api:
    hostname: "{{ hostname }}"
    password: "{{ password }}"
    username: "{{ username }}"
    path: "ip address"
    add: "address=192.168.255.10/24 interface=ether2"

- name: Query example - ".id, address" in "ip address WHERE address == 192.168.255.10/24"
  community.routeros.api:
    hostname: "{{ hostname }}"
    password: "{{ password }}"
    username: "{{ username }}"
    path: "ip address"
    query: ".id address WHERE address == {{ ip2 }}"
  register: queryout

- name: Dump "Query example" output
  ansible.builtin.debug:
    msg: '{{ queryout }}'

- name: Extended query example - ".id,address,network" where address is not 192.168.255.10/24 or is 10.20.36.20/24
  community.routeros.api:
    hostname: "{{ hostname }}"
    password: "{{ password }}"
    username: "{{ username }}"
    path: "ip address"
    extended_query:
      attributes:
        - network
        - address
        - .id
      where:
        - attribute: "network"
          is: "=="
          value: "192.168.255.0"
        - or:
            - attribute: "address"
              is: "!="
              value: "192.168.255.10/24"
            - attribute: "address"
              is: "eq"
              value: "10.20.36.20/24"
        - attribute: "network"
          is: "in"
          value:
             - "10.20.36.0"
             - "192.168.255.0"
  register: extended_queryout

- name: Dump "Extended query example" output
  ansible.builtin.debug:
    msg: '{{ extended_queryout }}'

- name: Update example - ether2 ip address with ".id = *14"
  community.routeros.api:
    hostname: "{{ hostname }}"
    password: "{{ password }}"
    username: "{{ username }}"
    path: "ip address"
    update: >-
        .id=*14
        address=192.168.255.20/24
        comment={{ 'Update 192.168.255.10/24 to 192.168.255.20/24 on ether2' | community.routeros.quote_argument_value }}

- name: Remove example - ether2 ip 192.168.255.20/24 with ".id = *14"
  community.routeros.api:
    hostname: "{{ hostname }}"
    password: "{{ password }}"
    username: "{{ username }}"
    path: "ip address"
    remove: "*14"

- name: Arbitrary command example "/system identity print"
  community.routeros.api:
    hostname: "{{ hostname }}"
    password: "{{ password }}"
    username: "{{ username }}"
    path: "system identity"
    cmd: "print"
  register: arbitraryout

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

返回值

常见的返回值已在此处记录,以下是此模块特有的字段

描述

消息

列表 / 元素=字符串

所有输出均为包含从RouterOS API返回的字典元素的列表。

返回:始终

示例: [{"address": "1.2.3.4"}, {"address": "2.3.4.5"}]

作者

  • Nikolay Dachev (@NikolayDachev)