with_items with_file variable multiple deprecated ansible ansible-playbook

deprecated - with_file - Ansible 1.6 incluye with_items en desuso



with_file ansible (2)

Así que parece que esta función ha quedado obsoleta, realmente no entiendo por qué, el CTO de Ansible dice que deberíamos usar en su lugar con_nested pero honestamente no tengo idea de cómo hacerlo

Aquí está mi playboook:

- hosts: all user: root vars: - sites: - site: site1.com repo: ssh://[email protected]/orgname/reponame nginx_ssl: true; copy_init: - path1/file1.txt - path2/file2.php - path2/file3.php - site: site2.net repo: ssh://[email protected]/orgname/reposite2 - site: site4.com repo: ssh://[email protected]/orgname/reposite3 copy_init: - path2/file2.php tasks: - name: Bootstrap Sites include: bootstrap_site.yml site={{item}}

Y el mensaje de error al intentar ejecutar esto en Ansible 1.6.6:

ERROR: [DEPRECATED]: include + with_items es una función en desuso eliminada. Por favor, actualice sus libros de jugadas.

¿Cómo puedo convertir este libro de jugadas a algo que funcione con esta versión ansible?


Encontré una respuesta para eludir el mensaje desaprobado por blahblah ... como se pidió en la publicación original.

Agregué un archivo vars / filenames.yml:

filenames: - file1 - file2 - file3

A continuación leo estos nombres al principio del libro de jugadas:

- name: read filenames include_vars: vars/filenames.yml

Entonces, puedo usarlos más tarde:

- name: Copy files 1 copy: src=/filesrc1/{{ item }} dest=/filedest1/{{ item }} owner=me group=we with_items: filenames

y así....

Saludos, Tom


No hay reemplazo directo, desafortunadamente. Algunas cosas que puedes hacer:

  • Pase la lista a su archivo incluido y repita allí. En tu libro de jugadas:

    vars: sites: - site1 - site2 tasks: - include: bootstrap_site.yml sites={{sites}}

    Y en bootstrap_site.yml:

    - some_Task: ... with_items: sites - another_task: ... with_items: sites ...

  • Reescriba bootstrap_site como un module (en python, bash, lo que sea), póngalo en un directorio de library lado de su libro de jugadas. Entonces podrías hacer:

    - bootstrap_site: site={{item}} with_items: sites

Actualización: Ansible V2 está fuera y trae de vuelta el combo include + with_items.