Ansible查找JSON文件中的单行

5
我需要从一个动态生成的JSON文件中读取IP行,并将其添加到服务器上的配置文件中。
在Ansible首页上,我找到了两个有用的模块: - lookup模块 - fileinline模块
然而,lookup示例显示使用此短语查找整个文件的内容“{{ lookup('file', '/etc/foo.txt') }}”。如何过滤结果以读取单行?
有人知道实现这个目标的好方法吗?
1个回答

11

我猜你需要从JSON字典中获取特定的键?如果它只是一个无法在JSON结构内访问的随机行,则会很困难。您需要在单独的任务中筛选出该行。

但是假设您想要从字典中获取特定的值,那么您可以使用from_json过滤器将JSON转换为对象:

{{ lookup('file', '/etc/foo.txt') | from_json }}

现在如果你想要从所包含的数据结构中获取bar的值,可以尝试使用以下方法:

{{ (lookup('file', '/etc/foo.txt') | from_json).get('bar') }}

不幸的是,Ansible 中似乎无法使用“.get('bar')”过滤器。我收到了“没有名为'from_json.get”的过滤器”的错误提示。 - alixander
括号很重要。from_json.get(...) 不会起作用。 - udondan
我确实包括了括号。 "{{ lookup('file', '/etc/foo.txt')| from_json.get('title')}}" - alixander
1
你没有成功 :) 试试这个: "{{ (lookup('file', '/etc/foo.txt') | from_json).get('title')}}" - udondan
1
如果有人想从URL中提取数据,我从文档中找到了解决方法。 (lookup('url', 'https://path/to/remote/json', split_lines=False) | from_json).get('findthis')) 你也可以链接多个.get()调用。只需确保不要忘记括号。 - David R.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接