我在尝试使用以下行格式化脚本输出时遇到问题:
"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
这里有多个问题:
dict
没有初始化,所以它是Undefined
,当你尝试将它与某些东西结合起来时,它不起作用。第一步是使用default
过滤器:
dict: "{{ dict| default({}) | combine(var.stdout_lines) }}"
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 "
时,它不处理这种情况。