Ansible:访问json字段并将其用作变量
我必须发送一些PUT请求到服务器,URL:,并作为主体传递一些json文件item1.json、item2.jsonAnsible:访问json字段并将其用作变量,json,ansible,Json,Ansible,我必须发送一些PUT请求到服务器,URL:,并作为主体传递一些json文件item1.json、item2.json - name: invoke service uri: url: "https://XXXX.com/{{ item.id }}" method: PUT return_content: yes body_for
- 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 object”没有属性“id”。
那么,如何访问该字段呢?问题在于以下几行:
url: "https://XXXX.com/{{ item.id }}"
item的值是with_items中定义的JSON文件名,而不是JSON文件的内容
最快的修复方法是以与身体相同的方式打开和解析JSON文件:声明:
- 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
一个更好的解决方案是使用with_file:directive而不是with_项
with_文件将自动打开并读取文件内容,因此无需再调用查找:
- 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