Ansible 使用多个嵌套主机变量时匹配单个自定义主机资源清册变量

Ansible 使用多个嵌套主机变量时匹配单个自定义主机资源清册变量,ansible,Ansible,我试图在清单文件中循环匹配的主机,其中每个主机都有特定的变量,但每个主机可能有多个与其关联的嵌套变量,如下所示: 库存文件: 我的目标是尝试只向匹配客户变量键“team”等于值“sales”的主机传递文件 我使用这个测试任务进行测试只是为了得到一些响应,但正如您从输出中看到的,它跳过了所有这些任务,因为它没有捕获嵌套变量,它似乎将变量作为一个完整的字符串读取,而不是拆分 测试任务: 输出: 我不知道如何让ansible从主机清单中读取单个嵌套变量 谢谢 when:hostvars[item]['

我试图在清单文件中循环匹配的主机,其中每个主机都有特定的变量,但每个主机可能有多个与其关联的嵌套变量,如下所示:

库存文件: 我的目标是尝试只向匹配客户变量键“team”等于值“sales”的主机传递文件

我使用这个测试任务进行测试只是为了得到一些响应,但正如您从输出中看到的,它跳过了所有这些任务,因为它没有捕获嵌套变量,它似乎将变量作为一个完整的字符串读取,而不是拆分

测试任务: 输出: 我不知道如何让ansible从主机清单中读取单个嵌套变量

谢谢

when:hostvars[item]['team']==“sales”
此表达式正在比较列表,例如

团队:
-老年退休金
-销售
到单个字符串值
sales
。这将始终返回false

你想做的是。如本链接所述,Jinja2在测试中提供了一个
,但ansbile提供了
包含
,在某些情况下可以简化编写。这两个版本是等效的:

当:hostvars[item]['team']包含“sales”时
#或
当:“'sales'在hostvars[item]['team']中”
时间:hostvars[项目]['team']=“销售”
此表达式正在比较列表,例如

团队:
-老年退休金
-销售
到单个字符串值
sales
。这将始终返回false

你想做的是。如本链接所述,Jinja2在
测试中提供了一个
,但ansbile提供了
包含
,在某些情况下可以简化编写。这两个版本是等效的:

当:hostvars[item]['team']包含“sales”时
#或
当:“'sales'在hostvars[item]['team']中”

非常酷,这确实可以命中单个嵌套变量。我想在这里问另一个问题,我猜,你知道为什么循环会循环两次吗?我的清单中有两个条目…我猜这就是为什么,但以前从未见过ok:[host]=>(item=host)=>{}MSG:team属性主机:host包含团队:[dev']跳过:[host]=>(item=host)ok:[host]=>(item=host)=>{}MSG:host的团队属性:host包含团队:[dev']跳过:[host]=>(item=host)确定:[host]=>(item=host)=>{}请花点时间阅读并理解这里的规则。提出另一个问题并尽量使其变得非常酷,这确实可以解决单个嵌套变量的问题。我想在我在这里,我猜,你知道为什么循环似乎会循环两次吗?我的清单中有两个条目…我猜这就是为什么,但以前从未见过ok:[host]=>(item=host)=>{}MSG:host的团队属性:host:host包含团队:['dev']跳过:[host]=>(item=host)ok:[host]=>(item=host)=>{}MSG:host:host的团队属性包含团队:['dev']跳过:[host]=>(item=host)确定:[host]=>(item=host)=>{}请花点时间阅读并理解这里的规则。提出另一个问题并尝试解决它。我最终在vars/main.yml中创建了一个名为team_name的新变量,并在命令行中使用额外的vars发出team name,然后使用此任务来避免关于条件和{{}的jinja2警告:``-name:Loop遍历示例服务器并显示主机名,team attribute debug:msg:“{{item}}的团队属性是{{hostvars[item]['team']}”,当:hostvars[item]['team']是contains(team_name)时:{{groups['support']}”``我最终在vars/main.yml中创建了一个名为team_name的新变量,并在命令行中使用额外的变量发出团队名称,然后使用此任务来避免关于条件和{{}}的jinja2警告:```-name:在示例服务器中循环并显示主机名、团队属性debug:msg:{{item}的团队属性为{{hostvars[item]['team']}当:hostvars[item]['team']包含(team_name)循环:“{{groups['support']}”```
[support]
myhost1 application_role="['role1', 'role2']" team="['ops', 'dev']"
myhost2 application_role="['role1']" team="['ops', 'sales']"
- name: Loop through example servers and show the hostname, team attribute
  debug:
    msg: "team attribute of {{ item }} is {{ hostvars[item]['team'] }}"
  when: hostvars[item]['team'] == "sales"
  loop: "{{ groups['support'] }}"
PLAY [support] ************************************************************************

TASK [ssh_key_push : Loop through example servers and show the hostname, team attribute msg=team attribute of {{ item }} is {{ hostvars[item]['team'] }}] ***
skipping: [myhost1] => (item=myhost1) 
skipping: [myhost1] => (item=myhost2) 
skipping: [myhost1]
skipping: [myhost2] => (item=myhost1) 
skipping: [myhost2] => (item=myhost2) 
skipping: [myhost2]