bibou test
bibou test

Reputation: 35

loop using with_sequence over with_subelement in ansible

I am trying to loop over a subelement variables using the a loop like with_sequence,

For the moment I have :

--- 
- hosts: corosync
  gather_facts: no 

  vars:
    host_list:
     - node_one
     - node_two

    list_services:
     - group: ALPHA
       services:
         - name: DHCP
           directory: /etc/dhcp
         - name: DNS
           directory : /etc/dns
     - group: BETA
       services:
         - name: SSH
           directory: /etc/ssh
         - name: FTP
           directory: /ztc/ftp

 tasks:
 - name: create group-services
   debug:  
      msg: "the service name is {{ item.0.group}}-{{ item.1.name}} , directory is  {{ item.1.directory }}" 

   with_subelements:
    - "{{ list_services }}"
    - services

Since I have 2 nodes in my cluster

I want to deplucate each service like below :

{{ item.0.group}}-{{host_id}}-{{ item.1.name}} 

with {{ host_id }} a list that equal ['0','1'] since I have 2 nodes

and the with_subelement function loop over the {{ host_id }} twice since we have two nodes, what gives :

I want to use something like with_sequence function beside with_subelement like

with_sequence: start=0, end={{ groups['host_list']|length}}

Any suggestions please

Upvotes: 0

Views: 1579

Answers (1)

techraf
techraf

Reputation: 68609

The loop declaration introduced in Ansible 2.5 makes it pretty straightforward ー you just need to combine the two patterns replacing legacy with_sequence and legacy with_subelements:

- name: create group-services
  debug:
    msg: "{{item.1.0.group}}-{{item.0}}-{{item.1.1.name}}"
  loop: "{{ range(0, host_list|length) | product(list_services|subelements('services')) | list }}"

Upvotes: 3

Related Questions