¿Cómo usar with_item de Ansible con una variable?
Estoy intentando transformar algunos campos de los elementos de una lista en un Ansible Playbook. Aquí está el camino de reproducción más simple, omitiendo la transformación. El resultado debe ser idéntico a la users
variable.
---
# Run with:
# ansible-playbook -i "localhost," loop3.yml
- hosts: localhost
connection: local
gather_facts: false
vars:
users:
- name: paul
uid: 1
- name: pete
uid: 2
tasks:
- set_fact:
args:
useritem:
name: '{{ item.name }}'
uid: '{{ item.uid }}'
with_items:
- users
register: sf_result
- debug: var=sf_result
- set_fact:
userslist: "{{ sf_result.results | map(attribute='ansible_facts.useritem') | list }}"
- debug: var=userslist
Recibo este error:
TASK [set_fact useritem={u'name': u'{{ item.name }}', u'uid': u'{{ item.uid }}'}] ***
fatal: [localhost]: FAILED! => {"failed": true, "msg": "ERROR! 'unicode object' has no attribute 'name'"}
Hay varios ejemplos muy cercanos a lo que necesito, pero no pude encontrar ningún ejemplo funcional usando elementos set_fact
junto con with_items
y como mapa.
Probé Ansible 1.9.2, 1.9.4 y 2.0.0-0.6.rc1 con diferentes mensajes de error, pero no tuve más éxito. Ansible 2 debería permitir omitir la segunda llamada set_fact
, pero el error ocurre antes de llegar allí.
Pensé que había leído en algún lugar que with_items
acepta un nombre de variable simple, pero no es el caso.
El programa se ejecuta como se esperaba usando:
with_items: "{{ users }}"