我试图从Ansible的cloudfront_facts
中提取特定别名的CDN域名,输出如下(摘要):
{
"cdn_facts": {
"ansible_facts": {
"cloudfront": {
"summary": {
"distributions": [
{
"Aliases": [
"media.example.com"
],
"DomainName": "a1b2c3d4e5f6g.cloudfront.net"
},
{
"Aliases": [
"example.com"
],
"DomainName": "g7f6e5d4c3b2a.cloudfront.net"
}
]
}
}
}
}
换句话说,对于别名example.com
,我想用g7f6e5d4c3b2a.cloudfront.net
的值设置一个事实。在
我尝试了下面的方法来打印值,但这只是生成一个空列表。在
^{pr2}$我甚至不知道如何调试它,因为cdn_facts.ansible_facts.cloudfront.summary.distributions
生成一个dict数组,但是selectattr
和{
您的数据中没有一个名为
Aliases[0]
的属性,所以这就是您的selectattr
过滤器失败的原因。在对于从深度嵌套的字典中提取数据,
json_query
过滤器通常比链接本地Jinja过滤器更好。例如,给定别名example.com
,以下表达式将提取相应的DomainName
属性:我们可以在这样的剧本中使用:
^{pr2}$将输出:
json_query
模块使用jmespath搜索语法。您可以通过将数据粘贴到https://jmespath.org处的文本框中,然后在其上方的字段中输入搜索表达式来尝试jmespath表达式。或者,您可以使用jpterm命令行工具。在相关问题 更多 >
编程相关推荐