我有一个库存文件,如:
[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
当运行以下命令时,它会在剧本中运行两个剧本,即它打印" 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
arg不仅可以在库存文件上工作,还可以在每个游戏的hosts
值上工作。 The docs seem to suggest this is possible虽然他们使用ansible
和一个关闭命令而不是ansible-playbook
和一个剧本来提供示例:
这可能意味着要与之通信的主机,但就Playbook而言,它实际上意味着应用特定配置或IT流程的主机。
我认为答案是我使用错误的剧本和should only have one play per playbook,这必然意味着它只会有一个hosts
和you select which plays you want to run by changing the playbook<-abc>.yml
you are using。但是,最后一个链接还建议您只需使用--limit
来设置哪些主机。很困惑。
答案 0 :(得分:4)
您是对的,根据best practices,您可能希望将不同类型的配置拆分为单独的Playbook,以便能够单独运行它们。
但这段文字可能有点令人困惑:
这与ansible的“-limit”参数类似,但更明确一点:
ansible-playbook site.yml --limit webservers ansible-playbook webservers.yml
仅当webservers
组中的主机不属于任何其他组时才会出现。否则(如您的示例中所示)主机server1
是否在组中{{ 1}}和webservers
,然后播放网络服务器,负载均衡器将应用于此主机。
另外,正如您所正确指出的那样,您可以使用标记标记游戏手册的某些部分,并使用load_balancers
来限制此标准的游戏手册。
有时我会使用一种技巧在不同的库存名称下拥有相同的主机,因此Ansible将它们视为不同的主机:
--tags
这种方式[webservers]
myhost_ws ansible_host=myhost
[load_balancers]
myhost_lb ansible_host=myhost
和myhost_ws
实际上是同一台服务器,但myhost_lb
只会执行此剧本的第一次播放:
--limit webservers
但请注意,使用此设置,在第一次播放期间为- hosts: webservers
....
- hosts: load_balancers
....
收集的任何事实在第二次播放期间都无法用于myhost_ws
(但您仍然可以通过{{1}获取它们})。