有没有办法使用标准 Ansible/Jinja2 模板语法从值列表构建单个字符串?

问题描述 投票:0回答:1

我有一个看起来像这样的变量:

files:
  - a.yaml
  - b.yaml
  - c.yaml

使用

ansible.builtin.template
模块,我想构建一个包含以下字符串的文件:

OPTIONS="--config=a.yaml --config=b.yaml --config.yaml"

我无法对此进行硬编码,因为我并不总是知道:

  1. 实际有多少个文件
  2. 文件的名称是什么

...因为它们可以通过 Ansible 的任何一个变量设置选项(host|group_vars、角色默认值等)进行设置。这意味着我需要“构建”它,然后以某种方式将其“注入”到模板中。

有没有办法从这样的列表中构建字符串?

谢谢!

ansible ansible-2.x ansible-template
1个回答
0
投票

您可以使用

map
regex_replace
,如下所示:

- hosts: localhost
  gather_facts: false
  vars:
    files:
      - a.yaml
      - b.yaml
      - c.yaml
  tasks:
    - copy:
        dest: myfile.sh
        content: |
          OPTIONS="{{ files | map('regex_replace', '^(.*)$', '--config=\1') | join(' ') }}"

这将创建文件

myfile.sh
,内容为:

OPTIONS="--config=a.yaml --config=b.yaml --config=c.yaml"

© www.soinside.com 2019 - 2024. All rights reserved.