Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在ansible中定义格式化字符串列表?_Ansible_Jinja2_Ansible Template - Fatal编程技术网

如何在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
    过滤器来实现。如果我错了,请纠正我

  • 这将是Ansible模板的一部分


  • 如果需要具有值的变量,只需使用
    循环
    ,然后使用
    连接
    过滤器即可:

    -主机:所有
    收集事实:不
    任务:
    -设定事实:
    列表:“{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是一种声明性的东西,比如列表理解,读起来更好,他在寻找一些过滤器或其他东西。