Da mesma forma que existe um módulo lineinfile
para adicionar uma linha em um arquivo, existe uma maneira de adicionar várias linhas?
Eu não quero usar um modelo porque você precisa fornecer o arquivo inteiro. Eu só quero adicionar algo a um arquivo existente sem necessariamente saber o que o arquivo já contém, para que um modelo não seja uma opção.
template
, mas usarlineinfile
é um antipadrão . Também é uma forte bandeira vermelha que você "não sabe o que está no arquivo", o que leva a um risco substancial de falhas desconhecidas.Respostas:
Você pode usar um loop para fazer isso. Aqui está um exemplo usando um
with_items
loop:fonte
msg: this module requires key=value arguments
. O exemplo dado tem isso correto - simplesmente não segui o exemplo.Você pode tentar usar
blockinfile
.Você pode fazer algo como
fonte
blockinfile
módulo funcionou maravilhosamente toda vez que eu escolhi usá-lo. Eu amo especialmente o comportamento intuitivo das opçõesinsertafter
/insertbefore
.blockinfile
?Se você precisar configurar um conjunto de propriedades exclusivas = linhas de valor, recomendo um loop mais conciso. Por exemplo:
Usando um ditado conforme sugerido por Alix Axel e adicionando a remoção automática de entradas comentadas correspondentes,
fonte
Aqui está uma versão sem ruído da solução que deve ser usada com os itens:
Para cada item, se o item existir em fruits.txt, nenhuma ação será tomada.
Se o item não existir, ele será anexado ao final do arquivo.
Mole-mole.
fonte
Não é o ideal, mas você pode fazer várias chamadas
lineinfile
. Usando issoinsert_after
, você pode obter o resultado desejado:fonte
Consegui fazer isso usando
\n
o parâmetro line.É especialmente útil se o arquivo puder ser validado e a adição de uma única linha gera um arquivo inválido.
No meu caso, eu estava adicionando
AuthorizedKeysCommand
eAuthorizedKeysCommandUser
ao sshd_config , com o seguinte comando:Adicionar apenas uma das opções gera um arquivo que falha na validação.
fonte
Para adicionar várias linhas, você pode usar o arquivo de bloco:
Para adicionar uma linha, você pode usar lininfile:
fonte
Para adicionar várias linhas, você pode usar o
lineinfile
módulowith_items
incluindo também a variávelvars
aqui para simplificar :)fonte