【发布时间】:2015-11-17 07:25:52
【问题描述】:
我有一个 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”参数指定“组”所需的“角色”,例如
ansible-playbook -i hosts site.yml -l integration
它最终对服务器运行所有的游戏。为什么这样做?我可以让它只运行与该特定服务器组关联的一组播放/角色吗?
【问题讨论】:
-
你可以使用 -t 集成,而不是 -l 集成,它将使用标签。
-
虽然这是真的,但我发现使用“标签”不会执行我在“site.yml”中指定的“pre_tasks”部分。 (为简单起见,我将其排除在描述之外)。此外,这意味着我必须确保维护每个服务器组的“标签”,确保在标签列表中包含组名。这对我来说似乎很愚蠢。
-
不幸的是,这是 Ansible 中的预期行为。它将找到匹配的主机列表,然后获取这些主机所在的所有组的信息。
标签: ansible roles ansible-playbook limits