Variáveis e Templates

AnsibleBeginner
Pratique Agora

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: 8080 ou server_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/html exige 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.

  1. Templates: criou um arquivo .j2 com {{ placeholders }}.
  2. Variáveis: definiu valores na seção vars do playbook.
  3. Variáveis mágicas: usou inventory_hostname, que é fornecida automaticamente pelo Ansible.
  4. Módulo Template: usou o módulo template para 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.