Ansible中split过滤器的可用原因、实现来源及参数用法确认方法
Ansible中split过滤器相关问题解答
归属说明
split不属于Jinja2原生内置过滤器,是Ansible自行扩展实现的功能,因此Jinja2官方站点没有相关记载。- 该过滤器的实现逻辑是直接调用Python原生字符串类型的
str.split()方法,没有做额外的逻辑修改。
用法规则
- 该过滤器的参数、行为和Python原生
str.split()完全一致:- 支持传入两个参数,第一个为分隔符,第二个为最大分割次数
- 不传任何参数时,默认以任意连续空白字符(空格、制表符、换行符等)作为分隔符,自动忽略字符串首尾的空白
- 你提到的
| split(",",1)写法是完全合法的,执行效果等价于Python中对应字符串调用.split(",",1),会把字符串从左到右只分割1次,返回长度为2的列表
- 直接在Python环境执行
help(str.split)查到的所有使用规则,全部适用于Ansible的split过滤器,不存在行为差异。
未文档化过滤器的用法探明方式
- Ansible有大量直接映射Python原生基础类型方法的过滤器,这类过滤器的行为和Python对应原生方法完全对齐,可以直接参考Python内置类型方法的说明使用
- 最稳妥的验证方式是写极简测试playbook直接运行看输出,比如验证split多参数用法的示例:
- hosts: localhost gather_facts: no tasks: - name: 测试split指定分割次数的效果 debug: msg: "{{ 'k1=v1=v2=v3' | split('=',1) }}"
执行后返回结果为['k1', 'v1=v2=v3'],和预期的原生方法执行结果完全一致。
Ansible官方文档目前确实只给出了split的单参数基础示例,没有覆盖全参数说明,上述验证方式可以覆盖绝大多数同类未完整文档化的过滤器场景。
内容的提问来源于stack exchange,提问作者Gregu
相关产品推荐
相关产品推荐

