使用Ansible Jinja遇AttributeError:int对象无startswith属性求助
解决Ansible模板中AttributeError: 'int' object has no attribute 'startswith'的问题
嘿,这个错误其实很好定位,就是类型不匹配搞的鬼!我来给你拆解一下:
错误原因分析
你通过Jinja2表达式计算出的shutdown_port是一个整数类型,但在后续的Playbook任务或者模板渲染过程中,有代码尝试对这个整数调用字符串独有的startswith()方法——整数当然没有这个方法,所以直接抛出了AttributeError。
快速修复方案
只需要在你的表达式最后加上|string过滤器,把计算出来的整数转换成字符串类型就搞定了。修改后的语句如下:
{% set shutdown_port = ((tomcat_services[current_app_name]["service_port"] +5)|int|abs)|string %}
额外验证提示
- 你已经用
|int确保了service_port被转换成整数再计算,这部分是没问题的; - 可以检查下Playbook里其他用到
shutdown_port的地方,比如是否有字符串拼接、正则匹配这类需要字符串类型的操作,确保类型统一。
内容的提问来源于stack exchange,提问作者Cena
相关产品推荐
相关产品推荐

