如何使用 Ansible 的 `json_query_filter` (JMESPath) 提取由短划线键入的 JSON 值?
How do I use Ansible's `json_query_filter` (JMESPath) to extract a JSON value keyed by a dash?
我正在使用 Ansible!
返回了一个很好的数据结构
- name: list ec2 instances
ec2_instance_facts:
region: '{{aws_primary_region}}'
filters:
"tag:organization-tag-1": "specific-value"
register: instances
我想转换这些结果以提取 org-specific-tag2
的值。我可以做类似
的事情
- name: extract instance tags
set_fact:
instance_tags: '{{instances | json_query(query)}}'
vars:
query: "instances[*].tags"
获取标签作为数据结构:
{
"Name": "box-1138",
"organization-tag-1": "specific-value",
"organization-tag-2": "value being queried"
},
{
"Name": "box-999",
"organization-tag-1": "specific-value",
"organization-tag-2": "value being queried 2"
}
我可以在 with_items
中使用它并访问 item["organization-tag-2"]
。这不是问题。但是,对我来说,将列表设置为 ["value being queried", "value being queried 2"]
开始会更优雅。 我只是想不通,因为标签中有一个破折号, 并且 JMESPath 文档中的语法指南......非常不透明。
如何在 JSON 查询过滤器中提取破折号 ?
sub-expression = expression "." ( identifier /
multi-select-list /
multi-select-hash /
function-expression /
"*" )
identifier = unquoted-string / quoted-string
quoted-string = quote 1*(unescaped-char / escaped-char) quote
quote = %x22 ; Double quote: '"'
所以你应该没问题:
- name: extract instance tags
set_fact:
instance_tags: '{{instances | json_query(query)}}'
vars:
query: 'instances[*].tags."organization-tag-2"'
我正在使用 Ansible!
返回了一个很好的数据结构- name: list ec2 instances
ec2_instance_facts:
region: '{{aws_primary_region}}'
filters:
"tag:organization-tag-1": "specific-value"
register: instances
我想转换这些结果以提取 org-specific-tag2
的值。我可以做类似
- name: extract instance tags
set_fact:
instance_tags: '{{instances | json_query(query)}}'
vars:
query: "instances[*].tags"
获取标签作为数据结构:
{
"Name": "box-1138",
"organization-tag-1": "specific-value",
"organization-tag-2": "value being queried"
},
{
"Name": "box-999",
"organization-tag-1": "specific-value",
"organization-tag-2": "value being queried 2"
}
我可以在 with_items
中使用它并访问 item["organization-tag-2"]
。这不是问题。但是,对我来说,将列表设置为 ["value being queried", "value being queried 2"]
开始会更优雅。 我只是想不通,因为标签中有一个破折号, 并且 JMESPath 文档中的语法指南......非常不透明。
如何在 JSON 查询过滤器中提取破折号 ?
sub-expression = expression "." ( identifier /
multi-select-list /
multi-select-hash /
function-expression /
"*" )
identifier = unquoted-string / quoted-string
quoted-string = quote 1*(unescaped-char / escaped-char) quote
quote = %x22 ; Double quote: '"'
所以你应该没问题:
- name: extract instance tags
set_fact:
instance_tags: '{{instances | json_query(query)}}'
vars:
query: 'instances[*].tags."organization-tag-2"'