Ansible中如何使用when条件遍历列表项动态判断软件包安装状态
实现方案
你可以使用Ansible内置的loop循环遍历pkg_list列表,动态替换检测的软件包名称即可完成批量检测,完整修改后的playbook如下:
--- - name: Validate packages hosts: localhost tasks: - name: 收集系统已安装软件包事实 package_facts: manager: auto - name: 生成已安装软件包名称列表 set_fact: pkg_list: "{{ ansible_facts.packages | list | unique }}" - name: 批量检测所有软件包安装状态 debug: msg: "{{ ansible_facts.packages[item] | length }} 个版本的 {{ item }} 已安装!" loop: "{{ pkg_list }}" when: "item in ansible_facts.packages"
代码说明
- 新增
loop: "{{ pkg_list }}"参数,任务会逐个遍历pkg_list内的所有软件包名称,当前遍历到的元素会存入内置变量item - 原静态的
firefox字符串全部替换为动态变量{{ item }},实现每个包的检测逻辑复用 when条件保留,避免因异常数据导致任务执行报错
如果需要兼容自定义pkg_list、检测指定包是否安装的场景,还可以调整为同时输出未安装提示的版本:
- name: 批量检测指定软件包安装状态 debug: msg: "{{ '%s 个版本的 %s 已安装!' % (ansible_facts.packages[item] | length, item) if item in ansible_facts.packages else '%s 未安装' % item }}" loop: "{{ pkg_list }}"
内容的提问来源于stack exchange,提问作者r4koodli
相关产品推荐
相关产品推荐

