community.routeros.api 模块 – 用于 RouterOS API 的 Ansible 模块

注意

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

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

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

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

概要

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

  • 此模块可以通过 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 条件需要至少匹配其条件之一。

attribute

字符串

is

字符串

用于匹配的运算符。

对于相等,请使用 ==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

attribute

字符串 / 必需

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

is

字符串 / 必需

用于匹配的运算符。

对于相等,请使用 ==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,name 接口,其中 mtu 大于 1400。

在 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

支持:

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

platform

平台: 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)