我有这个示例库存文件:
[web1] // Web Server 1 contains the following sites:
example1.com
example2.com
[web2] // Web Server 2 contains the following sites:
example3.com
example4.com
但是每当我运行剧本(例如使用apt-get update
命令)时,它都会尝试遍历上面给定的 Web 服务器中的所有站点。
我如何在主机本身而不是 example*.com 站点中运行剧本,因为它是多余的。
编辑
根据要求,这里是 yaml 文件:(这里没什么特别的。)
# Using all but --limit the execution to webservers
# I know I can use `webservers` but this was deliberate
- hosts: all
tasks:
- // sudo apt-get update
答案1
主持人:全部
这意味着它将在所有列出的主机上运行。如果你想将它限制到特定组,那么你必须这样做,例如
[web1]
host1.example.com
host2.example.com
[web2]
host6.example.com
host10.example.com
以上清单
hosts: web1
将适用于host1,host2。
hosts: web2
将适用于host6,host10。
hosts: all
适用于所有人
答案2
存货:
[webservers]
webserver1
webserver2
剧本:
- hosts: webservers
roles:
- { role: common, tag: common }
- hosts: webserver1
- { role: host1.example.com, tag: host1.example.com }
- { role: host2.example.com, tag: host2.example.com }
- hosts: webserver2
- { role: host3.example.com, tag: host3.example.com }
- { role: host3.example.com, tag: host4.example.com }
角色:
host1.example.com/
tasks/
main.yml
vars/
main.yml
host2.example.com/
...
webserver1 上的所有站点:
ansible-playbook playbook.yml -l webserver1
其网络服务器上的站点 host3.example.com:
ansible-playbook playbook.yml -t host3.example.com
webservers 组上的 Shell 命令:
ansible webservers -m shell -a "sudo apt-get update"
你应该看看ansible 最佳实践
答案3
我的临时解决方案是为 Web 服务器本身创建一个不同的组,然后从那里运行服务器特定的配置。
webserver1 ansible_host=10.10.1.2
webserver2 ansible_host=10.10.1.3
[webservers]
webserver1
webserver2
[web1]
example1.com
example2.com
[web2]
example3.com
example4.com
所以我可以跑ansible-playbook playbook.yml --limit webservers
。