Ansible赋值新变量时是否会自动将JSON字符串转为字典?
问题解答
这是Ansible的正常设计特性,不属于Bug。
核心原因
- Ansible基于Jinja2实现模板渲染逻辑,当你通过
{{ }}包裹的表达式给set_fact赋值时,渲染引擎默认会对输出结果做自动类型探测与转换。 - 如果渲染得到的字符串是合法的JSON/YAML格式,引擎会自动将其反序列化为对应的数据结构(字典、列表等)。你的案例中
output.stdout是标准的JSON对象字符串,因此赋值后会被直接解析为字典类型,所以out is string的判断不成立,对应调试任务被跳过。
可选处理方案
如果你希望赋值后的out变量保持原始字符串类型,不触发自动类型转换,可以添加string过滤器强制指定类型:
- set_fact: out: "{{ output.stdout | string }}"
修改后out is string的判断会正常命中,后续需要使用JSON结构时,你也可以手动调用from_json过滤器完成转换:{{ out | from_json }}。
内容的提问来源于stack exchange,提问作者Frenchy
相关产品推荐
相关产品推荐

