【问题标题】:Jinja2 Templating: Conditionally forming a set from Ansible VariablesJinja2 模板:有条件地从 Ansible 变量中形成一个集合
【发布时间】:2018-02-25 11:19:25
【问题描述】:

我正在尝试使用 Jinja2 模板和 Ansible 变量生成一些配置。我目前工作的框架不允许我在 Ansible 中执行以下操作,因此我希望在 Jinja2 中获得相同的结果。

我的 Ansible 变量如下:

---
Top:
  inner:
    type: type1
    other_random_variable:
     - random: 1
  inner2:
    type: type2
  inner3:
    type: type1

当我迭代循环并形成如下配置文件时,上述结构效果很好:

{% if Top is defined %}
{% for inner_vars in Top %}
# perform substitution here
{% endfor %}
{% endif %}

我想做的是形成一组类型,以便我可以为每个唯一类型生成另一个配置。

我有什么方法可以遍历Top 并将一个项目添加到集合中?

【问题讨论】:

  • 我很确定这个问题的答案是否定的,但是,不是 100% 确定。但即使有可能,如果您构建自己的模块(在 python 中)并在其中传递 Top 格式并以您想要的方式返回它,它会更好更整洁。
  • 嘿,我发布了一个示例解决方案,我相信它可以解决我的问题。如果您有任何其他建议,请告诉我。谢谢!
  • 确实不错。

标签: ansible jinja2


【解决方案1】:

我想我有一个可行的解决方案:

{% set types = [] %}

{% if Top is defined%}
{% for inner_var in Top %}
    {% if types.append(Top[inner_var].type) %}{% endif %}
{% endfor %}
{% endif %}

{{ types|unique }}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多