Ansible:将字典转换成name = value字符串

时间:2018-11-07 14:53:26

标签: ansible

给像这样的字典

- set_fact:
      VARS: {foo: bar, baz: biz}

如何将其转换为以行换行分隔的name=value对字符串,最好使用过滤器,例如"{{ VARS | format(???) | join('\n') }}"

所需的结果是带有换行符的以下字符串:

foo=bar
baz=biz

我知道我可以使用map()来转换键或值,但不能一次转换两者。

1 个答案:

答案 0 :(得分:0)

此问题与以下内容非常相似:Create a string using Jinja2 template

您可能会采用与the one provided there类似的解决方案。下面将为您提供所需的带换行符的字符串:

"{{ VARS | to_json | regex_replace('\\:\\ ','=') | regex_replace('[\\[\\]{}\\\"]') | regex_replace('\\,\\ ','\\n') }}"

这应该给你一个像这样的字符串:

foo=bar
baz=biz

我不确定您打算将此输出用于什么,但是,例如,如果您打算在Ansible中的其他地方循环使用,将字符串拆分为字符串列表可能比使用字符串更有用。换行符。这可以通过使用以下替代方法完成:

{{ (VARS | to_json | regex_replace('\\:\\ ','=') | regex_replace('[\\[\\]{}\\\"]')).split(", ") }}

这将返回如下列表:

[ "foo=bar", "baz=biz" ]