如何解决从剧本动态设置 ansible_network_os
我正在开发一个用于网络故障排除的 ansible 项目,我正在尝试自动设置 ansible_network_os
变量。我有一个与操作系统无关的 python 脚本,它使用 paramiko 在路由器上运行 show ver
命令,然后返回与检测到的操作系统相对应的变量。当我尝试在剧本中实际设置变量时,问题就出现了。
由于 ansible_network_os 尚未设置,因此此任务需要将 hosts
变量设置为 localhost
。在任务中,我循环遍历网络设备的 IP 地址 (item[0]) 和从 python 脚本 (item[1]) 返回的相应变量。使用 zip() 函数,将它们组合成一个列表,以便同时遍历:
- name: Setting network variable...
set_fact:
hostvars[{{item[0]}}].ansible_network_os: "{{ item[1] }}"
loop: "{{ groups['targets']|zip(device_os.stdout_lines)|list }}"
这会产生错误 msg: The variable name 'hostvars[172.16.1.X].ansible_network_os' is not valid. Variables must start with a letter or underscore character,and contain only letters,numbers and underscores.
,其中 X 是与设备的内部 IP 对应的任意数字 1-10。
我了解问题所在,但我正在努力寻找解决方案或变通方法。像这样动态设置 hostvars var 的值的最佳方法是什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。