我有一个像这样的库存文件:
[my_domain]
255.255.255.255
[production:children]
my_domain
[load_balancer:children]
my_domain
[webservers:children]
my_domain
我有一个类似于
playbook.yml
的文件,内容如下:---
- hosts: webservers
gather_facts: no
tasks:
- debug:
msg: Hello webservers
- hosts: load_balancer
gather_facts: no
tasks:
- debug:
msg: Hello load_balancer
运行以下命令时,它将同时运行playbook中的两个plays,即打印"Hello webservers"和"Hello load_balancer":
ansible-playbook ./playbook.yml --limit "webservers:&production"
我可以通过添加标签并在命令行中使用tags
,使它只运行Web服务器。
...
- hosts: webservers
tags: ['webservers']
# or if using roles then:
# roles:
# - { role: provision_webserver, tags: [ 'provision_webservers' ] }
...
并使用:
ansible-playbook ./playbook.yml --limit "webservers:&production" --tags "webservers"
我希望
limit
参数不仅适用于清单文件,还适用于每个 play 的 hosts
值。文档似乎表明这是可能的,尽管它们使用 ansible
和一次性命令而不是 ansible-playbook
和 playbook 来举例:(参见文档)
我认为答案是我错误地使用了 playbooks,并且每个 playbook 只能有一个 play,这必然意味着它只有一个这可以表示要与哪些主机通信,但在 Playbooks 方面,它实际上意味着将某个配置或 IT 过程应用于哪些主机。
hosts
,并且你通过更改所使用的 playbook<-abc>.yml
来选择要运行的 plays。然而,最后一个链接也建议你可以使用 --limit
来设置要使用的主机。非常困惑。
ansible_host=...
是个好技巧。目前我会继续使用当前的多播放剧本和标签。感谢您的快速回答。 - AJP