如何在Ansible中向Juniper设备传递match命令的正则表达式?
解决Ansible中Juniper交换机match命令无法生效的问题
问题原因
junos_command模块默认会将命令转换为NETCONF XML请求执行,而CLI特有的管道命令(如| match)无法被XML API解析,因此模块会自动忽略管道部分,仅执行基础的show vlans命令;同时YAML中的转义字符处理不当也会导致正则表达式无法正确传递到设备。
解决方案
通过指定display: text参数强制模块以纯CLI文本形式发送命令,并正确处理转义字符,确保match正则表达式生效。
调整后的Playbook代码
- name: Gathering active vlans.. junipernetworks.junos.junos_command: commands: - command: 'show vlans | match "(\d+)"' display: text register: vlan_list tags: - core - access - name: test debug: msg: "{{ vlan_list }}" tags: - always
关键说明
display: text参数:强制模块直接发送原始CLI命令,而非转换为XML请求,确保管道和匹配命令被设备正确识别执行。- 单引号包裹命令:避免YAML解析时对反斜杠
\进行转义,保证正则表达式中的\d(匹配数字)能正确传递到设备端。
内容的提问来源于stack exchange,提问作者PacketLoss
相关产品推荐
相关产品推荐

