Hid*_*dai 2 configuration ansible
以下任务:
- name: Download Jfrog Artifcats
ansible.windows.win_shell: |
$ENV:JFROG_CLI_OFFER_CONFIG="false"
jfrog rt download ...
when: ???
Run Code Online (Sandbox Code Playgroud)
应该只为位于组center
中的计算机运行appservers
---
all:
children:
root:
children:
center:
children:
appservers:
hosts:
vm1.domain.com:
qservers:
hosts:
vm2.domain.com:
dbservers:
hosts:
vm3.domain.com:
mobilefarms:
hosts:
children:
gateways:
hosts:
south:
children:
brooklyn:
hosts:
vm4.domain.com:
children:
clients:
hosts:
vm5.domain.com:
vm6.domain.com:
north:
children:
new_york:
hosts:
vm8.domain.com:
children:
clients:
hosts:
vm9.domain.com:
Run Code Online (Sandbox Code Playgroud)
when
为了实现这一目标,我应该输入什么作为条件?另外,这个配置选项背后的原理是什么?
为了在任务、播放或块的条件中使用组成员身份,您可以使用以下格式:
when: inventory_hostname in groups["<group name>"]
具体到你最初的问题:
when: inventory_hostname in groups["appservers"]
要访问 下的所有机器north
,您只需将其更改为:
when: inventory_hostname in groups["north"]
关于您的后续澄清(在特定“位置”指定一个组),由于组名称在 ansible 中必须是唯一的,因此无需区分您所指的组,因为只能 位于一个位置。appservers
appservers
如果您尝试创建两个appservers
组,ansible 引擎实际上只会解析第一个组;任何后续的同名组都将被忽略。因此,如果您计划(将来)appservers
在 下创建一个组north
,然后在 下创建一个appservers
组south
,您会发现仅包含第一组中的成员。
在ansible中,我们如何实现这一点(我对你将来可能想要什么的假设),ansible的继续方法是将主机添加到多个组中,如下所示,并适当调整你的限制或条件:
all:
children:
north:
hosts:
a.domain.com:
b.domain.com:
south:
hosts:
y.domain.com:
z.domain.com:
appservers:
hosts:
a.domain.com:
y.domain.com:
dbservers:
hosts:
b.domain.com:
z.domain.com:
Run Code Online (Sandbox Code Playgroud)
在此示例中,如果您想要所有应用程序服务器,您只需定位appservers
. 如果您只想appservers
在该north
地区,那么您可以将播放限制设置为north:&appservers
,或者使用条件
when:
- inventory_hostname in groups["appservers"]
- inventory_hostname in groups["north"]
Run Code Online (Sandbox Code Playgroud)
无论如何,我认为您可能需要回顾一下 ansible 中库存的结构,为此我会推荐用户指南;各种培训网站上也有一些很棒的资源,可以提供更详细的信息。
有关使用多个组(组合、联合和排除等)的更复杂定位的更多信息,我建议您查看此其他用户指南。
就我个人而言,最初我认为该设置既乏味又有限,但随着我越来越熟悉它的使用,我实际上发现它比其他选择更具动态性。
归档时间: |
|
查看次数: |
27687 次 |
最近记录: |