Печать значения переменной с отступом в файле YAML с использованием возможности

Я создаю файл конфигурации Behat с помощью Ansible. Этот файл конфигурации представляет собой файл YAML. Я использую такой шаблон Jinja2:

default:
  paths:
    features: '../all/tests/features'
  filters:
    tags: "~@api&&~@drush"
  extensions:
    Behat\MinkExtension\Extension:
    files_path: '{{ project_docroot }}/sites/all/tests/files'
      files_path: '{{ project_docroot }}'
      goutte: ~
      selenium2: ~
      base_url: '{{ base_url }}'
    Drupal\DrupalExtension\Extension:
      blackbox: ~
      drush_driver: "drush"
      drush:
        root: "{{ project_docroot }}"
      api_driver: "drupal"
      drupal:
        drupal_root: "{{ project_docroot }}"
      region_map:
{{ project_behat_region_map }}
      selectors:
{{ project_behat_selectors }}

И следующие определенные вары:

project_behat_region_map: |
        content: "#content"
        footer: "#footer"
        header: "#header"
        header bottom: "#header-bottom"
        navigation: "#navigation"
        highlighted: "#highlighted"
        help: "#help"
        bottom: "#bottom"

project_behat_selectors: |
        message_selector: '.messages'
        error_message_selector: '.messages.error'
        success_message_selector: '.messages.status'
        warning_message_selector: '.messages.warning'

Как видите, значения переменных имеют отступ, но при вставке в шаблон Jinja2 отступ теряется:

default:
  paths:
    features: '../all/tests/features'
  filters:
    tags: "~@api&&~@drush"
  extensions:
    Behat\MinkExtension\Extension:
    files_path: '/var/www//bacteriemias/docroot/sites/all/tests/files'
      files_path: '/var/www//bacteriemias/docroot'
      goutte: ~
      selenium2: ~
      base_url: 'http://bacteriemias.me'
    Drupal\DrupalExtension\Extension:
      blackbox: ~
      drush_driver: "drush"
      drush:
        root: "/var/www//bacteriemias/docroot"
      api_driver: "drupal"
      drupal:
        drupal_root: "/var/www//bacteriemias/docroot"
      region_map:
content: "#content"
footer: "#footer"
header: "#header"
header bottom: "#header-bottom"
navigation: "#navigation"
highlighted: "#highlighted"
help: "#help"
bottom: "#bottom"


      selectors:
message_selector: '.messages'
error_message_selector: '.messages.error'
success_message_selector: '.messages.status'
warning_message_selector: '.messages.warning'

Это недопустимый YAML. Как я могу напечатать переменную с отступом в Jinja2?


person sanzante    schedule 30.11.2015    source источник


Ответы (1)


Оказывается, проблему можно решить, используя отступ Jinja2 фильтр.

отступ (s, width = 4, indentfirst = False)

Вернуть копию переданной строки с отступом в 4 пробела для каждой строки. Первая строка без отступа. Если вы хотите изменить количество пробелов или сделать отступ в первой строке, вы можете передать фильтру дополнительные параметры:

{{mytext | indent (2, true)}} - отступ на два пробела, а также отступ для первой строки.

Итак, в моем случае это:

default:
  paths:
    features: '../all/tests/features'
  filters:
    tags: "~@api&&~@drush"
  extensions:
    Behat\MinkExtension\Extension:
    files_path: '{{ project_docroot }}/sites/all/tests/files'
      files_path: '{{ project_docroot }}'
      goutte: ~
      selenium2: ~
      base_url: '{{ base_url }}'
    Drupal\DrupalExtension\Extension:
      blackbox: ~
      drush_driver: "drush"
      drush:
        root: "{{ project_docroot }}"
      api_driver: "drupal"
      drupal:
        drupal_root: "{{ project_docroot }}"
      region_map:
{{ project_behat_region_map | indent( width=8, indentfirst=True) }}

      selectors:
{{ project_behat_selectors | indent( width=8, indentfirst=True) }}
person sanzante    schedule 30.11.2015
comment
Ссылка для отступа возвращает мне 404. Вот ссылка на официальную документацию - person burubum; 28.06.2021
comment
Ссылка исправлена, спасибо @burubum! - person sanzante; 29.06.2021