¿Cómo usar with_item de Ansible con una variable?

Resuelto Laurent Caillette asked hace 9 años • 2 respuestas

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 usersvariable.

---
# 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_factjunto con with_itemsy 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í.

Laurent Caillette avatar Nov 29 '15 15:11 Laurent Caillette
Aceptado

Pensé que había leído en algún lugar que with_itemsacepta un nombre de variable simple, pero no es el caso.

El programa se ejecuta como se esperaba usando:

with_items: "{{ users }}"
Laurent Caillette avatar Nov 29 '2015 08:11 Laurent Caillette