Ansible 惯用语 destination/dest 基于条件
Ansible idiomatic destination/dest based on a conditional
我正在编写一个理想情况下更新文件中的块的剧本,但根据某些条件,目标文件可以是大约 20 个文件中的任何一个。虽然这无疑是错误的,但我想要的是:
- name: update files
hosts: localhost
user: myself
tasks:
- blockinfile:
dest: /home/me/file1
when: {{ condition }} == True
dest: /home/me/file2
when: {{ condition2 }} == True
...
block: |
data
data
...
是否有惯用的或正确的方法来做到这一点?
这听起来有点令人费解,我觉得如果您从问题中退一步,您可能会想到更好的解决方案。但是,根据提供的信息,我会说将逻辑移动到一个变量中,然后使用该变量作为目的地。
所以你会有一些 vars 文件(例如角色默认值或环境组 vars 甚至包含的 vars 文件),如下所示:
rolename_blockinfile_dest: '{% if condition %}/home/me/file1{% elif condition2 %}/home/me/file2{% endif %}'
然后在您的任务中执行以下操作:
...
tasks:
- blockinfile:
dest: '{{ rolename_blockinfile_dest }}'
...
我正在编写一个理想情况下更新文件中的块的剧本,但根据某些条件,目标文件可以是大约 20 个文件中的任何一个。虽然这无疑是错误的,但我想要的是:
- name: update files
hosts: localhost
user: myself
tasks:
- blockinfile:
dest: /home/me/file1
when: {{ condition }} == True
dest: /home/me/file2
when: {{ condition2 }} == True
...
block: |
data
data
...
是否有惯用的或正确的方法来做到这一点?
这听起来有点令人费解,我觉得如果您从问题中退一步,您可能会想到更好的解决方案。但是,根据提供的信息,我会说将逻辑移动到一个变量中,然后使用该变量作为目的地。
所以你会有一些 vars 文件(例如角色默认值或环境组 vars 甚至包含的 vars 文件),如下所示:
rolename_blockinfile_dest: '{% if condition %}/home/me/file1{% elif condition2 %}/home/me/file2{% endif %}'
然后在您的任务中执行以下操作:
...
tasks:
- blockinfile:
dest: '{{ rolename_blockinfile_dest }}'
...