Ansible v2.6.3
我写了一个Ansible角色在AWS秘密管理器中创建秘密,我希望能够这样称呼它
$ ansible-playbook -i "localhost," secretsmanager.yml -e command=update -e service_name=test-svc -e text_box='{"secret":"value"}'
我首先将传入的json的值复制到
/tmp/{{ service_name }}.json
因此在此示例中,文件为
/tmp/test-svc.json
这是复制它的任务
- name: Setup up dest file
set_fact:
secret: "{{ service_name }}"
dst_file: "/tmp/{{ service_name }}.json"
- name: "Copy {{ text_box }} to {{ dst_file }}"
shell: |
echo {{ text_box }} > {{ dst_file }}
但是,当我查看/tmp/test-svc.json时,它看起来像
$ cat /tmp/test-svc.json
{secret:value}
我该怎么做,以便json文件正确?
{"secret":"value"}
由于我的用户会使用它,所以我希望他们能够正常编写json,即在json本身中不包含转义符。
答案 0 :(得分:0)
至少有两种方法可以做到这一点:
1)使用Jinja2过滤器将输出强制为JSON
- name: "Copy {{ text_box }} to {{ dst_file }}"
shell: |
echo {{ text_box | to_json }} > {{ dst_file }}
2)使用Ansible copy
模块。我认为这样做会更好,因为它可以让您更好地控制文件,并在这种情况下自动执行正确的操作。
- copy:
dest: "{{ dst_file }}"
content: "{{ text_box }}"
顺便说一句,如果您还没有读过Ansible Vault的文档,那是值得的。取决于您的环境,将密码作为参数传递给命令行并不十分安全。根据您的用例,您可能会发现将机密存储在Ansible Vault中会增加一层保护。