我想查看终端中一些远程服务器的符号链接列表,但是运行剧本时会打印很多信息。
这是在Ubuntu服务器上运行的ansible 2.7.12。我正在使用“查找”模块和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",
},
答案 0 :(得分:1)
有两种方法可以解决此问题。您可以使用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')