ansible.netcommon.parse_cli 过滤器 – parse_cli 过滤器插件。
注意
此过滤器插件是 ansible.netcommon 集合 (版本 7.1.0) 的一部分。
如果您正在使用 ansible
包,则可能已经安装了此集合。它不包含在 ansible-core
中。要检查是否已安装,请运行 ansible-galaxy collection list
。
要安装它,请使用: ansible-galaxy collection install ansible.netcommon
。
要在剧本中使用它,请指定: ansible.netcommon.parse_cli
。
ansible.netcommon 1.0.0 中的新增功能
概要
此过滤器插件将网络设备 CLI 命令的输出转换为结构化的 JSON 输出。
使用以下参数 -
xml_data | ansible.netcommon.parse_cli(template.yml
)
关键词参数
这描述了过滤器的关键词参数。这些是在以下示例中的值 key1=value1
、key2=value2
等:input | ansible.netcommon.parse_cli(key1=value1, key2=value2, ...)
参数 |
注释 |
---|---|
parse_cli 调用的源数据。 |
|
规范文件应为格式正确的 YAML 文件。它定义了如何解析 CLI 输出并返回 JSON 数据。 例如 |
注释
注意
parse_cli 过滤器将加载规范文件并将命令输出通过它传递,返回 JSON 输出。YAML 规范文件定义了如何解析 CLI 输出。
示例
# Using parse_cli
# outputConfig
# ip dhcp pool Data
# import all
# network 192.168.1.0 255.255.255.0
# update dns
# default-router 192.168.1.1
# dns-server 192.168.1.1 8.8.8.8
# option 42 ip 192.168.1.1
# domain-name test.local
# lease 8
# pconnection.yml
# ---
# vars:
# dhcp_pool:
# name: "{{ item.name }}"
# network: "{{ item.network_ip }}"
# subnet: "{{ item.network_subnet }}"
# dns_servers: "{{ item.dns_servers_1 }}{{ item.dns_servers_2 }}"
# domain_name: "{{ item.domain_name_0 }}{{ item.domain_name_1 }}{{ item.domain_name_2 }}{{ item.domain_name_3 }}"
# options: "{{ item.options_1 }}{{ item.options_2 }}"
# lease_days: "{{ item.lease_days }}"
# lease_hours: "{{ item.lease_hours }}"
# lease_minutes: "{{ item.lease_minutes }}"
# keys:
# dhcp_pools:
# value: "{{ dhcp_pool }}"
# items: "^ip dhcp pool (
# ?P<name>[^\\n]+)\\s+(?:import (?P<import_all>all)\\s*)?(?:network (?P<network_ip>[\\d.]+)
# (?P<network_subnet>[\\d.]+)?\\s*)?(?:update dns\\s*)?(?:host (?P<host_ip>[\\d.]+)
# (?P<host_subnet>[\\d.]+)\\s*)?(?:domain-name (?P<domain_name_0>[\\w._-]+)\\s+)?
# (?:default-router (?P<default_router>[\\d.]+)\\s*)?(?:dns-server
# (?P<dns_servers_1>(?:[\\d.]+ ?)+ ?)+\\s*)?(?:domain-name (?P<domain_name_1>[\\w._-]+)\\s+)?
# (?P<options_1>(?:option [^\\n]+\\n*\\s*)*)?(?:domain-name (?P<domain_name_2>[\\w._-]+)\\s+)?(?P<options_2>(?:option [^\\n]+\\n*\\s*)*)?
# (?:dns-server (?P<dns_servers_2>(?:[\\d.]+ ?)+ ?)+\\s*)?(?:domain-name
# (?P<domain_name_3>[\\w._-]+)\\s*)?(lease (?P<lease_days>\\d+)(?: (?P<lease_hours>\\d+))?(?: (?P<lease_minutes>\\d+))?\\s*)?(?:update arp)?"
# playbook
- name: Add config data
ansible.builtin.set_fact:
opconfig: "{{lookup('ansible.builtin.file', 'outputConfig') }}"
- name: Parse Data
ansible.builtin.set_fact:
output: "{{ opconfig | parse_cli('pconnection.yml') }}"
# Task Output
# -----------
#
# TASK [Add config data]
# ok: [host] => changed=false
# ansible_facts:
# xml: |-
# ip dhcp pool Data
# import all
# network 192.168.1.0 255.255.255.0
# update dns
# default-router 192.168.1.1
# dns-server 192.168.1.1 8.8.8.8
# option 42 ip 192.168.1.1
# domain-name test.local
# lease 8
# TASK [Parse Data]
# ok: [host] => changed=false
# ansible_facts:
# output:
# dhcp_pools:
# - dns_servers: 192.168.1.1 8.8.8.8
# domain_name: test.local
# lease_days: 8
# lease_hours: null
# lease_minutes: null
# name: Data
# network: 192.168.1.0
# options: |-
# option 42 ip 192.168.1.1
# subnet: 255.255.255.0