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