开发Ansible软件版本获取模块应选用_facts还是_info模块?
Ansible模块开发与facts更新相关问题解答
模块命名选型说明
你对*_info模块的选型判断是正确的,Ansible官方对两类模块的定位区分非常明确:
*_facts模块:返回的内容会自动归入ansible_facts全局字典,适合存储系统层面通用、基础的全局属性,通常在playbook初始的gather_facts阶段统一采集*_info模块:返回的内容为独立的查询结果,不会默认写入全局facts,适配的场景就是官方描述的
information on individual files or programs.
你需要查询的是特定自研软件的版本,属于单个程序的专属信息,用mysw_info命名完全符合官方规范。
facts自动更新问题说明
Ansible的facts默认不会自动重新检测更新,全局facts仅会在playbook启动后的gather_facts阶段执行一次全量采集,后续任务对系统属性的修改(比如你提到的升级自研软件变更版本)不会主动触发facts刷新。
如果需要获取更新后的属性值,有两种常用方案:
- 调用
setup模块重新执行全量facts采集,如果是自定义*_facts模块的话也需要重新调用对应模块才能更新对应自定义facts值 - 升级任务执行完成后,重新调用你开发的
mysw_info模块查询最新版本,该方案不需要全量刷facts,执行效率更高
如果你有将版本信息存入全局facts的需求,可以在调用mysw_info拿到返回结果后,通过set_fact模块手动写入自定义fact即可。
内容的提问来源于stack exchange,提问作者TSG
相关产品推荐
相关产品推荐

