Использовать Расширенные l oop переменные . Например,
- hosts: localhost
vars:
List: ['sk','bk','ab','4','5','6','ku','in','12','34','56','78']
List_lenght: "{{ List|length }}"
Step: 4
tasks:
- debug:
msg: "{{ List[split0|int:split1|int] }}"
vars:
split0: "{{ ansible_loop.previtem|default(0) }}"
split1: "{{ ansible_loop.last|ternary(List_lenght, item) }}"
loop: "{{ range(Step, List_lenght|int + Step, Step)|list }}"
loop_control:
extended: yes
дает
"msg": [
"sk",
"bk",
"ab",
"4"
]
"msg": [
"5",
"6",
"ku",
"in"
]
"msg": [
"12",
"34",
"56",
"78"
]
Можно создать собственный плагин. Например,
> cat filter_plugins/list_methods.py
def list_split_period(l, p):
split_list = []
for i in range(p, len(l)+p, p):
if i == p:
split_list.append(l[0:p])
elif i > len(l):
split_list.append(l[j:])
else:
split_list.append(l[j:i])
j = i
return split_list
class FilterModule(object):
def filters(self):
return {
'list_split_period': list_split_period
}
Тогда игра
- hosts: localhost
vars:
List: ['sk','bk','ab','4','5','6','ku','in','12','34','56','78']
Step: 4
tasks:
- set_fact:
my_list: "{{ List|list_split_period(Step) }}"
- debug:
var: my_list
дает
my_list:
- - sk
- bk
- ab
- '4'
- - '5'
- '6'
- ku
- in
- - '12'
- '34'
- '56'
- '78'
Для вашего удобства плагин доступен среди других Список методов на GitHub .