我想我可能会误解Ansible中的某些内容。
我想为subversion建立一个角色。
这是我的主机文件:
[locaton1]
server-location1.domain.com
[location2]
server-location2.domain.com
我有一个像这样的vars文件:
- repos_location1:
repo1:
reponame: project1
repogrp: grp-project1
repo2:
reponame: project2
repogrp: grp-project2
subrepo:
reponame: subproject2
repogrp: grp-subproject2
- repos_location2:
repo1:
reponame: project3
repogrp: grp-project3
repo2:
reponame: project4
repogrp: grp-project4
然后,我有我的任务文件。这只是一个片段:
- name: Build configuration
template: src=subversion.conf.j2 dest=/etc/httpd/conf.d/subversion.conf
with_dict: ????
现在有了线索:我想要一个if语句,例如:“当主机在[location1]时,使用repos_location1,但在[location2]中使用repos_location2。
我希望,你理解我的观点。否则我将不得不扮演一个角色svn-location1和svn-location2。
其他我希望在我的模板文件中有一个声明,如下所示:
“如果”subrepo“存在,请执行某些操作”
答案 0 :(得分:2)
在这里使用group variables会更好。
相反,您将变量定义为通用repos
并为每个组设置它,以便您有类似这样的内容:
repos:
repo1:
reponame: project1
repogrp: grp-project1
repo2:
reponame: project2
repogrp: grp-project2
subrepo:
reponame: subproject2
repogrp: grp-subproject2
repos:
repo1:
reponame: project3
repogrp: grp-project3
repo2:
reponame: project4
repogrp: grp-project4
然后您可以像这样使用它:
- name: Build configuration
template: src=subversion.conf.j2 dest=/etc/httpd/conf.d/subversion.conf
with_dict: repos
但是,我建议您将新的repos
变量更改为字典列表,以便您更轻松地遍历它并添加/删除重定位到变量。所以就这样:
repos:
- reponame: project3
repogrp: grp-project3
- reponame: project4
repogrp: grp-project4
然后使用with_items
迭代器迭代repos
。