¿Hay una manera fácil de implementar una carpeta llena de carpeta de plantilla .j2 en un cuadro de Linux, usando el mismo nombre que la plantilla, pero sin la extensión .j2, en lugar de usar el módulo de plantilla para cada archivo?
En este momento tengo una larga lista de:
- name: create x template
template:
src=files/x.conf.j2
dest=/tmp/x.conf
owner=root
group=root
mode=0755
notify:
- restart myService

with_fileglobsiempre opera desdefiles/, puede acceder a plantillas con../templates/mytemplate/*. stackoverflow.com/a/27407566/1695680regex_replacedebe coincidir al final de la línea\.j2$para los casos en que el patrón pueda existir dentro del nombre del archivo.Michael DeHaan (creador de Ansible) hizo una publicación en CoderWall que habla sobre un problema muy similar. Puede ajustarlo y expandirlo de acuerdo con sus necesidades (como permisos y propiedad). La parte relevante de la publicación está aquí:
Esto se puede simplificar usando "
with_items" y una solanotifydeclaración. Si alguna de las tareas cambia, se notificará al servicio exactamente de la misma manera que debe reiniciarse al final de la ejecución del libro de jugadas.Tenga en cuenta que, dado que tenemos tareas que requieren más de un argumento único, no solo decimos "
item" en latemplate:línea ' ', sino que lo usamoswith_itemscon una variable hash (diccionario). También puede mantenerlo un poco más corto usando listas, si lo desea. Esta es una preferencia estilística:Por supuesto, también podríamos definir la lista sobre la que estaba caminando en otro archivo, como un "
groupvars/webservers" archivo para definir todas las variables necesarias para elwebserversgrupo, o un archivo YAML cargado desde lavarsfilesdirectiva " " dentro del libro de jugadas. Mira cómo esto puede limpiarse si lo hacemos.fuente
template: src=templates/{{item}}.j2 dest=/etc/splat/{{item}}.conf, y luego usar una lista simple de los objetos:with_items: - foo - bartemplate: src={{item.src}} dest={{item.dest}}(es decir, no${var}más bien{{var}})La respuesta de Russel funciona pero necesita mejorar
Los abetos de todos los $ deben irse, ya que era incorrecto regex en el regex_replace. En segundo lugar, todos los archivos deben estar en el directorio de archivos en lugar del directorio de plantillas
fuente
Escribí un complemento de búsqueda de filetree que puede ayudar con las acciones en los árboles de archivos.
Puede recurrir sobre archivos en un árbol de archivos y, según las propiedades del archivo, realizar acciones (por ejemplo, plantilla o copia). Como se devuelve la ruta relativa, puede volver a crear el árbol de archivos en los sistemas de destino con facilidad.
Hace que los libros de jugadas sean más legibles.
fuente
El siguiente comando me funcionó para hacer una búsqueda recursiva de archivos j2 en plantillas y moverlo al destino. Espero que ayude a alguien que busca una copia recursiva de plantillas en el destino.
fuente
Existe la posibilidad de tomar la lista de archivos reales del directorio automáticamente e iterarlos después.
fuente
print0, comofind, y luego dividirse\u0000.