如何让Ansible Playbook遍历指定软件包列表而非仅检查vim
如何修改Ansible Playbook遍历指定软件包列表输出版本信息
修改后的完整Playbook
--- - hosts: [localhost] remote_user: "max" become: no vars: # 在这里定义你要检查的软件包名称列表 packages_to_check: - vim - nginx - curl tasks: - name: 收集已安装软件包信息 package_facts: manager: auto - name: 遍历输出各软件包版本 debug: msg: >- {% if item in ansible_facts.packages %} {{ ansible_facts.packages[item][0]['name'] }} is {{ ansible_facts.packages[item][0]['version'] }} {% else %} {{ item }} 未安装 {% endif %} loop: "{{ packages_to_check }}"
关键修改说明
- 定义待检查包列表:通过
vars块定义packages_to_check数组,把需要检查的包名全部放入其中,后续要调整检查范围直接修改这个列表即可。 - 添加循环遍历逻辑:给
debug任务加上loop: "{{ packages_to_check }}",让任务逐个处理列表里的每个软件包。 - 增加容错判断:用Jinja2条件语句判断当前包是否存在于已收集的包事实中,避免因某个包未安装导致Playbook报错中断,同时给出明确的状态提示。
执行示例输出
TASK [遍历输出各软件包版本] **************************************************************************************************************************************************************** ok: [localhost] => (item=vim) => msg: vim is 2:8.2.3995-1ubuntu2.17 ok: [localhost] => (item=nginx) => msg: nginx 未安装 ok: [localhost] => (item=curl) => msg: curl is 7.81.0-1ubuntu1.14
内容的提问来源于stack exchange,提问作者Maksim
相关产品推荐
相关产品推荐

