Ansible修改路由器主机名后ansible_net_hostname未更新问题问询
问题根因
你遇到的问题是Ansible 2.9版本网络模块的会话级缓存机制导致的,具体原理如下:
- Ansible 2.9的
network_cli连接插件默认使用持久化SSH会话,同一个play内对同一台网络设备的所有操作会复用同一个SSH连接。 - vyos_facts、ios_facts这类网络设备facts采集模块,首次采集完成后会将数据缓存到当前SSH会话的上下文中,同一会话内后续再次调用facts模块时,默认直接返回缓存数据,不会重新向设备请求最新配置。
meta: clear_facts指令只会清空Ansible运行时的主机变量缓存,无法清除SSH会话内部的facts缓存,因此清除后重新采集拿到的还是会话缓存里的旧值。- 独立的第二个playbook运行时会创建新的SSH会话,没有旧的缓存数据,所以可以正常采集到更新后的主机名。
解决方法
第二次调用facts采集模块时,添加force: yes参数强制跳过缓存,重新从设备拉取最新数据,示例代码如下:
- name: 强制采集更新后的VyOS facts vyos_facts: gather_subset: all force: yes
如果是Cisco IOS设备,对应ios_facts模块同样添加force: yes参数即可生效。
内容的提问来源于stack exchange,提问作者Peter Lonergan
相关产品推荐
相关产品推荐

