Search code examples
pythonloopsansiblecycle

Ansible with itertools cycle


how i can get same results in ansible with loop?

I want to use

   - debug:
       msg: "{{ item.0 }} {{ item.1 }}"
     loop: "{{ gs_hostname | product(wl_hostname) | list }}"

But i get:

ok: [localhost] => { "msg": { "gs-01": "wl-01", "gs-02": "wl-02", "gs-03": null, "gs-04": null } }

What I expect:

from itertools import cycle

gs_hostname = ["gs01", "gs02", "gs03", "gs04"]
wl_hostname = ["wl01", "wl02"]

for a,b in zip(gs_hostname, cycle(wl_hostname)):
    print (a,b)

result:

gs01 wl01 gs02 wl02 gs03 wl01 gs04 wl02


Solution

  • I found another solution:

    - hosts: localhost
      connection: local
      gather_facts: False
      vars:
          gs_hostname: [gs-01, gs-02, gs-03, gs-04, gs-05, gs-06, gs-07]
          wl_hostname: [wl-01, wl-02, wl-03]
      tasks:
        - debug:
             msg: "{% set wl_list = wl_hostname %}
                   {% set row_class = cycler(* wl_list) %}
                   {% for gs in gs_hostname %}{{ gs }} - {{ row_class.next() }}{% endfor %}"
    

    More info here.