首页 > 解决方案 > Ansible:将字典转换为名称=值字符串

问题描述

给定一个字典,如:

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

我怎样才能把它变成一串name=value对,换行分隔,最好使用过滤器,比如"{{ VARS | format(???) | join('\n') }}"

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

foo=bar
baz=biz

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

标签: ansible

解决方案


这个问题和下面的很相似:Create a string using Jinja2 template

您可能会采用与那里提供的解决方案类似的解决方案。以下将为您提供带有换行符的所需字符串:

"{{ 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" ]

推荐阅读