¿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_fileglob
siempre opera desdefiles/
, puede acceder a plantillas con../templates/mytemplate/*
. stackoverflow.com/a/27407566/1695680regex_replace
debe 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 solanotify
declaració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_items
con 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 elwebservers
grupo, o un archivo YAML cargado desde lavarsfiles
directiva " " 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 - bar
template: 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
.