从寄存器var创建dict

问题描述 投票:0回答:1

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

"key1:val1"

在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"

有人知道如何格式化我的脚本输出正确地通过我的字典组合?

THKS

ansible
1个回答
0
投票

这里有多个问题:

  1. dict没有初始化,所以它是Undefined,当你尝试将它与某些东西结合起来时,它不起作用。第一步是使用default过滤器: dict: "{{ dict| default({}) | combine(var.stdout_lines) }}"
  2. combine filter用于组合字典,但var.stdout_lines是一个列表,而不是字典,所以你会得到另一个错误:“|结合预期字典,得到[u'key1:val1']”

我看到的解决方案是将您的行转换为字典的字符串表示形式,然后使用from_json filter

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

注意:当键或值包含双引号char "时,它不处理这种情况。

© www.soinside.com 2019 - 2024. All rights reserved.