String Ansible将字符串拆分为最大长度子字符串列表的最佳实践?

String Ansible将字符串拆分为最大长度子字符串列表的最佳实践?,string,ansible,until-loop,String,Ansible,Until Loop,这显示了我正在尝试做什么 --- - hosts: localhost gather_facts: false vars: str: "abcdefg" str_parts: [] tasks: - name: Break string into list of max 3 character parts set_fact: str_parts: "{{ str_parts + [ str[:3] ]

这显示了我正在尝试做什么

---
- hosts: localhost
  gather_facts: false
  vars:
    str: "abcdefg"
    str_parts: []
  tasks:
    - name: Break string into list of max 3 character parts
      set_fact:
        str_parts: "{{ str_parts + [ str[:3] ] }}"
        str: "{{ str[3:] }}"
      until: str == ""
使用-vvv运行它表明循环代码只执行一次。str_parts获得单成员“abc”,str更改为“defg”,日志显示“失败-重试:将字符串拆分为最多3个字符的部分”消息,直到超时

为什么不循环,呃,循环

我可以通过使用命令或shell模块在断点处插入逗号,然后使用{{str | split(“,”)}来解决这个问题,但纯Ansible解决方案会更好

编辑:例如,bug主题的行为

-设置事实:
str|u部分:{{str|batch(3)| map('join')}}”
给予

stru零件:
-abc
-def
-g

可以仅选择匹配的项目,例如:

-设置事实:
str|u部分:{{str|batch(3)| map('join')| select('match','^.{3}$')}
给予

stru零件:
-abc
-def

谢谢弗拉基米尔,这些都是优雅的解决方案