【问题标题】:Format list of strings using Jinja2 filter with Ansible使用带有 Ansible 的 Jinja2 过滤器格式化字符串列表
【发布时间】:2021-03-15 12:13:54
【问题描述】:

我有一个类似的列表

my_apps:
  - bootstrap-client
  - theme-client
  - engine-client

我想把这个数组变成类似于

的字符串
$LOCAL_DIR/bootstrap-client-*.war $LOCAL_DIR/theme-client-*.war $LOCAL_DIR/engine-client-*.war

这可以使用 Jinja2 过滤器吗?在 Ansible 模板中?

【问题讨论】:

    标签: ansible jinja2


    【解决方案1】:

    您可以将 Ansible 过滤器 regex_replacemapjoin 过滤器结合使用来实现此目的。

    所以必须正则表达式匹配整个列表项 ^(.*)$ 并在替换时使用 \\1 反向引用它。

    给你:

    "{{ my_apps | map('regex_replace', '^(.*)$', '$LOCAL_DIR/\\1-*.war' ) | join(' ') }}" 
    

    鉴于剧本:

    - hosts: all
      gather_facts: yes
    
      tasks:
        - debug:
            msg: "{{ my_apps | map('regex_replace', '^(.*)$', '$LOCAL_DIR/\\1-*.war' ) | join(' ') }}" 
          vars:
            my_apps:
              - bootstrap-client
              - theme-client
              - engine-client
    

    这会产生:

    PLAY [all] ********************************************************************************************************
    
    TASK [debug] ******************************************************************************************************
    ok: [localhost] => 
      msg: $LOCAL_DIR/bootstrap-client-*.war $LOCAL_DIR/theme-client-*.war $LOCAL_DIR/engine-client-*.war
    
    PLAY RECAP ********************************************************************************************************
    localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多