O Ansible é uma ferramenta de automação amplamente utilizada que pode gerenciar centenas de nós de uma só vez. O Ansible possui 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 lineinfile do Ansible.
O módulo lineinfile do Ansible é um módulo que realiza várias ações em uma única linha em um arquivo, como substituir uma linha, atualizar uma linha ou adicionar uma linha específica.
Neste tutorial, você aprenderá o que é o módulo lineinfile do Ansible, 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 lineinfile do Ansible. Se você deseja acompanhar, certifique-se de ter o seguinte em vigor:
- Um host controlador do Ansible – Este tutorial utilizará 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ê deseja seguir exatamente o tutorial.
Modificando um Arquivo de Texto com o módulo Ansible lineinfile.
Vamos começar este tutorial executando o módulo Ansible lineinfile usando 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 conectar-se à máquina web e passar um argumento (-a
), que é o comando a ser executado.
Neste exemplo, o módulo lineinfile atualiza a entrada do 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 atualiza com127.0.0.1 myapache
especificado no parâmetroline
.- –become 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.
Depois de executar o comando, você deve 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 pode ser visto abaixo, a entrada do 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 várias 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.
Supondo que você já esteja logado no 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 de playbook YAML. Este playbook possui várias tarefas que utilizam o módulo lineinfile
do Ansible 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; caso contrário, 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 MaxKeepAliveRequests
para 1000 e KeepAliveTimeout
para 100.
3. Adiciona a linha com o texto “Hello This is my Apache Page” 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, significando que o host remoto não estava no estado adequado e foi modificado para executar o comando. Para aquela TAREFA que tem o status OK, mostra que não requerem alterações.
4. Em seguida, faça login remoto no host usando seu cliente SSH favorito.
5. Finalmente, 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 se o MaxKeepAliveRequests
e o KeepAliveTimeout
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 de seus playbooks.
Quais outros casos de uso você vê que se beneficiariam do módulo lineinfile do Ansible?