En mi libro de jugadas de Ansible muchas veces necesito crear un archivo allí
- name: Copy file
template:
src: code.conf.j2
dest: "{{project_root}}/conf/code.conf"
ahora muchas veces conf
dir no está ahí. Entonces tengo que crear más tareas para crear ese directorio primero.
¿Hay alguna manera fácil de crear automáticamente un directorio si no existe con alguna opción?
Respuestas:
Ahora mismo, esta es la única forma
fuente
recurse=yes
a lafile
llamada para obtener elmkdir -p
comportamiento de tipodirname
para obtener el directorio que contiene un archivo.Para garantizar el éxito con una ruta completa, use recurse = yes
fuente
recurse=yes
solo aplican permisos de forma recursiva. Sin embargo, la documentación indica que esto ocurre automáticamente desde la v1.7, por lorecurse
que bien podría estar obsoleto.Si está ejecutando Ansible> = 2.0, también existe el filtro de nombre de directorio que puede usar para extraer la parte del directorio de una ruta. De esa manera, solo puede usar una variable para mantener la ruta completa y asegurarse de que ambas tareas nunca se desincronicen.
Entonces, por ejemplo, si tiene un libro de jugadas
dest_path
definido en una variable como esta, puede reutilizar la misma variable:fuente
AFAIK, la única forma en que esto podría hacerse es usando la
state=directory
opción. Si bien eltemplate
módulo admite la mayoría de lascopy
opciones, que a su vez admite la mayoría de lasfile
opciones, no puede usar algo asístate=directory
. Además, sería bastante confuso (¿significaría que{{project_root}}/conf/code.conf
es un directorio? O significaría que{{project_root}}/conf/
debería crearse primero.Entonces, no creo que esto sea posible ahora sin agregar una
file
tarea anterior .fuente
De acuerdo con el último documento, cuando el estado está configurado como directorio, no necesita usar el parámetro recurse para crear directorios principales, el módulo de archivo se encargará de ello.
esto es suficiente para crear los datos del directorio principal y probar con foo
consulte la descripción del parámetro - " estado " http://docs.ansible.com/ansible/latest/modules/file_module.html
fuente
puede crear la carpeta usando lo siguiente dependiendo de su versión de ansible.
Versión más reciente 2 <
Versión antigua:
Consulte: http://docs.ansible.com/ansible/latest/file_module.html
fuente
El módulo de copia crea el directorio si no está allí. En este caso creó el directorio resuelto.conf.d
fuente