这是一个棘手的理论问题,甚至是解释本身。
我Bacula
这里以(服务器备份软件)为例说明一下。
Bacula 有一个服务器和一个客户端组件。添加新客户端需要服务器和客户端上的配置文件。所以我想在我的角色中做的是:
Bacula 服务器角色:
- 在一台主机上设置 bacula 服务器
- [对于每个客户端] 将服务器的客户端配置文件复制到服务器
- [对于每个客户端] 将客户端的客户端配置文件复制到客户端
现在我遇到的问题是host_vars
and group_vars
。我希望能够让我的所有[debian]
主机(这是一个组)使用这个角色。所以我的剧本看起来像这样:
- hosts: debian
roles:
- bacula
tags:
- bacula
因此,当触发此角色时,它应该执行以下操作:
- 一台主机显然必须是服务器,因此如果在服务器主机上播放,这台主机将获得完整的 bacula 服务器配置。
- 如果此角色应用于所有其他客户端,则应发生以下情况:
- (当前主机
debian-client
):将配置复制到debian-client
- (当前主机
debian-client
):将配置复制到debian-server
- (当前主机
知道我该怎么做吗?
对我来说这真的很难解释,所以如果上述任何内容不清楚,请告诉我,以便我更清楚。
更新:
感谢@Konstantin Suvorovdelegate_to
回答:https ://docs.ansible.com/ansible/playbooks_delegation.html#delegation
像这样的东西,例如:
存货:
玩:
用一些真实的模块(例如/ )替换
debug
语句,如果没有存在的主机,则添加一些错误处理。apt
template
bacula_role=server
如果您有许多任务要安装服务器/客户端,您可以将它们拆分为
bacula_server.yml
和bacula_client.yml
不when
包含语句,但将它们包含在: