¿Cómo se crea un directorio www
en /srv
un sistema basado en Debian utilizando un libro de jugadas Ansible?
¿Cómo se crea un directorio www
en /srv
un sistema basado en Debian utilizando un libro de jugadas Ansible?
Respuestas:
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
all immediate subdirectories
es confuso, ¿podría definir eso y dar un ejemplo?
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.
recursive
argumento hace que esto sea muy parecido al uso mkdir -p
(para aquellos que buscan en Google ansible mkdir -p ).
recurse
pará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.
=
caracteres, sería genial actualizarlo con la :
sintaxis con cada atributo en una nueva línea
chmod -R
. Es decir, si path
ya existe como un directorio y hay archivos dentro de él, la recurse
opción (a veces desafortunadamente) también aplicará esos mismos permisos a los archivos. Esto es por diseño , para bien o para mal.
puedes crear usando:
- name: Create Folder
file:
path: /srv/www/
owner: user
group: user
mode: 0755
state: directory
- name: Create Folder
file:
path=/srv/www/
owner=user
group=user
mode=0755
state=directory
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
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.
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
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'
Si desea crear un directorio en Windows:
- nombre: Crear estructura de directorio
win_file:
ruta: C: \ Temp \ folder \ subfolder>
state: directory
Tenemos módulos disponibles para crear directorio, archivo en ansible
Ejemplo
- name: Creates directory
file:
path: /src/www
state: directory
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
---
- 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
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.
Sifile
el archivo NO se creará si no existe, consulte el módulo [copia] o [plantilla] si desea ese comportamiento.
Silink
, el enlace simbólico será creado o cambiado. Usohard
para enlaces duros.
Siabsent
, los directorios se eliminarán de forma recursiva y los archivos o enlaces simbólicos se desvincularán.Tenga en cuenta que
file
no 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 quetouch
funciona desde la línea de comandos).
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 !!!
La forma más fácil de crear un directorio en Ansible.
O
Desea otorgar privilegios de sudo a ese directorio.
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)
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
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
Tú quieres el file
módulo. Para crear un directorio, debe especificar la opción state: directory
:
- name: Creates directory
file:
path: /src/www
state: directory
state=directory
, todos los subdirectorios inmediatos se crearán si no existen, ya que 1.7 se crearán con los permisos proporcionados.