Как отфильтровать Ansible 'find' output - PullRequest
0 голосов
/ 28 мая 2019

Я хотел бы просмотреть список символических ссылок с некоторых удаленных серверов в терминале, но при запуске playbook печатается много информации.

Это версия 2.7.12, работающая на сервере Ubuntu. Я использую модуль 'find' и ссылку file_type: для получения сведений о программной ссылке.

Find возвращает много деталей с ключом возвращаемого значения «files», но мне просто нужны программные ссылки и соответствующее имя сервера в терминале.

---
# tasks file for application
- name: Get the current applications running
  find:
    paths: /path/to/app
    file_type: link
  register: find_result

- name: Print find output
  debug: 
    var: find_result.results

Фактический результат:

ok: [client3.example.com] => {
    "find_result.files": [
        {
            "atime": 1559027986.555, 
            "ctime": 1559027984.828, 
            "dev": 64768, 
            "gid": 0, 
            "gr_name": "root", 
            "inode": 4284972, 
            "isblk": false, 
            "ischr": false, 
            "isdir": false, 
            "isfifo": false, 
            "isgid": false, 
            "islnk": true, 
            "isreg": false, 
            "issock": false, 
            "isuid": false, 
            "mode": "0777", 
            "mtime": 1559027984.828, 
            "nlink": 1, 
            "path": "/path/to/app/softlink.1", 
            "pw_name": "root", 
            "rgrp": true, 
            ...
            ...

Хотелось бы получить отфильтрованный вывод в терминале, например:

ok: [client3.example.com] => {
    "find_result.files": [
        {
            "path": "/path/to/app/softlink.1",
},

1 Ответ

1 голос
/ 28 мая 2019

Есть несколько способов решения этого вопроса. Вы можете использовать фильтр map, чтобы извлечь из результатов только атрибут path:

- name: Print find output
  debug:
    var: results.files|map(attribute='path')|list

Учитывая пример данных в вашем вопросе, это приведет к:

TASK [Print find output] *****************************************************************************************************************************************************
ok: [localhost] => {
    "results.files|map(attribute='path')|list": [
        "/path/to/app/softlink.1"
    ]
}

Вы также можете выполнить нечто подобное, используя фильтр json_query, который применяет к вашим данным запросы JMESPath :

- name: Print find output
  debug:
    var: results.files|json_query('[*].path')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...