Update JSON Query filter examples (#42432) (#43491)

* Update JSON Query filter examples

Correct syntax on one example
Add more examples of escaping
Change example to show joining list to string

(cherry picked from commit 7b0dea45e9)
This commit is contained in:
Alicia Cozine 2018-07-31 10:17:23 -05:00 committed by GitHub
parent 41a0bcf2fc
commit da043d635e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -288,40 +288,51 @@ Now, let's take the following data structure::
To extract all clusters from this structure, you can use the following query::
- name: "Display all cluster names"
debug: var=item
loop: "{{domain_definition|json_query('domain.cluster[*].name')}}"
debug:
var: item
loop: "{{ domain_definition | json_query('domain.cluster[*].name') }}"
Same thing for all server names::
- name: "Display all server names"
debug: var=item
loop: "{{domain_definition|json_query('domain.server[*].name')}}"
debug:
var: item
loop: "{{ domain_definition | json_query('domain.server[*].name') }}"
This example shows ports from cluster1::
- name: "Display all server names from cluster1"
debug: var=item
loop: "{{domain_definition|json_query(server_name_cluster1_query)}}"
- name: "Display all ports from cluster1"
debug:
var: item
loop: "{{ domain_definition | json_query(server_name_cluster1_query) }}"
vars:
server_name_cluster1_query: "domain.server[?cluster=='cluster1'].port"
.. note:: You can use a variable to make the query more readable.
Or, alternatively::
Or, alternatively print out the ports in a comma separated string::
- name: "Display all server names from cluster1"
- name: "Display all ports from cluster1 as a string"
debug:
var: item
loop: "{{domain_definition|json_query('domain.server[?cluster=`cluster1`].port')}}"
msg: "{{ domain_definition | json_query('domain.server[?cluster==`cluster1`].port') | join(', ') }}"
.. note:: Here, quoting literals using backticks avoids escaping quotes and maintains readability.
Or, using YAML `single quote escaping <http://yaml.org/spec/current.html#id2534365>`_::
- name: "Display all ports from cluster1"
debug:
var: item
loop: "{{ domain_definition | json_query('domain.server[?cluster==''cluster1''].port') }}"
.. note:: Escaping single quotes within single quotes in YAML is done by doubling the single quote.
In this example, we get a hash map with all ports and names of a cluster::
- name: "Display all server ports and names from cluster1"
debug:
var: item
loop: "{{domain_definition|json_query(server_name_cluster1_query)}}"
loop: "{{ domain_definition | json_query(server_name_cluster1_query) }}"
vars:
server_name_cluster1_query: "domain.server[?cluster=='cluster2'].{name: name, port: port}"