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 }}'
...