【发布时间】:2015-08-18 15:56:23
【问题描述】:
我将 Ansible 与 Jinja2 模板一起使用,这是我无法在 Ansible 的文档中找到解决方案或在谷歌上搜索 Jinja2 示例的场景。这是我想在 Ansible 中实现的逻辑:
if {{ existing_ansible_var }} == "string1"
new_ansible_var = "a"
else if {{ existing_ansible_var }} == "string2"
new_ansible_var = "b"
<...>
else
new_ansible_var = ""
我可以通过结合几种技术来做到这一点,这里的变量赋值:Set variable in jinja,这里的条件比较:http://jinja.pocoo.org/docs/dev/templates/#if-expression,以及这里的默认过滤器:https://docs.ansible.com/playbooks_filters.html#defaulting-undefined-variables,
...但我觉得这有点矫枉过正。有没有更简单的方法来做到这一点?
【问题讨论】:
-
你想达到什么目的?
-
我正在尝试根据几个条件设置
new_ansible_var,以便我可以在.j2 模板中使用new_ansible_var -
我知道了,但你为什么要这个?如果您说明您的实际问题是什么,我们或许可以帮助您以更好的方式解决问题。
-
请在下面查看我的更新答案。除了简单地写出值之外,我还添加了一个定义 var 的示例。
-
@AntonisChristofides - 在我的
.j2文件中,我有一行我想看起来像这样:tags: {{ perm_tags }} {{ optional_tags}}。当且仅当{{ machine_type }}匹配许多不同字符串之一时,optional_tags应该有一个值。字符串比较集未来可能会增长,或者除了machine_type之外可能还有其他变量。理想情况下,我的 .j2 标记会更加通用,因此tags: {{ my_tags }}和my_tags的行将在其他地方(即在 vars 文件中?)定义为{{ perm_tags }}与{{ optional_tags }}连接
标签: jinja2 ansible ansible-playbook