如何在Ansible中仅捕获并输出执行失败的命令
筛选Ansible循环中执行失败的命令
你可以通过Ansible的过滤器精准筛选循环结果里执行失败的条目,以下是修改后的Playbook:
--- - name: Verify sudo access become: true become_user: "{{ install_user }}" shell: sudo -l | grep "{{ item }}" register: systemctl_result loop: - /usr/bin/mv - /usr/bin/olcenctl - /usr/bin/yum when: ansible_hostname in groups['operator'] ignore_errors: true - name: Print failed commands only debug: msg: "Failed command: {{ item.item }}" loop: "{{ systemctl_result.results | selectattr('failed', 'equalto', true) | list }}" when: systemctl_result.results | selectattr('failed', 'equalto', true) | list | length > 0
关键说明:
selectattr('failed', 'equalto', true):从循环结果集合中筛选出failed状态为true的条目item.item:每个循环结果里的item字段对应你原loop中定义的命令路径- 末尾的
when条件用于避免无失败命令时输出空循环结果
如果需要查看失败的详细错误信息,可将msg调整为:
msg: "Failed command: {{ item.item }} | Error detail: {{ item.stderr }}"
内容的提问来源于stack exchange,提问作者Pravin RC
相关产品推荐
相关产品推荐

