2016-12-09 16 views
0

У меня есть ansible dict, где ключ - это имя и значение - целочисленное значение. Я хочу, чтобы мой внешний цикл выполнял итерацию по dict, а затем внутренний цикл для итерации для количества значений времени.Несложные вложенные циклы с наружным кольцом как dict и внутренний контур как значение элементов dict.

- hosts: localhost 
    tasks: 
    - debug: msg="region {{ item.key }} value {{ item.value }}" 
    with_subelements: 
     - "{{ objs }}" 
     - "{{ item.value }}" 
    vars: 
    objs: 
     amrs: 3 
     apac: 1 
     emea: 2 

Так выход должен быть

region amrs value 1 
region amrs value 2 
region amrs value 3 
region apac value 1 
region emea value 1 
region emea value 2 

Я хотел бы знать, если выше, может быть достигнуто с помощью анзибль. Я также попытался with_nested, но это не сработало

ответ

0

Вы можете сделать это с помощью хелпера задачи для генерации последовательности:

--- 
- hosts: localhost 
    gather_facts: yes 
    vars: 
    objs: 
     amrs: 3 
     apac: 1 
     emea: 2 
    tasks: 
    - set_fact: 
     tmp_list: "{{ tmp_list | default([]) + [dict(name=item.key,seq=lookup('sequence','count='+item.value|string,wantlist=true))] }}" 
     with_dict: "{{ objs }}" 
    - debug: msg="region {{ item.0.name }} value {{ item.1 }}" 
     with_subelements: 
     - "{{ tmp_list }}" 
     - seq 
+0

вы можете объяснить tmp_list линию в подробности, пожалуйста. он работал –

+0

, мы перебираем оригинальный 'objs' dict и выражаем' tmp_list', начиная с пустого списка, добавляя элементы dict с 'name', установленным в исходный ключ dict и' seq' - сгенерированную последовательность (список) с номерами от 1 до исходного значения dict , –

+0

Фантастический вы матчем! –