2017-03-28 12 views
0

サーバーにいくつかのPUT要求をURL:https://XXXX.com/idで送信し、本体としていくつかのjsonファイル(item1.json、item2.json ...)を渡す必要があります。 。可能性:jsonフィールドにアクセスして変数として使用する

- name: invoke service            
     uri: 
     url: "https://XXXX.com/{{ item.id }}" 
     method: PUT 
     return_content: yes 
     body_format: json 
     headers: 
      Content-Type: "application/json" 
      X-Auth-Token: "XXXXXX" 
     body: "{{ lookup('file', item) }}" 
     with_items: 
     - item1.json 
     - item2.json 
     - item3.json 

urlのidパラメータは、それぞれのjsonファイル内にあります。 JSONファイルの構造は以下の通りです:

{ 
    "address": "163.111.111.111", 
    "id": "ajsaljlsaaj", 
    "server": "dnnwqkwnlqkwnldkwqldn" 
} 

私が書いたコードは動作しないようだ、と私は「ansible.vars.unsafe_proxy.AnsibleUnsafeTextオブジェクトが」無属性「ID」を持っていません取得します。 そのフィールドはどのようにアクセスできますか? JSONファイルの内容は、with_itemsでない定義されているよう

url: "https://XXXX.com/{{ item.id }}" 

itemの値はJSON ファイル名です:

答えて

1

問題は、次の行にということです。

- name: invoke service 
    uri: 
    url: "https://XXXX.com/{{ (lookup('file', item)|from_json).id }}" 
    method: PUT 
    return_content: yes 
    body_format: json 
    headers: 
     Content-Type: "application/json" 
     X-Auth-Token: "XXXXXX" 
    body: "{{ lookup('file', item) }}" 
    with_items: 
    - item1.json 
    - item2.json 
    - item3.json 

一つ立派ソリューションを使用することです:


最速修正が開き、JSONはあなたのbody:宣言で行うのと同じ方法でファイルを解析することですwith_itemsの代わりにwith_file:ディレクティブ。

with_fileが自動的に開いているだろうし、ファイルの内容を読んで、そうもうlookupをコールする必要はありません:

- name: Provision the Docker Swarm managers 
    hosts: localhost 
    tags: provision 
    gather_facts: False 
    become: True 
    tasks: 
    - name: invoke service 
    uri: 
     url: "https://XXXX.com/{{ (item|from_json).id }}" 
     method: PUT 
     return_content: yes 
     body_format: json 
     headers: 
     Content-Type: "application/json" 
     X-Auth-Token: "XXXXXX" 
     body: "{{ item }}" 
    with_file: 
     - item1.json 
     - item2.json 
     - item3.json 
関連する問題