代码之家  ›  专栏  ›  技术社区  ›  Chris F

在Ansible中,如何将传入的json存储在文件中?

  •  0
  • Chris F  · 技术社区  · 7 年前

    我写了一个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"}
    

    1 回复  |  直到 7 年前
        1
  •  0
  •   clockworknet    7 年前

    至少有两种方法可以执行此操作:

    1) 使用Jinja2过滤器强制输出为JSON

    - name: "Copy {{ text_box }} to {{ dst_file }}"
      shell: |
        echo {{ text_box | to_json }} > {{ dst_file }}
    

    copy 单元我认为这样更好,因为它可以让您更好地控制文件,并在这种情况下自动执行正确的操作。

    - copy:
        dest: "{{ dst_file }}"
        content: "{{ text_box }}"
    

    顺便说一句,如果你还没有读过这些文档的话,那就值得一读了 Ansible Vault . 依赖于您的环境,通过命令行作为参数传递机密并不是非常安全的。根据您的使用情况,您可能会发现在Ansible Vault中存储机密会增加额外的保护层。