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

leucos
fuente
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.

Arbab Nazar
fuente
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

puedes crear usando:

Última versión 2 <

- name: Create Folder
  file: 
    path: /srv/www/
    owner: user 
    group: user 
    mode: 0755 
    state: directory

Versión antigua

- name: Create Folder
  file: 
   path=/srv/www/
   owner=user 
   group=user 
   mode=0755 
   state=directory

Consulte: http://docs.ansible.com/ansible/file_module.html

Chathuranga Abeyrathna
fuente
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
user3004224
fuente
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.

qubsup
fuente
7

Puedes crear un directorio. utilizando

# create a directory if it doesn't exist
- file: path=/src/www state=directory mode=0755

También puede consultar http://docs.ansible.com/ansible/file_module.html para obtener más detalles sobre el directorio y el sistema de archivos.

Ali Warrich
fuente
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
Andrey Bistrinin
fuente
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'
Bhavesh Vasoya
fuente
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`
Mazi
fuente
3

Si desea crear un directorio en Windows:

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

Alexandru Muica
fuente
2

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

Ejemplo

- name: Creates directory
  file:
    path: /src/www
    state: directory
Mohd Umar Mubeen
fuente
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
RegexCracker
fuente
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

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

para crear directorio

ansible host_name -m file -a "dest=/home/ansible/vndir state=directory"
sachin_ur
fuente
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).

Priyanka Bhardwaj
fuente
1

puede usar el módulo "archivo" en este caso, hay tantos argumentos que puede pasar por un directorio recién creado como el propietario, grupo, ubicación, modo, etc.

consulte este documento para obtener una explicación detallada sobre el módulo de archivo ...

https://docs.ansible.com/ansible/latest/modules/file_module.html#file-module

recuerda que este módulo no es solo para crear el directorio !!!

usuario11345576
fuente
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'
Muhammad Ahmad
fuente
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)

Kandasamy Murugan
fuente
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 
S.MANDAL
fuente
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
Levon
fuente
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
Devang Radadiya
fuente
-5

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

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

Ender Wan
fuente
2
Esto no es idempotente.
qubsup