首页 > 解决方案 > Ansible 和 Jinja2 变量组合

问题描述

我有一个生成两个 Ansible 列表的 bash 脚本的剧本。

在 Jinja2 模板文件中,我试图for在一个 Ansible 列表上运行循环,然后for根据第一个列表的输出在其中运行另一个循环。

这是我的 Ansible defaults.yml

##################################
#        FIRST LOOP              #
##################################

prefix_list:
  - prefix1
  - prefix2

##################################
#         SECOND LOOP            #
##################################
prefix1:
  - kola
  - wlcom
  - linkstory



prefix2:
  - kola

Jinja2 模板:

#!/bin/bash
date=$(date +'%Y.%m' -d "month ago")
exdate=$(date +'%Y.%m' -d "{{ exdate }} months ago")
{% for prefix in prefix_list %}
    {% for index in prefix %}
        {{ index }}
    {% endfor %}
{% endfor %}

结果:

#!/bin/bash
date=$(date +'%Y.%m' -d "month ago")
exdate=$(date +'%Y.%m' -d "12 months ago")
            p
            r
            e
            f
            i
            x
            1
                p
            r
            e
            f
            i
            x
            2

标签: ansiblejinja2

解决方案


使用vars查找插件来引用变量(而不是像现在那样遍历名称中的字符)。

您的内部循环应该是:

{% for index in lookup('vars', prefix) %}

还要检查如何控制 Jinja2 中的空格,因为您将使用当前代码获得的输出会奇怪地缩进。


推荐阅读