将变量写入 Ansible 的文件

我通过 URI 模块提取 JSON,并希望将接收到的内容写到一个文件中。我能够获取内容并将其输出到调试器,因此我知道内容已被接收,但我不知道编写文件的最佳实践。

220565 次浏览

Tmoschou的一个重要评论是:

As of Ansible 2.10, The documentation for ansible.builtin.copy says:
If you need variable interpolation in copied files, use the
ansible.builtin.template module. Using a variable in the content
field will result in unpredictable output.

有关详细信息,请参阅 这个解释


原答案:

您可以使用带有 content参数的 copy模块:

- copy: content="\{\{ your_json_feed }}" dest=/path/to/destination/file

这里的医生: 复制模块

根据雷蒙的回答,我遇到了一个错误。我尝试编写的 JSON 中的空格问题通过将剧本中的任务更改为:

- copy:
content: "\{\{ your_json_feed }}"
dest: "/path/to/destination/file"

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

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

例如:

- name: copy upstart script
template:
src: myCompany-service.conf.j2
dest: "/etc/init/myCompany-service.conf"

现在我们可以使用 dest选项直接指定目标文件。在下面的示例中,输出 json 存储在 /tmp/repo_version_file

- name: Get repository file repo_version model to set ambari_managed_repositories=false
uri:
url: 'http://<server IP>:8080/api/v1/stacks/HDP/versions/3.1/repository_versions/1?fields=operating_systems/*'
method: GET
force_basic_auth: yes
user: xxxxx
password: xxxxx
headers:
"X-Requested-By": "ambari"
"Content-type": "Application/json"
status_code: 200
dest: /tmp/repo_version_file