Existe uma maneira fácil de implantar uma pasta cheia de pasta .j2 de modelo em uma caixa Linux, usando o mesmo nome que o modelo, mas sem a extensão .j2, em vez de usar o módulo de modelo para cada arquivo?
Agora eu tenho uma longa 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
sempre opera a partir defiles/
, você pode obter modelos com../templates/mytemplate/*
. stackoverflow.com/a/27407566/1695680regex_replace
deve corresponder no final da linha\.j2$
para os casos em que o padrão pode existir dentro do nome do arquivo.Michael DeHaan (criador do Ansible) fez um post no CoderWall que fala sobre assuntos muito semelhantes. Você pode ajustá-lo e expandi-lo de acordo com suas necessidades (como permissões e propriedade). Parte relevante da postagem está aqui:
Isso pode ser simplificado usando "
with_items
" e uma únicanotify
instrução. Se alguma das tarefas for alterada, o serviço será notificado exatamente da mesma maneira que precisa reiniciar no final da execução do manual.Observe que, como temos tarefas que levam mais de um argumento único, não apenas dizemos "
item
" natemplate:
linha ' ', mas usamoswith_items
com uma variável de hash (dicionário). Você também pode mantê-lo um pouco mais curto usando listas, se quiser. Esta é uma preferência estilística:É claro que também poderíamos definir a lista em que você estava navegando em outro arquivo, como um "
groupvars/webservers
" arquivo para definir todas as variáveis necessárias para owebservers
grupo ou um arquivo YAML carregado davarsfiles
diretiva " " dentro do manual. Veja como isso pode ser resolvido se o fizermos.fonte
template: src=templates/{{item}}.j2 dest=/etc/splat/{{item}}.conf
e, em seguida, usar uma lista simples de itens:with_items: - foo - bar
template: src={{item.src}} dest={{item.dest}}
(ou seja,${var}
mas não melhor{{var}}
) #A resposta de Russel funciona, mas precisa ser aprimorada
Os abetos de todos os $ precisam ir, pois estava errado na regex no regex_replace. Em segundo lugar, todos os arquivos devem estar no diretório de arquivos, e não no diretório de modelos
fonte
Eu escrevi um plug-in de pesquisa de arquivos de filas que pode ajudar com ações em árvores de arquivos.
Você pode repetir os arquivos em uma árvore de arquivos e, com base nas propriedades do arquivo, executar ações (por exemplo, modelo ou cópia). Como o caminho relativo é retornado, você pode recriar a árvore de arquivos no (s) sistema (s) de destino com facilidade.
Isso cria playbooks mais legíveis.
fonte
O comando abaixo trabalhou para mim fazer uma pesquisa recursiva para arquivos j2 em modelos e movê-lo para o destino. Espero que ajude alguém que procura uma cópia recursiva de modelos ao destino.
fonte
Existe a possibilidade de pegar a lista de arquivos reais do diretório automaticamente e iterá-los depois.
fonte
print0
, comofind
, e depois dividir\u0000
.