在Ansible中使用Jinja2时如何避免创建临时文件
单任务实现方案
你可以直接将模板渲染逻辑内联到shell任务中,不需要额外的set_fact步骤,全程不会生成临时文件,写法如下:
--- - hosts: localhost gather_facts: false any_errors_fatal: true ################################################################ # 必传 --extra-vars 参数 # # myvar : 自定义变量值 # # ############################################################## vars: myvar: "{{ myvar }}" tasks: - name: 直接渲染模板并传入命令执行 shell: | cat <<< {{ lookup('template', './templates/mytemplate.j2') | quote }} | ./mycommand -f -
说明
lookup('template')会直接在Ansible控制节点完成Jinja2模板渲染,返回渲染后的纯文本内容,不会写入磁盘- 增加
quote过滤器是为了兼容模板渲染结果包含特殊字符(引号、换行、空格等)的场景,避免shell解析出错 - 整个流程只有一个任务,没有临时文件生成,完全符合要求
内容的提问来源于stack exchange,提问作者fckbo
相关产品推荐
相关产品推荐

