在保留缩进的同时使用Ansible设置JSON文件
我想用Ansible提供一个JSON文件。此文件的内容是我的Ansible剧本中的一个变量 对于我的用例来说非常重要:我需要缩进和换行符与变量中的缩进和换行符完全相同 变量如下所示:在保留缩进的同时使用Ansible设置JSON文件,json,ansible,Json,Ansible,我想用Ansible提供一个JSON文件。此文件的内容是我的Ansible剧本中的一个变量 对于我的用例来说非常重要:我需要缩进和换行符与变量中的缩进和换行符完全相同 变量如下所示: my_ansible_var: { "foobar": { "foo": "bar" }, "barfoo": { "bar": "foo"
my_ansible_var:
{
"foobar": {
"foo": "bar"
},
"barfoo": {
"bar": "foo"
}
}
在我的剧本中是这样使用的:
- name: drop the gitlab-secrets.json file
copy:
content: "{{ my_ansible_var }}"
dest: "/some/where/file.json"
问题:播放此任务时,我的文件已设置为“一行”文件:
我尝试了其他几种方法:
- 检索我的JSON内容的
值,并使用base64
:最后出现相同的问题内容:“{{my_ansible_var | b64decode}}”
- 我试着玩:没有一个方块指示器能帮我解决这个问题
- 我试着将like
,添加到_json
:这里没有运气了添加到_nice_json(indent=2)
my_ansible\u var
是一个dict。如果您不需要在剧本中访问它的键(例如,my_ansible\u var.foobar.foo
),只希望它作为您的copy
任务的JSON字符串,请强制它为字符串---
- hosts: localhost
gather_facts: no
vars:
my_ansible_var: |
{
"foobar": {
"foo": "bar"
},
"barfoo": {
"bar": "foo"
}
}
tasks:
- copy:
content: "{{ my_ansible_var | string }}"
dest: /tmp/out.json
请注意
my_ansible_var
定义中的竖条和内容中的字符串过滤器。谢谢,它按预期工作。我误解了我声明/使用变量的方式
---
- hosts: localhost
gather_facts: no
vars:
my_ansible_var: |
{
"foobar": {
"foo": "bar"
},
"barfoo": {
"bar": "foo"
}
}
tasks:
- copy:
content: "{{ my_ansible_var | string }}"
dest: /tmp/out.json