Como criar modelos em Ansible para criar configurações em nós gerenciados - Parte 7

Como criar modelos em Ansible para criar configurações em nós gerenciados - Parte 7

Nisso Parte 7 De Ansible Series, você aprenderá a criar e usar modelos em Ansible para criar configurações personalizadas em nós gerenciados. O modelo em Ansible é uma maneira fácil e amigável de empurrar configurações personalizadas para nós gerenciados executando sistemas diferentes com edição mínima de arquivos de playbook.

O que é modeador em Ansible?

Para ter uma noção melhor do que é um modelo, vamos considerar um gerente de TI, elaborando um e -mail para convidar seu departamento para uma festa. O email é enviado a cada um dos membros e também os convida a marcar junto com seus cônjuges.

O email foi personalizado de modo que o corpo do email permaneça o mesmo, mas os destinatários e os nomes de seus respectivos cônjuges variam. O email se torna o modelo, enquanto os destinatários e os respectivos cônjuges são variáveis.

Aquele foi um exemplo genérico. Usos Ansible Jinja2 que é um mecanismo de modelos modernos para estruturas Python usadas para gerar conteúdo ou expressões dinâmicas. O modelo é extremamente útil ao criar arquivos de configuração personalizados para vários servidores, mas exclusivos para cada um deles.

Jinja2 usa os aparelhos duplos encaracolados para incluir uma variável que foi definida. Para comentários, use # # e para declarações condicionais usar %… %.

Vamos supor que você tenha um modelo de dados de VLANS em sua rede com sistemas host que você deseja levar para os respectivos VLANS como mostrado.

VLANS: - ID: 10 Nome: LB - ID: 20 Nome: WB_01 - ID: 30 Nome: WB_02 - ID: 40 Nome: DB 

Para renderizar esta configuração, o correspondente Jinja2 modelo chamado VLANS.J2 apareceria como mostrado. Como você pode ver, as variáveis VLAN.eu ia e VLAN.nome foram fechados em aparelhos encaracolados.

vlan vlan.id nome vlan.nome  

Juntando tudo em um manual que coloca diferentes máquinas host, isso apareceria como mostrado:

 - Hosts Tarefas: - Nome: Renderizando o modelo de configuração da VLAN: SRC: VLANS.J2 dest: "VLAN_CONFIGS/Inventory_Hostname.confis " 

Exemplo 1: Configurando servidores da Web em diferentes distros

Neste exemplo, devemos criar índice.html arquivos que exibirão informações sobre o nome de anfitrião e o sistema operacional de 2 servidores da web em execução Centos e Ubuntu.

Configurar

Ubuntu 18 - Endereço IP: 173.82.202.239 CENTOS 7 - Endereço IP: 173.82.115.165 

O Apache WebServer já foi instalado nos dois servidores.

Para o CentOS 7

Página da web do Apache no CentOS 7

Para o Ubuntu 18.04

Página da Web Apache no Ubuntu 18.04

Então, vamos criar um manual test_server.yml como mostrado:

--- - Hosts: todos se tornam: Sim Tarefas: - Nome: Instale o índice.Modelo HTML: SRC: Índice.html.j2 dest:/var/www/html/index.Modo HTML: 0777 

Nosso Jinja O modelo de arquivo é índice.html.J2 que será empurrado para o índice.html Arquivo em cada servidor da web. Lembre -se sempre de colocar a extensão .J2 No final, para significar que é um arquivo Jinja2.

Vamos agora criar o arquivo de modelo índice.html.J2.

  

O nome do host deste servidor da web é Ansible_hostname

Está sendo executado no sistema Ansible_OS_Family

Este modelo é um arquivo html básico onde o Ansible_hostname e Ansible_os_family são variáveis ​​embutidas que serão substituídas pelos respectivos nomes de host e sistemas operacionais dos servidores da web individuais no navegador.

Agora, vamos executar o manual.

# Ansible-playbook test_server.yml 
Crie arquivo de modelo Ansible

Agora vamos recarregar as páginas da web para ambos CENTOS 7 e Ubuntu servidores da web.

Para o CentOS 7

Verifique a página da web do Apache no CentOS 7

Para o Ubuntu 18.04

Verifique a página da Web do Apache no Ubuntu 18.04

Como você pode ver, informações diferentes sobre o nome do host e a família do sistema operacional foram exibidas em cada servidor. E é assim que legal Jinja2 modelagem é!

Filtros:

Às vezes, você pode decidir substituir o valor de uma variável por uma string que aparece de uma certa maneira.

Exemplo 1: Faça com que as cordas apareçam em maiúsculas/minúsculas

Por exemplo, no exemplo anterior, podemos decidir fazer com que as variáveis ​​ansiosas apareçam na maçaneta. Para fazer isso, anexe o valor superior à variável. Dessa forma, o valor na variável é convertido em formato de maiúsculas.

Ansible_hostname | Upper => Centos 7 Ansible_os_family | superior => redhat 
Faça a maçaneta da string

Da mesma forma, você pode converter a saída da string em minúsculas, anexando o argumento inferior.

Ansible_hostname | inferior => centos 7 Ansible_os_family | inferior => redhat 
Faça a corda minúscula

Exemplo 2: substitua uma string por outra

Além disso, você pode substituir uma string por outra.

Por exemplo:

O título do filme é filme_name => O título do filme é Anel.

Para substituir a saída por outra string, use o argumento de substituição como mostrado:

O título do filme é filme_name | substitua ("anel",, assalto ") => O título do filme é Roubo.

Exemplo 3: Listas e define filtros

Para recuperar o menor valor em uma matriz, use o min filtro.

[2, 3, 4, 5, 6, 7] | min => 2 

Da mesma forma, para recuperar o maior número, use o máx filtro.

[2, 3, 4, 5, 6, 7] | max => 7 

Para exibir valores exclusivos, use o exclusivo filtro.

[2, 3, 3, 2, 6, 7] | exclusivo => 2, 3 

Use o aleatório filtrar para obter um número aleatório entre 0 e o valor.

50 | aleatório => algum número aleatório 

ROTAÇÕES:

Assim como nas linguagens de programação, temos rotações em Ansible Jinja2.

Por exemplo, para gerar um arquivo contendo uma lista de números, use o para loop Conforme mostrado no exemplo abaixo:

Exemplo 1:

 % para número em [0, 1, 2, 3, 4, 5, 6, 7] % número  % final para % 

Você também pode combinar o loop for if-else declarações para filtrar e obter certos valores.

Exemplo 2:

% para número em [0, 1, 2, 3, 4, 5, 6, 7]% % se número == 5% number % endif% % endfor% 

E é isso para esta palestra. Junte -se a nós no próximo tópico em que nos aventuraremos a trabalhar com variáveis ​​e fatos Ansible.