Necesito verificar si existe el archivo deploy.db. Si no existe, entonces necesito realizar un conjunto de tareas para las que estoy usando block.

A continuación se muestra cómo ejecuto el libro de jugadas

ansible-playbook test.yml -e Layer=APP -e BASEPATH="/logs" -e Filenames="file1,file2,file3"

A continuación se muestra mi libro de jugadas completo:

---
- name: "Play 1"
  hosts: localhost
  gather_facts: false
  tasks:
   - name: Construct 
     debug:
        msg: "Run"
   - block:
       - stat: path="{{ BASEPATH }}/deploy.db"
         register: currdb
       - file: path="{{ BASEPATH }}/deploy.db" state=touch recurse=no
         when: currdb.stat.exists == False
       - shell: "echo done>>{{ BASEPATH }}/deploy.db"
         when: currdb.stat.exists == False
     when: Layer == 'APP'
     with_items:
       - "{{ Filenames.split(',') }}" 

Recibo el siguiente error al ejecutar el libro de jugadas:

ERROR! 'with_items' is not a valid attribute for a Block

The error appears to be in '/app/test.yml': line 9, column 6, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

   - block:
     ^ here

Después de investigar un poco, entiendo que ni with_items ni loop son compatibles con el módulo de bloques y la solución es incluir el archivo de tareas.

Sin embargo, no estoy seguro de cómo hacer que funcione. ¿Puede sugerir qué ajustes necesito para que mi libro de jugadas funcione?

Teniendo en cuenta que estoy en la última versión de Ansible, ¿existen otras soluciones?

4
Ashar 18 nov. 2019 a las 08:46

1 respuesta

La mejor respuesta

'with_items' no es un atributo válido para un bloque

El mensaje de error lo dice todo: no se puede recorrer un bloque.

Si necesita recorrer un conjunto de tareas, colóquelas en un archivo separado y use include_tasks

12
Zeitounator 18 nov. 2019 a las 09:42