我试图将传递给Ansible剧本的变量与数值进行比较。表达式
"{{params.wait_seconds | int > 0 | ternary('yes', 'no')}}"
产生以下异常
{"msg": "Unexpected templating type error occurred on ({{params.wait_seconds | int > 0 | ternary('yes', 'no')}}): '>' not supported between instances of 'int' and 'str'"}
我在产生此错误的任务之前调试params.wait_seconds
的值,值如下:
"params": {
"wait_seconds": "150"
}
我使用的是Ansible 2.10.5和Python 3.8.5
在寻找了几个小时的答案后,所有的解释都表明这应该是可行的。我还没有遇到任何突出的错误报告说这不起作用。如有任何建设性的建议,我将不胜感激。
"{{ params.wait_seconds|int > 0|ternary('yes', 'no') }}"
管道|
优先于比较>
。0
被计算为布尔值,并通过管道连接到ternary
。整数,params.wait_seconds|int
被转换为,与字符串进行比较,三进制的结果。这就是错误
在'int'和'str'实例之间不支持'>'
解决方法很简单。在括号
中关闭比较"{{ (params.wait_seconds|int > 0)|ternary('yes', 'no') }}"
在这种情况下,我认为省略管道周围的空格可以提高可读性。