How to loop through a list of dictionary, and print out every key and value pair in Ansible
<p>I have an list of dictionary in Ansible config</p>

<pre><code>myList
    - name: Bob
      age: 25
    - name: Alice
      age: 18
      address: USA
</code></pre>

<p>I write code as</p>

<pre><code>- name: loop through
  debug: msg ="{{item.key}}:{{item.value}}"
  with_items: "{{ myList }}"
</code></pre>

<p>I want to print out like</p>

<pre><code>msg: "name:Bob age:25 name:Alice age:18 address:USA"
</code></pre>

<p>How can I loop through this dictionary and get key and value pairs? Because it don't know what is the key. If I change as {{ item.name }}, ansible will work, but I also want to know key</p>

<p>If you want to loop through the list and parse every item separately:</p>

<pre><code>- debug: msg="{{ item | dictsort | map('join',':') | join(' ') }}"
  with_items: "{{ myList }}"
</code></pre>

<p>Will print:</p>

<pre><code>"msg": "age:25 name:Bob"
"msg": "address:USA age:18 name:Alice"
</code></pre>

<p>If you want to join everything into one line, use:</p>

<pre><code>- debug: msg="{{ myList | map('dictsort') | sum(start=[]) | map('join',':') | join(' ') }}"
</code></pre>

<p>This will give:</p>

<pre><code>"msg": "age:25 name:Bob address:USA age:18 name:Alice"
</code></pre>

<p>Keep in mind that dicts are not sorted in Python, so you generally can't expect your items to be in the same order as in yaml-file. In my example, they are sorted by key name after dictsort filter.</p>

python ansible