如何使用 Ansible 管理具有多个站点的主机?

如何使用 Ansible 管理具有多个站点的主机?

我有这个示例库存文件:

[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

相关内容