почему ansible всегда заменяет двойные кавычки одинарными кавычками в шаблонах?

Я пытаюсь создать Dockerfiles с Ansible template-см. Источник роли и шаблон в Ansible Galaxy и Github

мне нужно создать стандартную строку Dockerfile, например:

...
VOLUME ["/etc/postgresql/9.4"]
...

однако, когда я помещаю это во входной файл:

...
instruction: CMD
value: "["/etc/postgresql/{{postgresql_version}}"]"
...

в конечном итоге он отображается как:

...
VOLUME ['/etc/postgresql/9.4']
...

и я теряю " (что делает Dockerfiles бесполезными)

помочь ? Как мне убедить Джинджу не делать этого? заменить " с " ? Я пытался!--17-->" , |сейф фильтр, даже {%raw %} - он просто продолжает делать это!

обновление: Вот как воспроизвести проблему:

забрать peruncs.докер!--18--> роли galaxy.ansible.com или GitHub (ссылка дана выше) Написать простой playbook (say демо.в формате YML) С приведенным ниже контентом и запустите:ansible-playbook-v демонстрация.в формате YML. The - v опция позволит вам увидеть каталог temp, где генерируется Dockerfile идет с разбитым контентом, поэтому вы можете его изучить. Создание образа docker не важно для успеха, просто попробуйте получить Dockerfile правильно.

- name: Build docker image
  hosts: localhost
  vars:
        - somevar: whatever        
        - image_tag: "blabla/booboo"
        - docker_copy_files: []
        - docker_file_content:
             - instruction: CMD
               value: '["/usr/bin/runit", "{{somevar}}"]'
  roles:         
      - peruncs.docker

спасибо заранее!

1 ответов


что-то в Ansible, похоже, распознает это как действительный Python, поэтому он преобразуется в список Python, а затем сериализуется с помощью Python str(), поэтому вы в конечном итоге получаете значения с одинарными кавычками.

простой способ обойти это-вставить пробел в начале значения, что, похоже, предотвращает его преобразование в Python:

- name: Build docker image
  hosts: localhost
  vars:
        - somevar: whatever        
        - image_tag: "blabla/booboo"
        - docker_copy_files: []
        - docker_file_content:
             - instruction: CMD
               value: ' ["/usr/bin/runit", "{{somevar}}"]'
  roles:         
      - peruncs.docker

в результате:

CMD  ["/usr/bin/runit", "whatever"]