如何在Ansible循环安装软件包时打印正在安装的package名称
问题修正方案
你原来的代码存在两处语法/逻辑错误:
debug是独立的Ansible模块,不能作为package模块的参数直接写在同个任务的参数列表里- 你当前直接将整个软件包列表传给
package模块的name参数,是一次性批量安装所有包,不会触发单包循环逻辑,无法单独打印每个包的名称
正确Playbook示例
实现逐个安装软件包,且每次循环都打印当前处理的包名的写法如下:
- name: 安装基础软件包 when: ansible_pkg_mgr == 'apt' vars: packages: - git - vim - htop block: - name: 打印当前待安装的软件包名称 debug: msg: "当前正在安装软件包:{{ item }}" loop: "{{ packages }}" - name: 执行软件包安装 package: name: "{{ item }}" state: present loop: "{{ packages }}"
如果你需要打印安装结果对应的软件包,也可以用注册返回值的方式实现:
- name: 安装基础软件包 package: name: "{{ item }}" state: present vars: packages: - git - vim - htop loop: "{{ packages }}" register: install_result when: ansible_pkg_mgr == 'apt' - name: 打印所有安装完成的软件包名称 debug: msg: "已完成安装的软件包:{{ item.item }}" loop: "{{ install_result.results }}"
内容的提问来源于stack exchange,提问作者Papouche Guinslyzinho
相关产品推荐
相关产品推荐

