ansible-playbook 不限制主机

ansible-playbook not limiting hosts

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

[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'] }

我的问题是,当我转到 运行 剧本时,试图通过使用“--limit”参数指定 "group" 将其限制为仅所需的 "roles"例如

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

它结束了 运行ning all 对服务器的比赛。为什么要这样做?我可以将其仅添加到与该特定服务器组关联的 运行 组 plays/roles 吗?

这是设计使然 - 在幕后,限制是作为主机列表实现的,尽管限制表达式可以是主机和组的任意复杂组合。我们不排除未在限制表达式中指定的组定义(听起来这就是您想要的)- 这会严重阻碍限制表达式在更复杂的用例中的实用性。

例如:如果您有一个针对两个组的交集的游戏,"mysite:&myrole",我认为如果您通过了 mysite 的极限表达式,那么它会 运行.如果我们明确删除限制表达式中未指定的组定义的主机,则不会。

在这里使用标签绝对是正确的,它们可以在特定于角色的内容的游戏级别指定,因此您不必为下面的每个 role/task 重复该部分。 pre_tasks 部分的行为应该与标记相同(即,任务需要标记为 运行,但请确保您了解 "always")- 如果他们不这样做,那就是绝对是您应该报告的问题。