2017-11-10 3 views
1

Jquery in Ansibleはうまく機能しません。ここにシナリオがあります。GET APIコールを使用しているAnonymousからJquery(jmespath)を使用

私は衛星APIにGET呼び出しをしようとしています。それは私に次の出力をもたらします:

"parameters": [ 
      { 
       "name": "sports", 
       "value": "soccer" 
      }, 
      { 
       "name": "color", 
       "value": "blue" 
      }, 
     ], 

今私はスポーツの価値をgrepしたいと思います。ここに私の脚本

- name: Make GET api calls from ansible 
    uri: 
    url: https://example/api/xyz 
    method: GET 
    user: administrator 
    password: [email protected] 
    force_basic_auth: yes 
    validate_certs: no 
    register: getoutput 
- name: grep the value of sports 
    debug: msg="{{ getoutput.json|json_query('parameters[?name=='sports'].value') }}" 

それは疑問符のエラーを投げます。..です

`失敗しました! => {"msg": "テンプレート文字列中にテンプレートエラーが発生しました:unexpected char u '?'

私は下記の行でデバッグ行を交換した場合、私は。他の側では、ここでのドキュメント http://docs.ansible.com/ansible/latest/playbooks_filters.html#json-query-filter http://jmespath.org/tutorial.html ----フィルターの突起部分

次のです、それは動作しますが、それは、配列を経由して、それを表示しますそして私は、アレイのIDを使って何をgrep検索する必要はありません。

debug: msg="{{ getoutput.json|json_query('parameters[0].value') }}" 

をあなたのいずれかがしてください助けてください。

+1

ラバーアヒルの各引用符の意味を説明してください。次に、あなたがリンクしているAnipalの文書に示されているメカニズムを適用します。 – techraf

答えて

0

あなたがにリンクされているドキュメントのページを見ている場合、例があります:

- name: "Display all server names from cluster1" 
    debug: var=item 
    with_items: "{{domain_definition|json_query(server_name_cluster1_query)}}" 
    vars: 
    server_name_cluster1_query: "domain.server[?cluster=='cluster1'].port" 

なぜそれが代わりに直接"domain.server[?cluster=='cluster1'].port"を含めての、二行以上にそれを使用するだけserver_name_cluster1_query変数を定義しませんwith_items

with_itemsのテンプレート全体を引用符で囲む必要があるため、クエリは引用符で囲む必要があり、文字列cluster1も引用符で囲む必要があります。

一重引用符と二重引用符はありますが、三重引用符はありません。


のはあなたの例を見てみましょう:parameters[?name==].value

msg="{{ getoutput.json|json_query('parameters[?name=='sports'].value') }}" 

あなたは、単一引用符で囲まれた2つの文字列を持っています。

二重引用符で囲まれた3つの部分は、{{ getoutput.json|json_query(,sports、および) }}です。

一緒には意味がありません。

+0

ありがとうございます。できます。 !あなたは人生の節約者です。あなたは素晴らしいです:) – sherri

+0

@techrafの提案に、私は引用符を追加し、それは働いた。 :)これは私がデバッグを置き換えた行です:msg = "{{restdata.json | json_query(" parameters [?name == 'sssd_user']。value ")}}" – sherri

関連する問題