在ansible中动态选择变量

时间:2014-12-03 11:57:33

标签: ansible

var文件定义如下:

packages:
  - python-pycurl
  - name: tmux
    files: 
       tmux.conf:  /etc/tmux/conf
       tmux2.conf: /etc/tmux/conf2

因此,如果需要扩展自定义,则包是包名称或词典的列表。无论是在列表中定义包名还是使用字典,我都想使用单个任务安装所有包。我跳了下面的东西可以完成:

 - name: Install Base Packages
   apt: name={{ [item.name, item] | select('defined') }}
   with_items: packages

我知道我可以使用when节进行2次拍摄,但这不是我想要的,因为它不是DRY。

第二部分也提出了问题,因为第一个包没有定义文件,所以抱怨:

  - name: Copy package customizations
    copy: src={{item.key}} dest={{item.value}}
    with_subelements:
        - packages
        - files

是否可以使用这种设置,或者即使对于那些不需要它的项目,我也必须详细?

1 个答案:

答案 0 :(得分:2)

你最终会得到一些丑陋的Ansible代码来做你想做的事情,你最好的选择是让你的 var统一或者将它分成两个vars,一个是一个列表包和第二个将列表文件映射到包。后一种方法并不理想,因为您将重复包名称。

你想做的第一件事是可能的,但我不建议这样做:

name={% if 'name' in item  %}{{ item['name'] }}{% else %}{{ item }}{% endif %}

你要做的第二件事可能是不可能的,因为with_subelements希望在循环列表时看到元素。