Você realmente pode fazer isso. Você só precisa conhecer a sintaxe j2 muito bem, pesquisar um pouco e combiná-la com alguns hacks. DOH. acabou de perder 2 horas. Espero que eu salve para alguém!
É factível assim:
- name: Display all interfaces
debug:
msg: "{{ msg.split('\n') }}"
vars:
msg: |
{% for iface in ansible_interfaces|sort %}
System interface {{ iface }}
{{ vars.ansible_facts[iface] | to_nice_json }}
{% endfor %}
E, como suspeito, as pessoas que estão pesquisando para fazer isso, querem calcular a próxima interface gratuita (que eu procurava).
Eu fiz assim:
- name: calc next free interface
set_fact:
nextFreeIf: "{% set ifacePrefix = vars.ansible_default_ipv4.alias %}{% set ifaceNum = { 'cnt': 0 } %}{% macro increment(dct, key, inc=1)%}{% if dct.update({key: dct[key] + inc}) %} {% endif %}{% endmacro %}{% for iface in ansible_interfaces|sort %}{% if iface| regex_search('^' ~ vars.ansible_default_ipv4.alias) %}{{ increment(ifaceNum, 'cnt') }}{% endif %}{% endfor %}{{ifacePrefix}}:{{ifaceNum.cnt}}"
o nextFreeIf está em uma linha, porque senão você recebe espaços vazios e dores de cabeça para cortá-lo. É feio, mas ei, funciona.
Realmente esperamos poupar tempo às pessoas.
Felicidades.