如何使用Ansible将多个过滤器分成多行?

时间:2019-09-03 18:21:07

标签: ansible multiline ansible-filter

这是我在剧本上要做的一项任务:

- name: Parse 'LANGUAGE' from current locale and language configuration
  set_fact:
    locale_language: "{{ locale_status.stdout | regex_search('LANGUAGE=([^\n]+)', '\\1') | default([locale_lang], true) | first }}"

我正在尝试找到一种方法,将多个过滤器行分成多行以使其更具可读性,但是我没有做任何工作。甚至有可能在不使整个内容变得更复杂的情况下进行阅读?

2 个答案:

答案 0 :(得分:3)

您可以尝试这样的事情,

- name: Parse 'LANGUAGE' from current locale and language configuration
  set_fact:
    locale_language: "{{ locale_status.stdout \
                     | regex_search('LANGUAGE=([^\n]+)', '\\1') \
                     | default([locale_lang], true) \
                     | first }}"

正如我在下面的任务中测试的那样,它工作正常,

tasks:
    - set_fact:
        locale_language: "{{ shubham \
                         | quote }}"
    - debug:
        msg: "{{ locale_language }}"

答案 1 :(得分:0)

Jinja解析一旦开始,(据我所知和经验),它变得对空格不敏感;因此,只需使用常规的YAML scalar line folding构造,就可以开始比赛了:

locale_language: >-
  {{- locale_status.stdout
  | regex_search('LANGUAGE=([^\n]+)', '\\1')
  | default([locale_lang], true)
  | first -}}

在Jinja表达式的开始和结尾使用"whitespace consuming operators"由您决定(当然,这取决于最终事实是否容忍空白)