我需要制作一个剧本,它将采用一个模板文件,插入一些变量并将生成的文件放入另一个目录。
问题的第一部分是生成的文件将用作另一个 Ansible 剧本,因此源文件包含其他插值,并且这些插值必须按原样保留。例如,假设源文件包含以下内容:
key1: {{ value1 }}
key2: {{ value2 }}
的值key1
必须由我的剧本进行插值(它将成为变量的值value1
),但同时value2
需要保持原样(它应为{{ value2 }}
。
问题的第二部分是,我不能只修改源文件并在花括号前添加反斜杠,因为此文件正在被其他进程更新。此外,由于模板文件会不时更新,我无法预测下次更新后需要跳过哪些变量。我只知道我需要插入value1
,但我不知道其他变量的名称是什么(今天有value2
和value3
,明天开发人员会将其重命名value2
为value2_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 }}