Рендеринг ansible шаблонного json файла без комментариев - PullRequest
0 голосов
/ 15 марта 2020

У меня есть шаблонный json файл foo.json.j2, в котором есть много документации ("json с комментариями"). На сервере этот файл не должен содержать комментарии.

Есть ли способ (или модуль), который я могу использовать для визуализации шаблона без комментариев?

Очевидно, что я могу сделать это вручную с помощью простого скрипта или minifer, , но оно должно быть идемпотентным , поэтому я думаю, что это должно быть решение ansible -centri c.

ОБНОВЛЕНИЕ:
Пример:

// comment
{
  "foo": "bar",   // comment
  "baz": 10
}

1 Ответ

1 голос
/ 15 марта 2020

Как сказано в комментарии @ rolf82, json не имеет синтаксиса для комментариев , поэтому трудно представить, о чем вы говорите, без конкретного c примера.

Между тем, в jinja2 есть поддержка комментариев в шаблонах, которые не будут отображаться в конечном выводе. Следующий шаблон test.json.j2:

{#- This is a jinja2 templated json file with comments -#}
{
    "test":"{{ var1 }}",

    {#- Here we start a dict #}

    "testDict":
        {
            "element1":"{{ var2 }}",
            "element2":"{{ var3 }}"
        }

    {#- End of dict #}

}

, используемый следующей пьесой

---
- hosts: localhost
  gather_facts: false

  vars:
    var1: 1
    var2: 2
    var3: 3

  tasks:
    - template:
        src: test.json.j2
        dest: /tmp/tmp.json

    - vars:
        content: "{{ lookup('file', '/tmp/tmp.json') | string }}"
      debug:
        msg: "{{ content | from_json }}"

, даст следующий результат:

$ ansible-playbook play.yml 

PLAY [localhost] **************************************************************************************************************************************************************************************************

TASK [template] ***************************************************************************************************************************************************************************************************
changed: [localhost]

TASK [debug] ******************************************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": {
        "test": "1",
        "testDict": {
            "element1": "2",
            "element2": "3"
        }
    }
}

PLAY RECAP ********************************************************************************************************************************************************************************************************
localhost                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

и приведет к следующему файл записывается на диск:

$ cat /tmp/tmp.json 
{
    "test":"1",    
    "testDict":
        {
            "element1":"2",
            "element2":"3"
        }
}
...