El siguiente código solo elimina el primer archivo que se encuentra dentro del directorio web. Quiero eliminar todos los archivos y carpetas dentro del directorio web y conservar el directorio web. ¿Cómo puedo hacer eso?
- name: remove web dir contents
file: path='/home/mydata/web/{{ item }}' state=absent
with_fileglob:
- /home/mydata/web/*
Nota: He intentado rm -rf
usar el comando y el shell, pero no funcionan. Quizás los estoy usando mal.
Cualquier ayuda en la dirección correcta será apreciada.
Estoy usando ansible 2.1.0.0
Respuestas:
El siguiente código eliminará todo el contenido de
artifact_path
Nota : esto también eliminará el directorio.
fuente
rm -rf /
when: artifact_path is defined and artifact_path != ""
Usando el módulo de shell ( también idempotente ):
Solución más limpia si no le importa la fecha de creación y el propietario / permisos:
fuente
shell
porcommand
y funcionaElimine el directorio (básicamente una copia de https://stackoverflow.com/a/38201611/1695680 ), Ansible realiza esta operación
rmtree
bajo el capó.Si no tiene el lujo de eliminar todo el directorio y volver a crearlo, puede escanearlo en busca de archivos (y directorios) y eliminarlos uno por uno. Lo que llevará un tiempo. Probablemente quiera asegurarse de tener
[ssh_connection]\npipelining = True
en su ansible.cfg encendido.fuente
state=empty
Realmente no me gustó la solución rm, también ansible te da advertencias sobre el uso de rm. Así que aquí es cómo hacerlo sin la necesidad de rm y sin advertencias ansibles.
fuente: http://www.mydailytutorials.com/ansible-delete-multiple-files-directories-ansible/
fuente
prueba el siguiente comando, debería funcionar
fuente
with_items: "{{ contents.stdout_lines }}"
ls
'output para obtener nombres de archivos porque no imprime correctamente nombres de archivos con caracteres especiales como líneas nuevas.Creé una implementación general revisada y segura de todos los comentarios y sugerencias:
fuente
register
paraplugin_dir_deleted
, ¿verdad?owner: dir_to_delete.stat.pw_name, group: dir_to_delete.stat.gr_name mode: dir_to_delete.stat.mode
pero me falla con mi versión actual de Ansible :(Usando file glob también funcionará. Hay algún error de sintaxis en el código que publicó. He modificado y probado esto debería funcionar.
fuente
with_fileglob
funciona solo en máquinas locales, no remotas; no es verdad?Si bien Ansible aún está debatiendo implementar
state = empty
https://github.com/ansible/ansible-modules-core/issues/902Sin embargo, tenga en cuenta que, con la sincronización, debería poder sincronizar sus archivos (con eliminar) de todos modos.
fuente
Eso es lo que se me ocurre:
Primero, estamos obteniendo una lista de directorios con
find
, estableciendofile_type
aany
, para que no nos perdamos los directorios y enlaces anidadoshidden
ayes
, para no omitir archivos ocultosrecurse
ayes
, ya que no sólo es innecesario, pero puede aumentar el tiempo de ejecución.Luego, revisamos esa lista con el
file
módulo. Su salida es un poco detallada, porloop_control.label
lo que nos ayudará a limitar la salida (encontré este consejo aquí ).Pero encontré que la solución anterior era algo lenta, ya que itera a través del contenido, así que seguí con:
stat
Eso fue suficiente para mí, pero también puede agregar
attributes
, si lo desea.fuente
Hay un problema abierto con respecto a esto.
Por ahora, la solución funciona para mí: crear una carpeta vacía localmente y sincronizarla con la remota.
Aquí hay un libro de jugadas de muestra:
fuente
He escrito un módulo ansible personalizado para limpiar archivos basado en múltiples filtros como antigüedad, marca de tiempo, patrones globales, etc.
También es compatible con versiones anteriores ansibles. Se puede encontrar aquí .
Aquí hay un ejemplo:
fuente
Quiero asegurarme de que el comando find solo elimine todo dentro del directorio y deje el directorio intacto porque en mi caso el directorio es un sistema de archivos. El sistema generará un error al intentar eliminar un sistema de archivos, pero esa no es una buena opción. Estoy usando la opción de shell porque esa es la única opción de trabajo que encontré hasta ahora para esta pregunta.
Lo que hice:
Edite el archivo de hosts para incluir algunas variables:
Y crea un libro de jugadas:
Esto eliminará todos los archivos y directorios en el directorio / sistema de archivos variable COGNOS_HOME. La opción "-mindepth 1" asegura que no se toque el directorio actual.
fuente
Solo una pequeña y limpia plantilla de copiar y pegar de ThorSummoners responde, si está usando Ansible> = 2.3 (la distinción entre archivos y directorios ya no es necesaria).
fuente
Suponiendo que siempre estés en Linux, prueba el
find
cmd.Esto debería borrar archivos / carpetas / ocultos debajo de
/home/mydata/web
fuente
fuente
Este es mi ejemplo.
iniciar rsyslog
fuente
A continuación funcionó para mí
fuente