Loops 带项目的可分解循环

Loops 带项目的可分解循环,loops,ansible,Loops,Ansible,我可以像这样获取单个软件包版本的信息 -名称:打印zsh版本 调试: msg:{{ansible_facts.packages['zsh'][0].version} 当:“'zsh'在ansible_facts.packages中” 我试图使用循环作为列表,但无法引用{{item} 软件:['ksh','zsh','bash'] -名称:打印软件版本 调试: msg:{{ansible_facts.packages[{{item}}}][0].version} 带_项:“{{software}

我可以像这样获取单个软件包版本的信息

-名称:打印zsh版本
调试:
msg:{{ansible_facts.packages['zsh'][0].version}
当:“'zsh'在ansible_facts.packages中”
我试图使用
循环
作为列表,但无法引用
{{item}

软件:['ksh','zsh','bash']
-名称:打印软件版本
调试:
msg:{{ansible_facts.packages[{{item}}}][0].version}
带_项:“{{software}”
我收到以下错误消息

“msg”:“任务包含一个带有未定义变量的选项。错误为:'dict object'没有属性{item}”


我怎样才能做到这一点?

您不需要引用它或将它放在花括号中,您已经在花括号中了:

-名称:打印软件版本
调试:
msg:{{ansible_facts.packages[item][0].version}
变量:
软件:
-“ksh”
-“zsh”
-“猛击”
循环:“{{software}}”
全面工作手册:

-hosts:localhost
收集事实:不
任务:
-名称:收集数据包事实
一揽子事实:
经理:汽车
-名称:打印软件版本
调试:
msg:{{ansible_facts.packages[item][0].version}
变量:
软件:
-“ksh”
-“zsh”
-“猛击”
循环:“{{software}}”
概述如下:

PLAY [localhost] ***************************************************************

TASK [Gather package facts] ****************************************************
ok: [localhost]

TASK [Print software versions] *************************************************
ok: [localhost] => (item=ksh) => {
    "msg": "2020.0.0-5"
}
ok: [localhost] => (item=zsh) => {
    "msg": "5.8-3ubuntu1"
}
ok: [localhost] => (item=bash) => {
    "msg": "5.0-6ubuntu1"
}

PLAY RECAP *********************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
PS:尽量不要混合使用YAML和JSON符号,你的
软件
数组是JSON格式的,而你的剧本的其余部分是YAML格式的