Ansible 从寄存器变量创建dict

Ansible 从寄存器变量创建dict,ansible,Ansible,我在尝试使用以下行格式化脚本输出时遇到问题: "key1:val1" 将其注册到var中,该var给出: "var.stdout_lines": [ "key1:val1", ] And I would like to set_fact from this var to a dictionary like : - name: 'set dict fact' set_fact: dict: "{{dict|combine(var.stdout_lines)}}" 我有一个出口,比

我在尝试使用以下行格式化脚本输出时遇到问题:

"key1:val1"
将其注册到var中,该var给出:

"var.stdout_lines": [ "key1:val1", ]

And I would like to set_fact from this var to a dictionary like :
- name: 'set dict fact'
  set_fact:
    dict: "{{dict|combine(var.stdout_lines)}}"
我有一个出口,比如:

combine expects dictionaries, got Undefined"
是否有人知道如何正确格式化我的脚本输出,以便通过dict正确组合


THKS

这里有多个问题:

  • dict
    未初始化,因此它是
    未定义的
    ,当您尝试将其与某些内容组合时,它不起作用。第一步是使用
    默认过滤器:

    dict: "{{ dict| default({}) | combine(var.stdout_lines) }}"
    
  • 用于组合字典,但
    var.stdout\u行
    是一个列表,而不是dict,因此您会得到另一个错误:“|组合字典,得到[u'key1:val1']”

  • 我看到的一个解决方案是将行转换为dict的字符串表示形式,然后使用:

    小心:当键或值包含双引号char
    时,它不会处理这种情况

    - set_fact:
        dict: "{{ ('{' + (var.stdout_lines | map('regex_replace', '(.*):(.*)', '\"\\1\":\"\\2\"') | join(',')) + '}') | from_json }}"