Como posso copiar mais de um único arquivo em nós remotos por Ansible em uma tarefa?
Eu tentei duplicar a linha do módulo de cópia em minha tarefa para definir arquivos, mas ela apenas copia o primeiro arquivo.
Você pode usar o with_fileglob
loop para isso:
- copy:
src: "{{ item }}"
dest: /etc/fooapp/
owner: root
mode: 600
with_fileglob:
- /playbooks/files/fooapp/*
/roles/db/files
mas não consigo fazê-lo funcionar com este método. Eu tentei,with_fileglob: - /roles/db/file/*
mas não consegui resolver o caminhofonte
dest
conjunto como variável?{ src: 'containerizers', dest: {{ containerizers }} }
.{ src: '{{ source.var }}', dest: '{{ dest.var }}' }
Você pode usar with_together para esta finalidade:
fonte
Se você precisar de mais de um local, precisará de mais de uma tarefa. Uma tarefa de cópia pode copiar apenas de um local (incluindo vários arquivos) para outro no nó.
fonte
Desde o Ansible 2.5, as
with_*
construções estão obsoletas e aloop
sintaxe deve ser usada. Um exemplo prático simples:fonte
fonte
find
módulo só funciona para ansible 2.x, mas não para ansible 1.xstdout_lines
no valor de retorno, mas não é aplicável para ofind
módulo. Tem apenasfiles
,examined
ematched
como valores de retorno. Espero que ajude outrosfind
só parece olhar para o sistema remoto, não permitindo pegar nada do nó de gerenciamento. Essas respostas, usandowith_fileglob
, parecem ser mais adequadas: stackoverflow.com/a/42290160/272387 , stackoverflow.com/a/36720342/272387 .Ou você pode usar with_items:
fonte
fonte
Você pode percorrer a variável com a lista de diretórios:
fonte
Use o seguinte código-fonte para copiar vários arquivos em sua máquina cliente.
Nota:
Se você estiver passando vários caminhos usando a variável, então
src: "/ root / {{item}}"
Se você está passando o caminho usando uma variável para itens diferentes, então
src: "/ root / {{item.source_path}}"
fonte
copy
módulo é uma ferramenta errada para copiar muitos arquivos e / ou estrutura de diretório, use osynchronize
módulo que usarsync
como backend. Lembre-se de que ele requerrsync
instalação no controlador e no host de destino. É realmente poderoso, verifique a documentação do ansible .Exemplo - copie arquivos do
build
diretório (com subdiretórios) do controlador para o/var/www/html
diretório no host de destino:fonte