2017-09-24 2 views
1

Ich benutze ansible 2.4.0 unter OSX. Das folgende Textbuch ...Ansible json_query gibt eine Liste aus, wenn ein Filterausdruck verwendet wird

--- 
- hosts: localhost 
    connection: local 
    gather_facts: False 

    vars: 
    data: 
    - name: thing1 
     desc: I am thing 1 
    - name: thing2 
     desc: I am thing 2 

    tasks: 
    - debug: msg="{{ data|json_query(\"[1].desc\") }}" 
    - debug: msg="{{ data|json_query(\"[?name=='thing2'].desc\") }}" 

erzeugt die folgende Ausgabe:

PLAY [localhost] *************************************************************** 

TASK [debug] ******************************************************************* 
ok: [localhost] => { 
    "msg": "I am thing 2" 
} 

TASK [debug] ******************************************************************* 
ok: [localhost] => { 
    "msg": [ 
     "I am thing 2" 
    ] 
} 

PLAY RECAP ********************************************************************* 
localhost     : ok=2 changed=0 unreachable=0 failed=0 

Meine Frage ist, warum in der zweiten Debug-Aufgabe ist die Ausgabe in einer Liste ([])?

Antwort

1

Das liegt daran, dass in JMESPath, der implementation behind json_query ist, ein Indexausdruck definiert ist, um immer einen einzelnen Wert zurückzugeben, möglicherweise null (see [1]).

während für den Filterausdruck, der ein Vorsprung ist, wird eine Anordnung angenommen, nach der Auswertung der LHS der Anfrage zurückgeführt werden, die im Falle leer sein kann keine Werte übereinstimmen (see: [2]).

Verwandte Themen