Como criar modelos em Ansible para criar configurações em nós gerenciados - Parte 7
- 919
- 121
- Mrs. Christopher Okuneva
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 7Para o Ubuntu 18.04
Página da Web Apache no Ubuntu 18.04Entã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.ymlCrie 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 7Para o Ubuntu 18.04
Verifique a página da Web do Apache no Ubuntu 18.04Como 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 => redhatFaç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 => redhatFaç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.
- « Como instalar o nginx no CentOS 8
- Como usar módulos Ansible para tarefas de administração do sistema - Parte 6 »