Exercício de Workshop - Templates

Leia isto em outros idiomas:
uk Inglês, japan Japonês, brazil Português do Brasil, france Francês, Español Espanhol.

Índice

Objetivo

O Exercício 1.5 introduz o templating Jinja2 dentro do Ansible, um recurso poderoso para gerar arquivos dinâmicos a partir de templates. Você aprenderá como criar templates que incorporam dados específicos do host, permitindo a criação de arquivos de configuração personalizados para cada host gerenciado.

Guia

Passo 1 - Introdução ao Templating Jinja2

O Ansible utiliza o Jinja2, uma linguagem de templating amplamente usada para Python, permitindo a geração de conteúdo dinâmico dentro dos arquivos. Essa capacidade é particularmente útil para configurar arquivos que devem variar de host para host.

Passo 2 - Criando Seu Primeiro Template

Os templates terminam com a extensão .j2 e misturam conteúdo estático com espaços reservados dinâmicos envolvidos em ``.

No exemplo a seguir, vamos criar um template para a Mensagem do Dia (MOTD) que inclui informações dinâmicas do host.

Configurando o Diretório de Templates:

Certifique-se de que um diretório de templates exista dentro do seu diretório lab_inventory para organizar seus templates.

mkdir -p ~/lab_inventory/templates

Desenvolvendo o Template MOTD:

Crie um arquivo chamado motd.j2 no diretório de templates com o seguinte conteúdo:

Bem-vindo ao .
SO:  
Arquitetura: 

Este template exibe dinamicamente o nome do host, a distribuição do sistema operacional, a versão e a arquitetura de cada host gerenciado.

Passo 3 - Implementando o Template com um Playbook

Utilize o módulo ansible.builtin.template em um playbook para distribuir e renderizar o template em seus hosts gerenciados.

Modifique o playbook system_setup.yml com o seguinte conteúdo:

---
- name: Configuração Básica do Sistema
  hosts: all
  become: true
  vars:
    user_name: 'Roger'
    package_name: httpd
  tasks:
    - name: Atualizar todos os pacotes relacionados à segurança
      ansible.builtin.package:
        name: '*'
        state: latest
        security: true
        update_only: true
    - name: Criar um novo usuário
      ansible.builtin.user:
        name: ""
        state: present
        create_home: true
    - name: Instalar o Apache em servidores web
      ansible.builtin.package:
        name: ""
        state: present
      when: inventory_hostname in groups['web']
    - name: Instalar firewalld
      ansible.builtin.package:
        name: firewalld
        state: present
      when: inventory_hostname in groups['web']
    - name: Garantir que o firewalld esteja em execução
      ansible.builtin.service:
        name: firewalld
        state: started
        enabled: true
      when: inventory_hostname in groups['web']
    - name: Permitir tráfego HTTP em servidores web
      ansible.posix.firewalld:
        service: http
        permanent: true
        state: enabled
      when: inventory_hostname in groups['web']
      notify: Recarregar Firewall
    - name: Atualizar MOTD do modelo Jinja2
      ansible.builtin.template:
        src: templates/motd.j2
        dest: /etc/motd
  handlers:
    - name: Recarregar Firewall
      ansible.builtin.service:
        name: firewalld
        state: reloaded

O módulo ansible.builtin.template pega o template motd.j2 e gera um arquivo /etc/motd em cada host, preenchendo os espaços reservados do template com os fatos reais do host.

Passo 4 - Executando o Playbook

Execute o playbook para aplicar seu MOTD personalizado em todos os hosts gerenciados:

[student@ansible-1 lab_inventory]$ ansible-navigator run system_setup.yml -m stdout
PLAY [Configuração Básica do Sistema] *****************************************
.
.
.

TASK [Atualizar MOTD a partir do Template Jinja2] *****************************
changed: [node1]
changed: [node2]
changed: [node3]
changed: [ansible-1]

RECAP ************************************************************************
ansible-1                  : ok=6    changed=1    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0
node1                      : ok=8    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
node2                      : ok=8    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
node3                      : ok=8    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Verifique as alterações fazendo SSH para o nó, e você deverá ver a mensagem do dia:

[rhel@control ~]$ ssh node1

Welcome to node1.
OS: RedHat 8.7
Architecture: x86_64
Register this system with Red Hat Insights: insights-client --register
Create an account or view all your systems at https://red.ht/insights-dashboard
Last login: Mon Jan 29 16:30:31 2024 from 10.5.1.29

Saia da sessão SSH para retornar ao seu nó de controle antes de continuar para o próximo exercício:

[rhel@node1 ~]$ exit
logout
Connection to node1 closed.
[rhel@control ~]$

Navegação
Exercício anterior - Próximo exercício

Clique aqui para voltar ao workshop de Ansible para Red Hat Enterprise Linux