O Ansible é uma ferramenta de automação amplamente utilizada que pode gerenciar centenas de nós de uma só vez. O Ansible tem muitos recursos excelentes, e um deles é sua capacidade de gerenciar uma única linha dentro de um arquivo em nós remotos usando o módulo Ansible lineinfile.
O módulo Ansible lineinfile é um módulo que realiza várias ações em uma única linha de um arquivo, como substituir uma linha, atualizar uma linha ou adicionar uma linha específica.
Neste tutorial, você aprenderá o que é o módulo Ansible lineinfile, como ele funciona e como usá-lo para gerenciar arquivos de texto.
Pré-requisitos
Este post será um tutorial passo a passo sobre o módulo Ansible lineinfile. Se você deseja acompanhar, certifique-se de ter o seguinte em vigor:
- Um host controlador do Ansible – Este tutorial usará o Ansible v2.9.24 em uma máquina Ubuntu 18.04.5 LTS.
- A remote computer to run commands. You’ll need an inventory file set up and one or more hosts already configured to run Ansible command and playbooks on. The remote Linux computer will be called myserver, and the tutorial will use an inventory group called web.
- O Apache já deve estar instalado no computador remoto se você quiser acompanhar exatamente o tutorial.
Modificando um Arquivo de Texto com o módulo lineinfile do Ansible.
Vamos começar este tutorial executando o módulo lineinfile do Ansible usando os comandos ad hoc. Comandos ad hoc são uma maneira rápida de testar ou executar um único comando em um host remoto.
Acesse o seu controlador Ansible e execute o seguinte comando. Este comando utiliza o módulo lineinfile (-m
) para se conectar à máquina web e passa um argumento (-a
) que é o comando a ser executado.
Neste exemplo, o módulo lineinfile atualiza a entrada localhost mapeando o endereço IP 127.0.0.1
com myapache
no arquivo /etc/hosts. Ao mapear o 127.0.0.1
com myapache
, você pode acessar a página de teste do apache localmente em HTTP://myapache:80
path
denota a localização do arquivo.regexp
encontra a expressão regular, se houver, no arquivo e a atualiza com127.0.0.1 myapache
especificada no parâmetroline
.- –become flag permite que você execute o comando como usuário privilegiado.
- O
web
é o grupo de inventário que é uma coleção de todos os servidores. ansible.builtin.lineinfile
ou simplesmente lineinfile é o nome do módulo.
Após executar o comando, você deverá ver uma mensagem ALTERADO que confirma que a linha foi atualizada com sucesso no host remoto.

Acesse o nó remoto usando um cliente SSH e verifique se o arquivo /etc/hosts foi atualizado com o novo valor usando o comando cat
.
Como você pode ver abaixo, a entrada localhost foi atualizada com sucesso para 127.0.0.1 myapache
na máquina remota.

Modificando Múltiplos Arquivos de Texto Dentro de um Playbook
Trabalhar com um único comando ad hoc para gerenciar linhas em uma máquina remota pode ser viável, mas será difícil se você tiver linhas em vários arquivos ou múltiplas linhas em um arquivo para gerenciar. Em vez de usar comandos ad hoc, considere usar o módulo lineinfile do Ansible dentro do playbook usando o comando ansible-playbook.
Agora, vamos aprender como usar o módulo lineinfile do Ansible dentro do playbook e modificar algumas linhas.
Assumindo que você já está conectado ao host controlador do Ansible:
1. Crie um diretório chamado ansible_lineinfile_module_demo em seu diretório home. Este diretório conterá o playbook que você usará para invocar o módulo lineinfile.
2. Crie outro arquivo chamado my_playbook.yml no diretório ~/ansible_lineinfile_module_demo e cole o seguinte conteúdo do playbook YAML. Este playbook tem várias tarefas que usam o módulo Ansible lineinfile
para gerenciar linhas de diferentes arquivos de configuração para o Apache na máquina remota.
O playbook abaixo contém as seguintes tarefas:
1. Verifica se ADMIN
está presente no arquivo /etc/sudoers; se não estiver, a tarefa o adiciona.
2. Garante que o Apache padrão esteja ouvindo na porta 8080 dentro do arquivo /etc/apache2/ports.conf; se encontrar qualquer outra porta, o módulo lineinfile a atualiza para a porta 8080
. Da mesma forma, no arquivo /etc/apache2/apache2.conf, ele atualiza o MaxKeepAliveRequests
para 1000 e o KeepAliveTimeout
para 100.
3. Adiciona a linha com o texto “Olá, esta é a minha página do Apache” no final da página index.html
no servidor remoto sob o diretório /var/www/html.
Os playbooks do Ansible são escritos em YAML. Para saber mais sobre YAML, clique aqui
3. Agora, invoque o playbook e execute as tarefas usando o comando ansible-playbook
para adicionar ou atualizar todas as linhas definidas no playbook no host remoto.

Abaixo, você pode ver que a TAREFA tem um status de alterado, o que significa que o host remoto não estava no estado adequado e foi modificado para executar o comando. Para aquela TAREFA que tem status OK, mostra que elas não requerem nenhuma alteração.
4. Em seguida, faça login SSH no host remoto usando seu cliente SSH favorito.
5. Por fim, verifique se todas as linhas definidas no meu_playbook.yml foram atualizadas ou adicionadas no host remoto usando o comando cat
.
A captura de tela abaixo confirma que o admin
já está adicionado no arquivo sudoers.

Novamente, a captura de tela abaixo confirma que o Apache está ouvindo na Porta 8080
por padrão.

Por fim, verifique o MaxKeepAliveRequests
e o KeepAliveTimeout
se foram atualizados para 1000 e 100, respectivamente.

MaxKeepAliveRequests
and KeepAliveTimeout
in the config file Conclusão
O módulo lineinfile do Ansible é uma ótima maneira de modificar arquivos de texto em hosts remotos. O módulo oferece uma ótima maneira de adicionar, remover e modificar linhas em arquivos de texto dentro dos seus playbooks.
Quais outros casos de uso você vê que se beneficiariam do módulo lineinfile do Ansible?