Cómo crear un directorio usando Ansible


Respuestas:


637

Quieres el módulo de archivo. Para crear un directorio, debe especificar la opción state=directory:

- name: Creates directory
  file:
    path: /src/www
    state: directory

Puede ver otras opciones en http://docs.ansible.com/file_module.html


36
Si state=directory, todos los subdirectorios inmediatos se crearán si no existen, ya que 1.7 se crearán con los permisos proporcionados.
Alex

1
@Alex all immediate subdirectorieses confuso, ¿podría definir eso y dar un ejemplo?
Jamie Jackson

8
@JamieJackson Hay un error, debe ser "todos los subdirectorios intermedios".
Alex

203

Incluso puede extender el módulo de archivo e incluso configurar el propietario, el grupo y el permiso a través de él. (Ref: documentación del archivo Ansible )

- name: Creates directory
  file:
    path: /src/www
    state: directory
    owner: www-data
    group: www-data
    mode: 0775

Incluso, puede crear los directorios de forma recursiva:

- name: Creates directory
  file:
    path: /src/www
    state: directory
    owner: www-data
    group: www-data
    mode: 0775
    recurse: yes

De esta manera, creará los dos directorios, si no existieran.


38
El recursiveargumento hace que esto sea muy parecido al uso mkdir -p(para aquellos que buscan en Google ansible mkdir -p ).
Micah Elliott

2
Descubrí que también cambia los permisos de los archivos secundarios ... casi como mkdir -p / foo / bar && chmod -R 0775 / foo / bar ... ¿Alguien más ha observado esto con Ansible 2.0.0.2
ThePracticalOne

66
El recurseparámetro no le gusta mkdir -p. Establece recursivamente los atributos de archivo especificados (solo se aplica al estado = directorio). Si state=directory, todos los subdirectorios inmediatos se crearán si no existen, ya que 1.7 se crearán con los permisos proporcionados.
Alex

1
esto usa la sintaxis anterior con =caracteres, sería genial actualizarlo con la :sintaxis con cada atributo en una nueva línea
ympostor

@ThePracticalOne - Sí ... el uso de "recurse" se comporta exactamente de la misma manera chmod -R. Es decir, si pathya existe como un directorio y hay archivos dentro de él, la recurseopción (a veces desafortunadamente) también aplicará esos mismos permisos a los archivos. Esto es por diseño , para bien o para mal.
Dale Anderson


14

El directorio se puede crear utilizando solo el módulo de archivo, ya que el directorio no es más que un archivo.

# create a directory if it doesn't exist
- file:
    path: /etc/some_directory
    state: directory
    mode: 0755
    owner: foo
    group: foo

8
- file:
    path: /etc/some_directory
    state: directory
    mode: 0755
    owner: someone
    group: somegroup

Esa es la forma en que también puede establecer los permisos, el propietario y el grupo. Los últimos tres parámetros no son obligatorios.



7

Adicional para todas las respuestas aquí, hay muchas situaciones en las que necesita crear más de un directorio, por lo que es una buena idea usar bucles en lugar de crear tareas separadas para cada directorio.

- name: Creates directory
  file:
    path: "{{ item }}"
    state: directory
  with_items:
  - /srv/www
  - /dir/foo
  - /dir/bar

3

Solo necesita poner condición para ejecutar la tarea para una distribución específica

- name: Creates directory
  file: path=/src/www state=directory
  when: ansible_distribution == 'Debian'

3

Puedes usar la declaración

- name: webfolder - Creates web folder
  file: path=/srv/www state=directory owner=www-data group=www-data mode=0775`

3

Si desea crear un directorio en Windows:

  • nombre: Crear estructura de directorio
    win_file:
    ruta: C: \ Temp \ folder \ subfolder>
    state: directory


2

Tenemos módulos disponibles para crear directorio, archivo en ansible

Ejemplo

- name: Creates directory
  file:
    path: /src/www
    state: directory

1

Puede ejecutar directamente el comando y crear directamente usando ansible

ansible -v targethostname -m shell -a "mkdir /srv/www" -u targetuser

O

ansible -v targethostname -m file -a "path=/srv/www state=directory" -u targetuser

1
---
- hosts: all
  connection: local
  tasks:
    - name: Creates directory
      file: path=/src/www state=directory

El libro de jugadas anterior creará el directorio www en la ruta / src.

Antes de correr por encima del libro de jugadas. Asegúrese de que su conexión de host ansible esté configurada,

"localhost ansible_connection = local"

debe estar presente en / etc / ansible / hosts

para más información por favor avíseme


file: path = / src / www state = directory
Saurabh

1

para crear directorio

ansible host_name -m file -a "dest=/home/ansible/vndir state=directory"

1

Use el módulo de archivo para crear un directorio y obtenga los detalles sobre el módulo de archivo usando el comando "ansible-doc file"

Aquí hay una opción "estado" que explica:

Si directory, todos los subdirectorios inmediatos se crearán si no existen, ya que 1.7 se crearán con los permisos proporcionados.
Si fileel archivo NO se creará si no existe, consulte el módulo [copia] o [plantilla] si desea ese comportamiento.
Si link, el enlace simbólico será creado o cambiado. Uso hardpara enlaces duros.
Si absent, los directorios se eliminarán de forma recursiva y los archivos o enlaces simbólicos se desvincularán.

Tenga en cuenta que fileno fallará si la ruta no existe ya que el estado no cambió.

Si touch(nuevo en 1.4), se creará un archivo vacío si la ruta no existe, mientras que un archivo o directorio existente recibirá tiempos actualizados de acceso y modificación de archivos (similar a la forma en que touchfunciona desde la línea de comandos).



1

La forma más fácil de crear un directorio en Ansible.

  • nombre: crea tu_directorio si no existe. archivo: ruta: / etc / your_directory

O

Desea otorgar privilegios de sudo a ese directorio.

  • nombre: crea tu_directorio si no existe. file: ruta: / etc / your_directory modo: '777'

0

Veo muchos ejemplos de Playbooks y me gustaría mencionar el ejemplo de comandos Adhoc.

$ ansible -i inventario -m archivo -a "ruta = / tmp / direcory state = directorio (en lugar del directorio podemos mencionar tocar para crear archivos)


0

Necesita usar el módulo de archivo para este caso. Debajo del libro de jugadas, puede usarlo como referencia.

    ---
     - hosts: <Your target host group>
       name: play1
       tasks: 
        - name: Create Directory
          files:
           path=/srv/www/
           owner=<Intended User>
           mode=<Intended permission, e.g.: 0750>
           state=directory 

0

Para verificar si existe el directorio y luego ejecutar alguna tarea (por ejemplo, crear directorio) use lo siguiente

- name: Check if output directory exists
    stat:
    path: /path/to/output
    register: output_folder

- name: Create output directory if not exists
    file:
    path: /path/to/output
    state: directory
    owner: user
    group: user
    mode: 0775
    when: output_folder.stat.exists == false

0

Tú quieres el filemódulo. Para crear un directorio, debe especificar la opción state: directory:

- name: Creates directory
  file:
    path: /src/www
    state: directory

-5

Aquí es la manera más fácil.

- name: create dir command: mkdir -p dir dir/a dir/b


2
Esto no es idempotente.
qubsup
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.