Introdução
Se você gerencia 100 servidores, não quer que eles sejam exatamente idênticos. Cada servidor pode precisar de um nome de host, endereço IP ou configurações específicas próprios.
O Ansible resolve isso com variáveis e templates.
- Variáveis: espaços reservados para dados, como
port: 8080ouserver_name: "web-01". - Templates: arquivos de texto com “lacunas”. O Ansible preenche essas lacunas com variáveis para criar o arquivo final.
Essa combinação torna a automação reutilizável em vez de repetitiva. Você pode manter uma estrutura geral para vários hosts e alterar os dados inseridos em cada ambiente ou máquina.
O Ansible usa uma linguagem de templates chamada Jinja2. Isso torna a automação mais reutilizável, porque um único template pode gerar arquivos de configuração finais diferentes dependendo das variáveis fornecidas.
E transformá-lo nisto: Welcome to web-01
Neste laboratório, você gerará uma página HTML personalizada para o seu servidor usando variáveis e templates.
Criar um Template
Primeiro, precisamos organizar os arquivos. O Ansible procura templates em uma pasta específica chamada templates.
Essa convenção faz parte da filosofia de design do Ansible. Ele prefere estruturas de diretórios previsíveis para que a automação continue fácil de ler e compartilhar entre as equipes.
Crie este diretório dentro da pasta do projeto:
mkdir -p ~/project/templates
Agora, crie o arquivo de template. Os arquivos de template normalmente terminam com .j2 (de Jinja2).
Abra o nano para criar index.html.j2:
nano ~/project/templates/index.html.j2
Adicione o código HTML a seguir. Observe os colchetes especiais {{ }}. É assim que informamos ao Ansible: “insira uma variável aqui”.
<html>
<head>
<title>{{ page_title }}</title>
</head>
<body>
<h1>Welcome to {{ inventory_hostname }}</h1>
<p>This file was generated by Ansible.</p>
</body>
</html>
Entendendo as variáveis:
{{ page_title }}: esta é uma variável personalizada. Definiremos o valor dela no playbook mais adiante.{{ inventory_hostname }}: esta é uma variável mágica. O Ansible a conhece automaticamente: é o nome do servidor no qual ele está trabalhando no momento — neste caso,localhost.
É útil distinguir esses dois tipos de valores. Algumas variáveis são definidas por você, enquanto outras são fornecidas automaticamente pelo Ansible a partir do inventário e do contexto de execução.
Salve e saia (Ctrl+X, Y, Enter).
Definir Variáveis
Agora precisamos de um playbook para usar este template. No playbook, definiremos o valor da variável personalizada page_title.
Crie um novo arquivo chamado playbook.yml:
nano ~/project/playbook.yml
Comece definindo o play e as variáveis:
---
- name: Deploy Web Page
hosts: localhost
vars:
page_title: "My LabEx Web Server"
tasks:
Entendendo o código:
vars:: nesta seção, você lista as variáveis.page_title: "...": informamos ao Ansible que, sempre que ele encontrar{{ page_title }}em um template, deverá substituí-lo por"My LabEx Web Server".
Mantenha o arquivo aberto para a próxima etapa.
Usar o Módulo Template
Agora adicionaremos a tarefa que realiza o trabalho de fato. Usaremos o módulo template. Esse módulo lê o arquivo .j2, preenche as variáveis e salva o resultado no servidor.
Na prática, o módulo template é usado para implantar muitos arquivos de configuração em ambientes reais. Em vez de copiar um arquivo estático, você gera uma versão específica para cada host a partir de um padrão comum.
Adicione a tarefa ao seu playbook.yml. Tenha cuidado com a indentação!
---
- name: Deploy Web Page
hosts: localhost
become: yes
vars:
page_title: "My LabEx Web Server"
tasks:
- name: Create index.html from template
template:
src: templates/index.html.j2
dest: /var/www/html/index.html
mode: "0644"
Entendendo o código:
template:: o módulo que estamos usando.src: o arquivo de origem, ou seja, o template com os espaços reservados.dest: o destino, onde o arquivo HTML final deverá ser criado.mode: "0644": define as permissões do arquivo para que o servidor web possa lê-lo.become: yes: adicionamos essa opção porque escrever em/var/www/htmlexige permissões de root.
Salve e saia do arquivo.
Implantar e Verificar
Vamos executar o playbook e ver o resultado.
Execute o playbook:
ansible-playbook -i inventory playbook.yml
Se tudo funcionar, você verá o status changed.
Agora, vamos examinar o arquivo final criado pelo Ansible. Esperamos que os espaços reservados tenham desaparecido e sido substituídos por texto real.
Leia o arquivo HTML gerado:
cat /var/www/html/index.html
Resultado esperado:
<html>
<head>
<title>My LabEx Web Server</title>
</head>
<body>
<h1>Welcome to localhost</h1>
<p>This file was generated by Ansible.</p>
</body>
</html>
Veja: {{ page_title }} foi convertido em "My LabEx Web Server" e {{ inventory_hostname }} foi convertido em "localhost".
Resumo
Neste laboratório, você aprendeu a tornar suas configurações dinâmicas.
- Templates: criou um arquivo
.j2com{{ placeholders }}. - Variáveis: definiu valores na seção
varsdo playbook. - Variáveis mágicas: usou
inventory_hostname, que é fornecida automaticamente pelo Ansible. - Módulo Template: usou o módulo
templatepara combinar variáveis e templates em um arquivo de configuração final.
Esse recurso poderoso permite usar um único template para configurar milhares de servidores, cada um com seus próprios detalhes específicos.


