Ansible:填充包含不可变插值的模板

Ansible:填充包含不可变插值的模板

我需要制作一个剧本,它将采用一个模板文件,插入一些变量并将生成的文件放入另一个目录。

问题的第一部分是生成的文件将用作另一个 Ansible 剧本,因此源文件包含其他插值,并且这些插值必须按原样保留。例如,假设源文件包含以下内容:

key1: {{ value1 }}
key2: {{ value2 }}

的值key1必须由我的剧本进行插值(它将成为变量的值value1),但同时value2需要保持原样(它应为{{ value2 }}

问题的第二部分是,我不能只修改源文件并在花括号前添加反斜杠,因为此文件正在被其他进程更新。此外,由于模板文件会不时更新,我无法预测下次更新后需要跳过哪些变量。我只知道我需要插入value1,但我不知道其他变量的名称是什么(今天有value2value3,明天开发人员会将其重命名value2value2_deprecated并添加到value3某个地方)。

我可以询问 Ansible 我只需要插值value1吗?

谢谢。

答案1

问:模板包含插值,这些插值必须按原样保留。

A:声明默认变量

    lbr: '{{ "{{" }}'
    rbr: '{{ "}}" }}'
    value1: '{{ lbr }} value1 {{ rbr }}'
    value2: '{{ lbr }} value2 {{ rbr }}'

并创建模板

shell> cat template.yml.j2
key1: {{ value1 }}
key2: {{ value2 }}

问:我只需要插入值1。

A:覆盖默认值,例如

    - template:
        src: template.yml.j2
        dest: playbook.yml
      vars:
        value1: value1

给出

shell> cat playbook.yml 
key1: value1
key2: {{ value2 }}

相关内容