ansible-playbook不限制主机

时间:2015-08-23 23:48:55

标签: ansible roles ansible-playbook limits

我有一个主机文件,指定属于多个组的服务器:

[web]
192.168.45.37

[integration]
192.168.45.37

[database]
192.168.45.37

不同的小组在剧本中应用了不同的角色:

- hosts: all
  roles:
    - { role: base, tags: ['base'] }
    - { role: logstash, tags: ['logstash'] }
- hosts: database
  roles:
    - { role: mysql, tags: ['database', 'mysql'] }
    - { role: mysql-backup, tags: ['database', 'mysql', 'backup'] }
- hosts: web
  roles:
    - { role: nginx, tags: ['web', 'nginx'] }
    - { role: ssl-certs, tags: ['web', 'ssl-certs'] }
- hosts: integration
  roles:
    - { role: jetty, tags: ['integration', 'jetty'] }

我的问题是,当我去运行剧本时,试图将其限制为只有"角色"指定"组"与" - 限制"争论,例如

ansible-playbook -i hosts site.yml -l integration

它最终会对服务器运行所有的播放。为什么这样做?我可以让它只运行与该特定服务器组关联的一组播放/角色吗?

1 个答案:

答案 0 :(得分:1)

这是设计 - 在封面下,限制是作为主机列表实现的,尽管限制表达式可以是主机和组的任意复杂组合。我们不排除未在限制表达式中指定的组定义(听起来就像你想要的那样) - 这会严重妨碍更复杂用例的限制表达式的效用。

例如:如果你有一个针对两组交集的游戏,“mysite:& myrole”,我认为如果你传递了一个mysite的限制表达式,它就会运行。如果我们显式删除了未在限制表达式中指定的组defs的主机,则不会。

标签绝对是在这里使用的正确的东西,并且可以在游戏级别为角色特定的东西指定它们,因此您不必为下面的每个角色/任务重复该部分。 pre_tasks部分应该与标记的行为相同(即,需要标记要运行的任务,但要确保你知道“总是”) - 如果它们没有,那肯定是你应该报告的问题。