将变量写入Ansible中的文件

Kei*_*ler 91 file ansible-playbook

我通过URI模块提取JSON,并希望将收到的内容写入文件.我能够获取内容并将其输出到调试器,因此我知道已收到内容,但我不知道编写文件的最佳做法.

Ram*_*nte 170

你可以使用copy模块,content参数:

- copy: content="{{ your_json_feed }}" dest=/path/to/destination/file
Run Code Online (Sandbox Code Playgroud)

这里的文档:复制模块

  • content ="{{your_json_feed}}"处理空格和换行符.报价很重要. (4认同)
  • 从 Ansible 2.10 开始,“ansible.builtin.copy”的文档表示:_如果您需要在复制的文件中进行变量插值,请使用“ansible.builtin.template”模块。在 `content` 字段中使用变量将导致不可预测的输出。更多详细信息请参阅 https://github.com/ansible/ansible/issues/50580 以及 https://github.com/ansible/ansible 的解释/问题/34595#issuecomment-356091161 (3认同)

Jan*_*sen 11

除非您编写非常小的文件,否则您应该使用模板.

例:

- name: copy upstart script
  template: 
    src: myCompany-service.conf.j2 
    dest: "/etc/init/myCompany-service.conf"
Run Code Online (Sandbox Code Playgroud)

  • 尽管Ramon的答案完全可以回答所要提出的问题,但总体而言,这是最好的方法。例如,如果您有一本在云中创建VM的剧本,并且想为另一本剧本生成主机清单,那么就可以使用模板。 (2认同)

Tob*_*mer 7

根据Ramon的回答,我遇到了一个错误.我尝试编写JSON中的空格的问题我通过将剧本中的任务更改为以下内容来修复它:

- copy:
    content: "{{ your_json_feed }}"
    dest: "/path/to/destination/file"
Run Code Online (Sandbox Code Playgroud)

截至目前,我不确定为什么需要这样做.我最好的猜测是,它与如何在Ansible中替换变量以及解析生成的文件有关.