python - 在 Ansible 上使用 Jinja2 的 if 表达式(内联 if-else)中的连接不起作用
问题描述
所以,我试图在 Jinja 中创建一种多替代变量的东西,因为这个
{{ var1.x | var2.x | default('', true) }}
不起作用,因为 var2 不是过滤器...
我正在使用内联 if 表达式这样
{{ var1.x if var1.x is defined else var2.x | default('', true) }}
实现这一目标。但是现在我想将一个字符串连接到两个变量而不是默认值,所以我尝试这样做
{{ var1.x ~ '-' if var1.x is defined else var2.x ~ '-' | default('', true) }}
但是由于某种原因,不允许在 else 中进行串联,因为 Ansible 会从中输出错误!-vvv 不提供额外信息。
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: ansible.errors.AnsibleUndefinedVariable: 'dict object' has no attribute 'x'
fatal: [default]: FAILED! => {"changed": false, "msg": "AnsibleUndefinedVariable: 'dict object' has no attribute 'x'"}
但如果我这样做
{{ var1.x ~ '-' if var1.x is defined else var2.x | default('', true) }}
它有效......为什么?我怎样才能实现我想要做的事情?
解决方案
事实证明,这个问题很容易解决......
我不认为你可以像在几乎所有编程语言中那样在 Jinja 中的表达式链接内联...
我的问题通过以下方式解决:
{{ var1.x ~ '-' if var1.x is defined else var2.x ~ '-' if var2.x is defined | default('', true) }}
感谢@Rivers 让我在别处寻找错误,这实际上让我意识到错误消息是正确的,而我只是愚蠢
推荐阅读
- pytorch - HuggingFace:加载没有缓存的大型数据集(来自本地目录)
- django - 如何在 django djoser 中使用 html 模板重置密码
- java - 没有方法签名:build_#hash#.patchPluginXml() 适用于参数类型:(build_#hash#$_run_closure4) 在创建 Idea 插件时
- python - 创建并填充以日期为索引的数据框,并在 pandas 中填充 arrys
- unity3d - 通过命令行在ubuntu下搭建Unity Server
- python - mysql-connector-python 不适用于 VS Code 并在 python shell 中工作
- php - 为 MySQL 和 SQLite 创建唯一不区分大小写的列
- scala - 构建 Scala 库并在数据块中使用它们
- node.js - 在推送器中调用触发方法时引发错误,“预期字符串”
- firebase - Flutter Firebase document.id 更新问题