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
是否可以使用这种设置,或者即使对于那些不需要它的项目,我也必须详细?
答案 0 :(得分:2)
你最终会得到一些丑陋的Ansible代码来做你想做的事情,你最好的选择是让你的包 var统一或者将它分成两个vars,一个是一个列表包和第二个将列表文件映射到包。后一种方法并不理想,因为您将重复包名称。
你想做的第一件事是可能的,但我不建议这样做:
name={% if 'name' in item %}{{ item['name'] }}{% else %}{{ item }}{% endif %}
你要做的第二件事可能是不可能的,因为with_subelements希望在循环列表时看到元素。