如何在ansible中定义格式化字符串列表?
假设我有一张这样的单子如何在ansible中定义格式化字符串列表?,ansible,jinja2,ansible-template,Ansible,Jinja2,Ansible Template,假设我有一张这样的单子 元素: -键:第一个键 值:第一个值 -钥匙:钥匙编号2 值:中间值 -关键点:最后一个关键点 价值:三 我想要一个字符串列表,格式化后的列表是this{key}=“{value}”,因此预期的结果是 ['first\u key=“first\u value”'、'key\u number=“middle\u value”、'last\u key=“three”] 在Python中,我会对元素中的I执行['{key}=“{value}'.format(**I)],但在
元素:
-键:第一个键
值:第一个值
-钥匙:钥匙编号2
值:中间值
-关键点:最后一个关键点
价值:三
我想要一个字符串列表,格式化后的列表是this{key}=“{value}”
,因此预期的结果是
['first\u key=“first\u value”'、'key\u number=“middle\u value”、'last\u key=“three”]
在Python中,我会对元素中的I执行['{key}=“{value}'.format(**I)]
,但在jinja2中没有列表理解
这在Ansible中应该是什么样子
评论:
first\u key=“first\u value”、key\u number=“middle\u value”、last\u key=“three”
,但我假设我应该解决上述问题,然后通过join
过滤器来实现。如果我错了,请纠正我
如果需要具有值的变量,只需使用
循环
,然后使用连接
过滤器即可:
-主机:所有
收集事实:不
任务:
-设定事实:
列表:“{list}默认值([])+[item.key~'=\''''.~item.value~'\''.]}”
循环:“{elements}}”
变量:
元素:
-键:第一个键
值:第一个值
-钥匙:钥匙编号2
值:中间值
-关键点:最后一个关键点
价值:三
-调试:
msg:{list | join(',)}
将产生概述:
播放[全部]*******************************************************************************************************
任务[设置事实]**************************************************************************************************
确定:[localhost]=>(项={'key':'first\u key','value':'first\u value'})
确定:[localhost]=>(项={'key':'key\u number\u 2','value':'middle\u value'})
确定:[localhost]=>(项={'key':'last_key','value':'three'})
任务[调试]*****************************************************************************************************
确定:[本地主机]=>
msg:first\u key=“first\u value”,key\u number\u 2=“middle\u value”,last\u key=“three”
重演*******************************************************************************************************
localhost:确定=2更改=0无法访问=0失败=0跳过=0获救=0忽略=0
现在,如果您在Jinja模板中需要它,您可以将普通Jinja与
循环一起使用
-主机:所有
收集事实:不
任务:
-调试:
味精:>-
{%用于元素中的元素-%}
{{element.key}}=“{{element.value}”
{%-if not loop.last%},{%endif%}
{%-endfor%}
变量:
元素:
-键:第一个键
值:第一个值
-钥匙:钥匙编号2
值:中间值
-关键点:最后一个关键点
价值:三
我们将回顾一下:
播放[全部]*******************************************************************************************************
任务[调试]*****************************************************************************************************
确定:[本地主机]=>
msg:first\u key=“first\u value”,key\u number\u 2=“middle\u value”,last\u key=“three”
重演*******************************************************************************************************
localhost:ok=1已更改=0无法访问=0失败=0跳过=0已获救=0已忽略=0
List comprehension只是一种更短、更像python的循环方式。所以,如果这应该在模板中,只需做一个是,我做了类似的事情(在循环中串联),但您的代码看起来比我的更干净:)。IMHO是一种声明性的东西,比如列表理解,读起来更好,他在寻找一些过滤器或其他东西。