[英]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
(这是您的模板所期望的)
prefix_list:
-
- kola
- wlcom
- linkstory
-
- kola
(当您在模板中需要prefix1
和prefix2
时
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.