Ansible中的条件与字典

时间:2016-05-13 16:32:20

标签: svn ansible ansible-playbook

我想我可能会误解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“存在,请执行某些操作”

1 个答案:

答案 0 :(得分:2)

在这里使用group variables会更好。

相反,您将变量定义为通用repos并为每个组设置它,以便您有类似这样的内容:

group_vars / LOCATION1:

repos:
    repo1:
      reponame: project1
      repogrp: grp-project1
    repo2:
      reponame: project2
      repogrp: grp-project2
      subrepo:
        reponame: subproject2
        repogrp: grp-subproject2

group_vars / LOCATION2:

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