【发布时间】:2014-12-31 07:37:55
【问题描述】:
考虑这样的播放设置:
- name: Provision the stage platform
hosts: my-stage-host
vars_files:
- ../../env_vars/base.yml
- ../../env_vars/stage.yml
roles:
- {role: 'some.ThirdpartyRole'}
- {role: 'My.Role', name: 'app1', somevar: 'var2', dict: {'var1': 'var2'}, list: [{'var1': 'var2'}]}
- {role: 'My.Role', name: 'app2', somevar: 'var2', dict: {'var1': 'var2'}, list: [{'var1': 'var2'}]}
这个设置很好,一切都按预期工作(虽然我不太喜欢数据结构).. 问题是 My.Role 有很多角色实例特定的变量、列表和字典等,不幸的是不能在defaults/main.yml 中设置(因为它们特定于当前角色实例),并且因为我希望能够在一台服务器上多次使用此角色,所以我需要隔离变量。
在一个完美的世界里,我可以......
roles:
- My.Role
include: ../../varsA.yml
就像任务一样......但从我目前在文档和论坛中阅读的内容来看,这是不可能的......
目前,我的角色确实在使用以下不理想的设置:
文件:group_vars/my-host.yml
apps:
name: 'something'
someList:
- item
...
someDict:
item: item
itemsList:
- item
...
name: 'somethingElse'
someList:
- item
...
someDict:
item: item
itemsList:
- item
...
文件:playbooks/my-play.yml
...
roles:
- some.ThirdpartyRole
- My.Role
如您所见,它从我的 group_vars 中定义的 dict 中获取所有变量,并且角色中的每个任务都使用 with_items: myDict,这使得子列表(除其他外)有点像噩梦,例如:
with_subelements:
- myDict
- subList
我无法检查mydict.subList 是否存在,而是需要在各处定义空变量。
我希望我已经正确地解释了自己,我想知道是否有人有使用大量 var 的经验,他们需要在一个戏剧中多次使用,或者任何其他关于角色/var 布局的指针。
【问题讨论】:
标签: python variables yaml roles ansible