tower - ansible tutorial
¿Cuál es la manera más fácil de crear automáticamente un directorio no existente en ansible? (6)
AFAIK, la única forma en que esto se puede hacer es usar la opción state=directory
. Mientras que el módulo de template
admite la mayoría de las opciones de copy
, lo que a su vez admite la mayoría de las opciones de file
, no puede usar algo como state=directory
con él. Además, sería bastante confuso (¿significaría que {{project_root}}/conf/code.conf
es un directorio? O querría decir que {{project_root}}/conf/
debería crearse primero.
Así que no creo que esto sea posible ahora sin agregar una tarea de file
previa.
- file:
path: "{{project_root}}/conf"
state: directory
recurse: yes
En mi libro de jugadas 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á allí. Entonces, tengo que crear más tareas para crear ese directorio primero.
¿Hay alguna manera fácil de auto crear el directorio si no existe con alguna opción
De acuerdo con el último documento, cuando el estado está configurado para ser directorio, no es necesario utilizar el parámetro recursivo para crear directorios principales, el módulo de archivos se encargará de ello.
- name: create directory with parent directories
file:
path: /data/test/foo
state: directory
esto es lo suficientemente caro como para crear los datos de los directorios principales y probar con foo
Consulte la descripción del parámetro - " estado " http://docs.ansible.com/ansible/latest/modules/file_module.html
En este momento, esta es la única manera
- name: Ensures {{project_root}}/conf dir exists
file: path={{project_root}}/conf state=directory
- name: Copy file
template:
src: code.conf.j2
dest: "{{project_root}}/conf/code.conf"
Para garantizar el éxito con una ruta completa use recurse = yes
- name: ensure custom facts directory exists
file: >
path=/etc/ansible/facts.d
recurse=yes
state=directory
Si está ejecutando Ansible> = 2.0 también existe el filtro de nombre de base que puede usar para extraer el directorio de una ruta. De esta forma, puede usar una variable para mantener la ruta completa y asegurarse de que ambas tareas nunca se desincronicen.
Entonces, por ejemplo, si tiene playbook con dest_path
definido en una variable como esta, puede reutilizar la misma variable:
- name: My playbook
vars:
dest_path: /home/ubuntu/some_dir/some_file.txt
tasks:
- name: Make sure destination dir exists
file:
path: "{{ dest_path | dirname }}"
state: directory
recurse: yes
# now this task is always save to run no matter how dest_path get''s changed arround
- name: Add file or template to remote instance
template:
src: foo.txt.j2
dest: "{{ dest_path }}"
puede crear la carpeta usando lo siguiente dependiendo de su versión ansible.
Última versión 2 <
- name: Create Folder
file:
path: "{{project_root}}/conf"
recurse: yes
state: directory
Versión antigua:
- name: Create Folder
file:
path="{{project_root}}/conf"
recurse: yes
state=directory
Consulte - http://docs.ansible.com/ansible/latest/file_module.html