基于条件的Ansible惯用目的地/ dest

时间:2016-09-13 17:41:15

标签: ansible ansible-playbook ansible-2.x

我正在编写一个理想情况下更新文件中的块的播放,但目标文件可以是基于某些条件的任何粗略的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

      ...

是否有惯用或正确的方法来做到这一点?

1 个答案:

答案 0 :(得分:1)

这听起来有点令人费解,我有一种感觉,如果你退出问题,你可能会想到一个更好的解决方案。但是,根据提供的信息,我会说将逻辑移动到变量中,然后将变量用作目标。

所以你有一些vars文件(例如角色默认值或环境组vars,甚至是包含的vars文件),如下所示:

    public static byte[] GeneratePdf(this HttpControllerContext context, Controller controller, object model, string viewName, string fileName, string plugin = null)
    {
        var cnt = new myViewAsPdf(viewName, model) { FileName = fileName };
        cnt.InitPlugin(plugin);
        return cnt.BuildPdf(controller.ControllerContext);
    }

然后在你的任务中只有以下内容:

rolename_blockinfile_dest: '{% if condition %}/home/me/file1{% elif condition2 %}/home/me/file2{% endif %}'