如何使用ansible.builtin.template模块在文件中写入变量值?
我想在一个文件中记录变量的内容。我是这样做的,如何使用ansible.builtin.template模块在文件中写入变量值?,ansible,Ansible,我想在一个文件中记录变量的内容。我是这样做的, - name: write infraID to somefile.log copy: content: "{{ infraID.stdout }}" dest: somefile.log 它成功了。但是在copy的文档中,我发现他们建议在这种情况下使用template而不是copy 对于高级格式或如果内容包含变量,请使用 ansible.builtin.template模块 我浏览了模板模块
- name: write infraID to somefile.log
copy:
content: "{{ infraID.stdout }}"
dest: somefile.log
它成功了。但是在copy
的文档中,我发现他们建议在这种情况下使用template
而不是copy
对于高级格式或如果内容包含变量,请使用
ansible.builtin.template模块
我浏览了模板模块文档中给出的示例。但我无法找出在我的场景中有效的东西。你能告诉我如何以推荐的方式正确地做这件事吗?
提前谢谢!!干杯 模板
模块没有内容
属性。
您必须创建包含模板的文件,例如:
模板/infra-id模板
{{ infraID.stdoud }}
剧本
---
- hosts: localhost
tasks:
- name: Get infra ID
shell: echo "my-infra-id"
register: infraID
- name: Template the file
template:
src: infra-id-template
dest: infra-id-file
如果您可以发布一些“某些差异”的详细信息,这将是一件好事,因为不清楚您的期望是什么,实际输出是什么。这种差异可能是某种解析错误:您的示例既有格式错误的yaml,也有不正确的任务定义。此外,请确切说明您尝试了什么,并解释为什么它不符合您的要求。最后,使用
command
启动jq
从json文件中读取元素,将其注册到var中以从stdout
中取回,这是一种教科书式的错误做法。您可以读取变量中的文件内容并使用该值。根据具体情况,请参阅模块slurp
和fetch
、文件
查找和来自json的filter@seshadri_c我前面提到的差异是由于元数据文件本身的错误造成的。修复后,确保其按预期工作。但我仍然想学习如何使用模板
而不是复制
来编写变量。我将相应地编辑我的帖子。谢谢。从回答中,您清楚地看到“如果内容包含变量,请使用模板”的文档是有问题的。使用复制
模块的第一个解决方案更简单,并且与模板
模块的功能完全相同。如果可以将简单的Jinja放入参数中,为什么会有人想要编写额外的文件?@MridulGain如果答案对您有帮助,请接受。谢谢