繁体   English   中英

Ansible和Jinja2变量组合

[英]Ansible and Jinja2 variables combination

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

在Jinja2模板文件中,我尝试在一个Ansible列表上运行for循环,然后根据第一个列表的输出在其中运行另一个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

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

您的内部循环应为:

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

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

我对Ansible经验不足,但是我想您应该尝试将列表嵌套在defaults.yml

情况1-嵌套列表

(这是您的模板所期望的)

prefix_list:
  -
    - kola
    - wlcom
    - linkstory

  -
    - kola

案例2-字典

(当您在模板中需要prefix1prefix2

prefix_list:
  prefix1:
    - kola
    - wlcom
    - linkstory

  prefix2:
    - kola

在这种情况下,Jinja循环应采用这种方式修复

{% for prefix in prefix_list %}
    {% for index in prefix_list[prefix] %}
        {{ index }}
    {% endfor %}
{% endfor %}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM