【问题标题】:Printing a variable value indented in a YAML file using ansible使用 ansible 打印在 YAML 文件中缩进的变量值
【发布时间】:2015-11-30 17:13:39
【问题描述】:

我正在使用 Ansible 生成 Behat 配置文件。此配置文件是一个 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 中打印带有缩进的变量?

【问题讨论】:

    标签: yaml ansible ansible-template


    【解决方案1】:

    原来使用indent Jinja2 filter可以解决这个问题。

    缩进(s, width=4, indentfirst=False)

    返回传递的副本 字符串,每行缩进 4 个空格。第一行不是 缩进。如果要更改空格数或缩进 第一行你也可以向过滤器传递额外的参数:

    {{ mytext|缩进(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) }}
    

    【讨论】:

    猜你喜欢
    • 2015-10-19
    • 2020-07-07
    • 2019-08-05
    • 2015-05-11
    • 2022-07-07
    • 2015-03-29
    • 1970-01-01
    • 2022-08-18
    • 2013-09-16
    相关资源
    最近更新 更多