Ansible如何向community.routeros.command模块正确传递自定义变量?
问题修复方案
问题原因
你的_ip变量是列表类型,直接在Jinja2模板中插值时,会输出列表的Python字符串表示格式(即['IP地址']的形式),不符合RouterOS的命令语法,所以触发解析错误。
修复方法
场景1:_ip列表永远只有1个IP地址
直接取列表的第一个元素即可,修改任务配置为:
- name: Ping community.routeros.command: commands: 'ping {{ _ip[0] }} count 5' register: ping
修改后生成的合法命令为ping 192.168.0.3 count 5,可正常执行。
场景2:_ip列表存在多个IP需要批量ping
使用loop循环遍历列表,每个IP单独执行ping命令:
- name: 批量ping多个IP community.routeros.command: commands: 'ping {{ item }} count 5' loop: "{{ _ip }}" register: ping_results
所有IP的执行结果会保存在ping_results变量中,可后续处理。
验证建议
你可以先通过debug任务确认变量取值和类型,避免类型不匹配问题:
- name: 调试确认_ip变量 debug: msg: "第一个IP为 {{ _ip[0] }},变量类型为 {{ _ip | type_debug }}"
内容的提问来源于stack exchange,提问作者perl
相关产品推荐
相关产品推荐

