如何从ansible jinja2模板中的列表中输出值

时间:2019-06-28 08:45:13

标签: ansible jinja2

我有一个变量,它存储任务运行中的2个值

- name: Set result
  set_fact:
    xresult: "{{ xresult | default([]) + [ yresult ] }}"

打印有调试,它显示如下:

[u'abc', u'def']

我正在尝试在jinja2模板中显示输出,如下所示:

{% for x in xresult %}
First run result: {{ x[0] }}
Second run result:{{ x[1] }}
{% endfor %}

输出应如下所示:

First run result: abc
Second run result: def

2 个答案:

答案 0 :(得分:1)

下面的戏

- hosts: localhost
  vars:
    xresult:
      - abc
      - def
  tasks:
    - set_fact:
        output: |
          {% for i in range(0, xresult|count, 2) %}
          First run result: {{ xresult[i] }}
          Second run result: {{ xresult[i+1] }}
          {% endfor %}
    - debug:
        msg: "{{ output.split('\n') }}"

给予

"msg": [
    "First run result: abc", 
    "Second run result: def", 
    ""
]

答案 1 :(得分:0)

这实际上只会显示以下值。

First run result: a
Second run result: b
First run result: d
Second run result: e

因为您使用的是x [0],所以第一次迭代的值将为x = abc,而您将其用作x [0],即x [abc]实际上是a。

您需要限制运行并直接访问值,因此需要添加一些逻辑条件才能实现。

希望如此就可以清除了,只需在模板中进行处理即可。

相关问题