如何正确向Ansible URI模块传递数组参数?
解决Ansible URI模块传递数组格式错误问题
问题原因
你当前的Playbook里,body是手动拼接的JSON字符串,当把{{ letters }}插入时,Ansible会将数组变量转换成它的字符串表示形式(类似['aa', 'ab', ...]),再作为单个字符串值放到JSON数组里,最终导致发送的请求中letters变成包含单个字符串元素的数组,而非期望的原数组结构。
正确解决方案
利用body_format: json的特性,直接用YAML字典定义body,让Ansible自动完成JSON序列化,以此保留数组的原始类型:
修改后的Playbook片段:
- name: Create a letter job uri: url: 'http://localhost:8000/api/app' method: POST headers: Content-Type: application/json body: letters: "{{ letters }}" body_format: json return_content: yes register: response
如果偏好单行写法,也可以这样写:
body: { "letters": "{{ letters }}" }
效果说明
修改后,Ansible会自动将letters数组序列化为标准的JSON数组,发送到API的请求体中letters字段会变成["aa", "ab", "ac", "ad", "ae"],对应返回的响应结构也会和你期望的一致。
你之前尝试的replace过滤器无效,是因为它仅修改了变量的字符串表现形式,没有解决变量类型被强制转换的核心问题。直接用YAML字典配合body_format: json才是正确的处理方式。
内容的提问来源于stack exchange,提问作者clarkus978
相关产品推荐
相关产品推荐

