Home > Software engineering >  Ansible: print elements from joined list of dictionaries
Ansible: print elements from joined list of dictionaries

Time:10-26

I am trying to access elements from both lists: lista1 and lista2. First join them into one dictionary and then to be able to do something like this:

Vegetable {{ lista1.fruits.name }} has taste {{ lista1.fruits.taste }}

This is what I got so far, but it's really bad,and I would like to have dictionary like access instead of regex_search.

---
- name: demo how register works
  hosts: localhost
  vars:
    lista1:
     fruits:
      - name: tomato
        taste: tomato-like
      - name: lemon
        taste: sour
    lista2:
     vegetables:
      - name: carrot
        taste: sweet
  tasks:
   - name: debug 
     debug:
        var: item
     loop:
        - lista1.fruits
        - lista2.vegetables
     register: echo
   - name: show register results
     debug:
         msg: "Food named: {{ item| map(attribute='name')|list|join(', ') |regex_search('tomato') }} tastes: {{ item| map(attribute='taste')|list|join(', ')|regex_search('tomato-like') }}"
     loop: "{{ lista1.fruits|zip(lista2.vegetables)|list }} "

CodePudding user response:

A debug task to show the "food" with its "taste" can be displayed by accessing item.name and item.taste by looping through lista1.fruits and lista2.vegetables.

Example:

    - name: show register results
      debug:
        msg: "Food named: {{ item.name }} tastes: {{ item.taste }}"
      with_items:
        - "{{ lista1.fruits }}"
        - "{{ lista2.vegetables }}"

Update

Instead of with_items, loop can be used as:

    - name: show register results
      debug:
        msg: "Food named: {{ item.name }} tastes: {{ item.taste }}"
      loop: "{{ lista1.fruits   lista2.vegetables }}"
  • Related