Как преобразовать список в список списка в ansible - PullRequest
1 голос
/ 06 февраля 2020

У меня есть один список и преобразование разбито на список, пожалуйста, найдите приведенный ниже пример:


List: ['sk','bk', 'ab','4',,'5',6','ku','in']
Expected output:
[
[sk','bk', 'ab','4'],
['5',6','ku','in]
]

Примечание: ожидаемый результат должен иметь 3 списка, если список содержит 12 элементов

Не могли бы вы знать, как это сделать в ansible

Заранее спасибо, Сентил

1 Ответ

1 голос
/ 06 февраля 2020

Использовать Расширенные 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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...