Назад | Перейти на главную страницу

ansible find: получить путь к каталогу

В поиске я получаю следующий вывод, как фильтровать только путь?

find:
  paths: /jv01
  recurse: yes
  file_type: directory
  patterns: 'agent_13.3.0.0.0'
register: oem
- debug:
  var: oem

"oem": {
        "changed": false,
        "examined": 24156,
        "failed": false,
        "files": [
            {
                "atime": 1545128921.5473044,
                "ctime": 1545120358.3347161,
                "dev": 64768,
                "gid": 1027,
                "inode": 67,
                "isblk": false,
                "ischr": false,
                "isdir": true,
                "isfifo": false,
                "isgid": false,
                "islnk": false,
                "isreg": false,
                "issock": false,
                "isuid": false,
                "mode": "0755",
                "mtime": 1545120358.3347161,
                "nlink": 28,
                "path": "/jv01/oracle/agent_13.3.0.0.0",
                "rgrp": true,
                "roth": true,
                "rusr": true,
                "size": 4096,
                "uid": 1027,
                "wgrp": false,
                "woth": false,
                "wusr": true,
                "xgrp": true,
                "xoth": true,
                "xusr": true
            }
        ],
        "matched": 1,
        "msg": ""
    }
}

Пути можно получить, перебирая список и извлекая каждый путь по отдельности.

Вы должны сделать это, потому что find возвращает список dicts о каждом файле. В конце концов, может быть возвращено несколько.

- name: Show file paths
  debug:
    msg: "{{ item.path }}"
  with_items: "{{ oem.files }}"

попробуйте фильтры Jinja2

{{ oem.files | map(attribute='path') | list }}

имейте в виду, что это создаст список. Если вам не нужен список, вы можете использовать это

{{ oem.files | map(attribute='path') | join('') }}

но в случае, если файлов найдено больше, выводом будут все пути к найденным файлам вместе.