Ansible中如何对file lookup加载的内容做二次变量求值渲染
问题解答
可以实现对已加载的文件内容做变量注入求值,不需要调用template lookup读取文件,具体实现方法如下:
推荐方案(Ansible 2.10+)
直接使用Ansible内置的template过滤器,即可将变量中存储的Jinja2格式字符串按当前上下文变量渲染:
- name: 加载文件内容到foo变量 set_fact: foo: "{{ lookup('file', 'foo.txt') }}" - name: 渲染foo内的变量表达式 set_fact: evaluated_foo: "{{ foo | template }}" - name: 输出渲染后结果 debug: msg: "{{ evaluated_foo }}"
假设你提前定义了bar变量的值为"test",上述任务运行后输出的结果就是Some test random text。
低版本Ansible兼容方案
如果使用的Ansible版本低于2.10,没有内置template过滤器,可以用如下写法实现同等效果:
- name: 渲染foo内的变量表达式(兼容低版本) set_fact: evaluated_foo: "{{ lookup('template', '', template=foo) }}"
注意事项
渲染操作执行前,需要确保字符串中引用的所有变量(比如本示例中的bar)已经完成赋值,否则会抛出变量未定义的报错。
内容的提问来源于stack exchange,提问作者adad3324d
相关产品推荐
相关产品推荐

