如何解决清单的ansible set_fact字典
我有这段代码,我试图将两个列表组合成一个字典,但是没有运气。我对ansible陌生。
- hosts: localhost
vars:
service_status: {}
location:
tasks:
- name:
command: echo {{ item }}
register: excecute
with_items:
- hello
- world
- name: Setting facts
set_fact:
service_status: "{{service_status | combine({ 'command_status' : {'service': item.item,'status': item.Failed }},recursive=True) }}"
with_items: "{{ excecute.results }}"
- name:
debug:
msg: "{{ hostvars['localhost'] | json_query('service_status') }}"
我得到的输出是
任务[调试]
ok: [localhost] => {
"msg": {
"command_status": {
"service": "world","status": false
}
}
}
但是我想要下面的输出
"command_status": [
{
"service": "hello","status": false
},{
"service": "world","status": false
}
]
解决方法
使用选定结果的属性来创建词典列表不是必需的循环。而是使用json_query multiselect hash并创建字典列表 cmd_stats 。然后一步一步合并字典。例如,下面的任务
- name: Setting facts
set_fact:
service_status: "{{ service_status|
combine({'command_status': cmd_stats}) }}"
vars:
cmd_stats: "{{ excecute.results|
json_query('[].{service: item,status: failed}') }}"
- debug:
var: service_status
给予
service_status:
command_status:
- service: hello
status: false
- service: world
status: false
注意:
- hostvars 和 json_query 不需要显示变量 service_status 。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。