如何修改Ansible任务输出以显示目标目录名称及其内容?
实现Ansible任务输出显示目录名称及内容
问题
我需要让Ansible的任务输出同时显示目标目录的名称及其内容。当前角色代码执行后,debug模块仅展示目录内容,未标注对应的目录名称,求实现该需求的代码示例并确认可行性。
现有角色代码
vars_files: - /home/admin/.ansible/vault/vault.yml vars: target_dirs: - '/home/admin' - '/root' tasks: - name: 获取目录内容 shell: ls -l {{ item }} with_items: "{{ target_dirs }}" register: disk_usage ignore_errors: true - debug: msg: - "disk usage" - "==========" - "{{ item }}" loop: "{{ disk_usage | json_query('results[].stdout_lines') }}"
当前输出
TASK [debug] *************************************************************************************************** ok: [server1] => (item=['total 0']) => { "msg": [ "disk usage", "############", [ "total 0" ] ] } ok: [server1] => (item=['total 8', 'drwx------. 2 root root 4096 May 15 2020 bin', '-rwx------. 1 root root 519 May 15 2020 clean.sh']) => { "msg": [ "disk usage", "==========", [ "total 8", "drwx------. 2 root root 4096 May 15 2020 bin", "-rwx------. 1 root root 519 May 15 2020 clean.sh" ] ] }
期望输出
ok: [server1] => { "msg": [ "disk usage /home/admin", "==========", [ "total 0" ] ] } ok: [server1] => { "msg": [ "disk usage /root", "==========", [ "total 8", "drwx------. 2 root root 4096 May 15 2020 bin", "-rwx------. 1 root root 519 May 15 2020 clean.sh" ] ] }
解决方案代码
修改后的tasks部分如下:
tasks: - name: 获取目录内容 shell: ls -l {{ item }} with_items: "{{ target_dirs }}" register: disk_usage ignore_errors: true - debug: msg: - "disk usage {{ item.item }}" - "==========" - "{{ item.stdout_lines }}" loop: "{{ disk_usage.results }}"
可行性确认
完全可行。Ansible在使用with_items或loop执行任务并注册结果时,results数组中的每个元素都会保留执行时对应的item值(即目标目录路径),同时包含任务输出的stdout_lines字段。直接遍历disk_usage.results,即可同时获取目录名称和对应内容,实现期望的输出格式。
内容的提问来源于stack exchange,提问作者randomx
相关产品推荐
相关产品推荐

