Ansible 按剧本的“主持人”限制易读剧本
我有一个清单文件,如:Ansible 按剧本的“主持人”限制易读剧本,ansible,ansible-inventory,Ansible,Ansible Inventory,我有一个清单文件,如: [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 we
[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中的两个播放,即打印“Hello WebServer”和“Hello load_balancer”:
我可以通过添加一个标记并在命令行上使用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
值也有效。尽管他们给出了使用ansible
和一次性命令而不是ansible playbook
和playbook的示例:
- hosts: webservers
....
- hosts: load_balancers
....
这可能意味着要与哪些主机通信,但就剧本而言,它实际上意味着要将特定配置或it流程应用于哪些主机
我认为答案是我使用了错误的剧本,这必然意味着它只有一个主机
和。不过,最后一个链接也建议您只需使用--limit
来设置哪些主机。非常混乱。您是对的,因为您可能希望将不同类型的配置拆分为单独的剧本,以便能够单独运行它们
但这段文字可能有点混乱:
这类似于ansible的“-limit”参数,但更为明确:
ansible-playbook site.yml --limit webservers
ansible-playbook webservers.yml
只有当webserver
组中的主机不属于任何其他组时,才是正确的。否则(如您的示例中所示),如果主机server1
位于webserver
组和load\u balancers
组中,则将为该主机应用Web服务器播放和负载均衡器
此外,正如您正确指出的,您可以使用标记标记playbook的某些部分,并使用--tags
来限制playbook按此标准运行
有时,我会使用一种技巧,让同一主机具有不同的资源清册名称,以便Ansible将它们视为不同的主机:
[webservers]
myhost_ws ansible_host=myhost
[load_balancers]
myhost_lb ansible_host=myhost
这样一来,myhost\u ws
和myhost\u lb
实际上是同一台服务器,但是--limit webserver
将只执行此剧本中的第一个播放:
- hosts: webservers
....
- hosts: load_balancers
....
但请记住,使用此设置,在第一次播放期间为
myhost\u ws
收集的任何事实在第二次播放期间都不可直接用于myhost\u lb
(但您仍然可以通过hostvars['myhost\u ws']
)获取它们。“只有当WebServer组中的主机不属于任何其他组时,这才是正确的。”我也这么怀疑:)巧妙的把戏与ansible\u主机=…
。目前,我将继续使用当前的多播放剧本和标签。谢谢你的快速回答。