可以使用int过滤器进行比较



我试图将传递给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') }}"

在这种情况下,我认为省略管道周围的空格可以提高可读性。

最新更新