You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 09:46:05