Ansible

Como usar o módulo de modelo Ansible

Como usar o módulo de modelo Ansible
The Ansible modelo O módulo é usado principalmente para copiar arquivos do cliente Ansible (onde o Ansible está instalado) para os hosts Ansible (gerenciados por Ansible). A vantagem de usar o modelo módulo, em vez do cópia de módulo, é que o Ansible modelo módulo pode usar a linguagem de modelos Jinja2. Jinja2 é uma poderosa linguagem de modelagem Python por meio da qual você pode gerar arquivos de configuração, páginas da web, etc. Você também pode usar variáveis ​​de fatos, loops e condições de Ansible em seus modelos Jinja2.

Este artigo mostrará como usar o Ansible modelo módulo e alguns princípios básicos da linguagem de modelos Jinja2. Então vamos começar!

Pré-requisitos


Se você quiser experimentar os exemplos deste artigo:

1) Você deve ter o Ansible instalado em seu computador.

2) Você deve ter pelo menos um host Ubuntu / Debian ou um host CentOS / RHEL 8 configurado para automação Ansible.

Existem muitos artigos sobre LinuxHint dedicados à instalação do Ansible e configuração de hosts para automação do Ansible. Você também pode verificar isso, se necessário.

Configurando um Diretório de Projetos Ansible

Antes de prosseguirmos, é uma boa ideia criar uma estrutura de diretório do projeto, apenas para manter as coisas um pouco organizadas.

Para criar um diretório de projeto template-demo / e todos os subdiretórios necessários (em seu diretório de trabalho atual), execute o seguinte comando:

$ mkdir -pv template-demo / playbooks / templates

Depois que o diretório do projeto for criado, navegue até o diretório do projeto, da seguinte maneira:

$ cd template-demo /

Criar uma hospedeiros arquivo de inventário, como segue:

hosts $ nano

Em seguida, adicione seu IP de host ou nome DNS (vm1.nodekite.com e vm2.nodekite.com) no arquivo de inventário.

Depois de concluir esta etapa, salve o arquivo pressionando + X, seguido pela Y e .

Crie um arquivo de configuração Ansible no diretório do projeto, da seguinte maneira:

$ nano ansible.cfg

Em seguida, digite as seguintes linhas no ansible.cfg Arquivo.

Depois de terminar esta etapa, salve o arquivo pressionando + X, seguido pela Y e .

Neste ponto, o diretório do projeto deve ser o seguinte:

$ tree

Como você pode ver, os hosts Ansible também são acessíveis. Então, podemos passar para a próxima seção deste artigo.

$ ansible all -u ansible -m ping

Noções básicas do módulo de modelo Ansible

O modelo módulo de Ansible aceita as mesmas opções que o cópia de módulo de Ansible.

Ansible Comum modelo opções de módulo:

src - O caminho do arquivo de modelo Jinja2 em seu computador, que será analisado pela linguagem de modelos Jinja2 e copiado para os hosts remotos.
dest - O caminho de destino nos hosts remotos para os quais o arquivo será copiado.
proprietário - O proprietário do arquivo nos hosts remotos.
grupo - O grupo do arquivo nos hosts remotos.
modo - O modo de permissão de arquivo nos hosts remotos.

Vamos ver um exemplo.

Primeiro, crie um novo manual do Ansible copy_file_template1.yaml no manuais / diretório, da seguinte forma:

$ nano playbooks / copy_file_template1.yaml

Em seguida, digite as seguintes linhas no copy_file_template1.yaml livro de cantadas.

- hosts: todos
usuário: ansible
tarefas:
- nome: Copiar índice.arquivo html para servidor
modelo:
src: index.jinja2
dest: / home / ansible / index.html
proprietário: ansible
grupo: ansible
modo: 0644

Este manual irá copiar o índice.jinja2 arquivo do manuais / modelos / diretório (relativo ao diretório do seu projeto) para os hosts remotos usando o Ansible modelo módulo.

Depois de concluir esta etapa, salve o arquivo pressionando + X, seguido pela Y e .

Crie o índice.jinja2 arquivo de modelo no manuais / modelos diretório, da seguinte forma:

$ nano playbooks / templates / index.jinja2

Digite as seguintes linhas no índice.jinja2 arquivo de modelo:




Demonstração do modelo Jinja2


Bem-vindo ao Linuxhint!



Este é apenas um arquivo HTML simples. Eu não usei nenhuma sintaxe Jinja2 extravagante aqui.

Depois de concluir esta etapa, salve o arquivo pressionando + X, seguido pela Y e .

Execute o manual copy_file_template1.yaml do seguinte modo:

$ ansible-playbook playbooks / copy_file_template1.yaml

O manual deve ser executado com sucesso.

Como você pode ver, o índice.jinja2 modelo foi renderizado usando a linguagem de modelos Jinja2. O conteúdo processado deve ser copiado para o índice.html arquivo dos hosts remotos.

Impressão de variáveis ​​no modelo Jinja2

Você pode usar fatos, variáveis ​​e variáveis ​​definidas pelo usuário Ansible em seus modelos Jinja2.

Em seu modelo Jinja2, você pode imprimir o valor de uma variável usando o nome variável sintaxe. Se a variável for um objeto, você pode imprimir propriedades individuais do objeto usando o objectVariable.nome da propriedade sintaxe.

No exemplo a seguir, imprimiremos o data propriedade do ansible_date_time objeto em nosso índice.jinja2 modelo.

$ ansible all -u ansible -m setup | egrep --color 'data | hora'

Primeiro, abra o índice.jinja2 arquivo de modelo com o editor de texto nano, da seguinte maneira:

$ nano playbooks / templates / index.jinja2

Adicione a seguinte linha ao índice.jinja2 arquivo de modelo:

Página gerada em ansible_date_time.data

O final índice.jinja2 o arquivo deve se parecer com o mostrado na captura de tela abaixo.

Depois de concluir esta etapa, salve o arquivo pressionando + X, seguido pela Y e .

Execute o manual copy_file_template1.yaml do seguinte modo:

$ ansible-playbook playbooks / copy_file_template1.yaml

Como você pode ver, o índice.jinja2 modelo foi processado pela linguagem de modelos Jinja2 e substituiu o ansible_date_time.data variável com a data em AAAA-MM-DD formato. A saída foi então copiada para o índice.html arquivo no host remoto.

Instrução if condicional no modelo Jinja2

A linguagem de modelos Jinja2 suporta condicional E se afirmações. Você pode verificar certas variáveis ​​antes de imprimir qualquer coisa usando o E se demonstração.

O Jinja2 E se a sintaxe é a seguinte:

% se condição%
Faça algo se a condição for verdadeira
% fim se %

Vamos ver um exemplo do Jinja2 E se demonstração.

Nesta seção, demonstrarei o Jinja2 E se declaração usando o ansible_distribution fatos variáveis.

$ ansible all -u ansible -m setup | egrep --color 'dist'

Primeiro, abra o índice.jinja2 Modelo Jinja2 com o editor de texto nano, da seguinte maneira:

$ nano playbooks / templates / index.jinja2

Em seguida, adicione as seguintes linhas no índice.jinja2 arquivo de modelo:

% if ansible_distribution == "Debian"%

Você está executando o Debian Linux


% fim se %

Aqui, eu verifiquei se ansible_distribution é Debian. Se for, então imprima a string

Você está executando o Debian Linux

. Caso contrário, não imprima.

finalmente, o índice.jinja2 o arquivo de modelo deve se parecer com o mostrado na captura de tela abaixo.

Depois de editar o arquivo, salve-o pressionando + X, seguido pela Y e .

Agora, execute o manual copy_file_template1.yaml do seguinte modo:

$ ansible-playbook playbooks / copy_file_template1.yaml

Como você pode ver, no meu host remoto Debian, o índice.html arquivo tem a linha

Você está executando o Debian Linux

. No entanto, no meu host remoto CentOS, a linha não está presente. Então, o Jinja2 E se condição está funcionando.

Condicional: instrução if-else no modelo Jinja2

A linguagem de modelos Jinja2 suporta condicional if-else afirmações. Você pode imprimir uma coisa se a condição corresponder e outra se não usar o if-else demonstração.

O Jinja2 if-else a sintaxe é a seguinte:

% se condição%
Faça algo se a condição for verdadeira
% senão %
Faça algo se a condição for falsa
% fim se %

Vamos ver um exemplo do Jinja2 if-else demonstração.

Primeiro, abra o índice.jinja2 Modelo Jinja2 com o editor de texto nano, da seguinte maneira:

$ nano playbooks / templates / index.jinja2

Em seguida, adicione as seguintes linhas no índice.jinja2 arquivo de modelo:

% if ansible_distribution == "Debian"%

Você está executando o Debian Linux


% senão %

Você não está executando o Debian Linux


% fim se %

Aqui, eu verifiquei se ansible_distribution é Debian. Se for, então imprima a string

Você está executando o Debian Linux

. Caso contrário, imprima

Você não está executando o Debian Linux

.

finalmente, o índice.jinja2 o arquivo de modelo deve se parecer com o mostrado na captura de tela abaixo.

Depois de editar o arquivo, salve-o pressionando + X, seguido pela Y e .

Execute o manual copy_file_template1.yaml do seguinte modo:

$ ansible-playbook playbooks / copy_file_template1.yaml

Como você pode ver, no meu host remoto Debian, o índice.html arquivo tem a linha

Você está executando o Debian Linux

. Mas no meu host remoto CentOS, o índice.html arquivo tem a linha

Você não está executando o Debian Linux

. Então, o Jinja2 if-else condição está funcionando.

Condicional: declaração if-elif no modelo Jinja2

A linguagem de modelos Jinja2 suporta condicional if-elif afirmações.

O Jinja2 if-elif a sintaxe é a seguinte:

% se condição1%
Faça algo se a condição1 for verdadeira
% condição elif2%
Faça algo se a condição 2 for verdadeira
% condição elif3%
Faça algo se a condição 3 for verdadeira

% condição elifN%
Faça algo se a condição N for verdadeira
% senão %
Faça algo se nenhuma das condições for verdadeira
% fim se %

Aqui o % senão % seção é opcional, mas está lá se você precisar.

Vamos ver um exemplo do Jinja2 if-elif demonstração.

Primeiro, abra o índice.jinja2 Modelo Jinja2 com o editor de texto nano, da seguinte maneira:

$ nano playbooks / templates / index.jinja2

Em seguida, adicione as seguintes linhas no índice.jinja2 arquivo de modelo:

% if ansible_distribution == "Debian"%

Você está executando o Debian Linux


% elif ansible_distribution == "CentOS"%

Você está executando CentOS Linux


% senão %

Seu sistema operacional não é compatível


% fim se %

Aqui, eu verifiquei se ansible_distribution é Debian. Se for, então imprima a string

Você está executando o Debian Linux

.

Eu também verifiquei se ansible_distribution é CentOS. Se for, então imprima a string

Você está executando CentOS Linux

.

Caso contrário, imprima

Seu sistema operacional não é compatível

.

finalmente, o índice.jinja2 o arquivo de modelo deve se parecer com o mostrado na captura de tela abaixo.

Depois de editar o arquivo, salve-o pressionando + X, seguido pela Y e .

Execute o manual copy_file_template1.yaml do seguinte modo:

$ ansible-playbook playbooks / copy_file_template1.yaml

Como você pode ver, no meu host remoto Debian, o índice.html arquivo tem a linha

Você está executando o Debian Linux

.

No meu host remoto CentOS, o índice.html arquivo tem a linha

Você está executando CentOS Linux

.

Se eu tivesse outro host remoto executando um sistema operacional diferente do Debian ou CentOS, ele teria a linha

Seu sistema operacional não é compatível

no índice.html Arquivo.

Então, o Jinja2 if-elif condição está funcionando.

Loops no modelo Jinja2

Você também pode imprimir matrizes e objetos usando loops no Jinja2.
O Jinja2 para a sintaxe do loop é a seguinte:

% for variableName em arrayName%
Faça algo com variableName
% endfor%

Aqui, em cada iteração da matriz arrayName, um dos elementos da matriz (começando do início da matriz) é atribuído ao nome variável variável. Você pode fazer algo com esta variável dentro do loop.

Vamos ver como você pode imprimir elementos de array em seu modelo Jinja2 no exemplo a seguir.

Primeiro, abra o copy_file_template1.yaml Manual do Ansible com o editor de texto nano, da seguinte maneira:

$ nano playbooks / copy_file_template1.yaml

Em seguida, adicione as seguintes linhas no copy_file_template1.yaml arquivo de manual:

vars:
menus:
- Casa
- Produtos
- Sobre nós
- Contate-Nos

Aqui, eu adicionei um cardápios matriz no copy_file_template1.yaml livro de cantadas. Em seguida, vou imprimir os elementos da matriz usando um loop em meu índice.jinja2 Arquivo de modelo Jinja2.

finalmente, o copy_file_template1.yaml o arquivo do manual deve ser semelhante ao mostrado na imagem abaixo.

Depois de editar o arquivo, salve-o pressionando + X, seguido pela Y e .

Agora, abra o índice.jinja2 Modelo Jinja2 com o editor de texto nano, da seguinte maneira:

$ nano playbooks / templates / index.jinja2

Adicione as seguintes linhas no índice.jinja2 arquivo de modelo:

Aqui, estou gerando uma barra de navegação HTML simples usando um Jinja2 para ciclo. O loop itera através do cardápios array (que eu defini no copy_file_template1.yaml playbook) elementos e gera um cardápio item em cada iteração.

finalmente, o índice.jinja2 o arquivo de modelo deve se parecer com o mostrado na captura de tela abaixo.

Depois de editar o arquivo, salve-o pressionando + X, seguido pela Y e .

Execute o manual copy_file_template1.yaml do seguinte modo:

$ ansible-playbook playbooks / copy_file_template1.yaml

Como você pode ver, o Jinja2 para loop gerou uma barra de navegação HTML (no índice.html Arquivo).

Você também pode acessar uma variedade de objetos em seu modelo Jinja2.

Vamos ver outro exemplo.

Primeiro, abra o copy_file_template1.yaml Manual do Ansible com o editor de texto nano, da seguinte maneira:

$ nano playbooks / copy_file_template1.yaml

Em seguida, adicione as seguintes linhas no copy_file_template1.yaml arquivo de manual:

vars:
menus:
- nome: casa
link: / home
- nome: produtos
link: / produtos
- nome: Sobre nós
link: / sobre nós
- nome: Contate-nos
link: / contact-us

Aqui, eu adicionei um cardápios array de objetos no copy_file_template1.yaml livro de cantadas. Cada um desses objetos tem duas propriedades, um nome propriedade e um link propriedade.

finalmente, o copy_file_template1.yaml o arquivo do manual deve ser semelhante ao mostrado na imagem abaixo.

Depois de editar o arquivo, salve-o pressionando + X, seguido pela Y e .

Abra o índice.jinja2 Modelo Jinja2 com o editor de texto nano, da seguinte maneira:

$ nano playbooks / templates / index.jinja2

Em seguida, adicione as seguintes linhas no índice.jinja2 arquivo de modelo:

Tudo o que você vê aqui é igual ao do exemplo anterior. A única diferença é que estou imprimindo as propriedades do objeto nome (usando cardápio.nome) e link (usando cardápio.link) no meu índice.jinja2 Modelo Jinja2.

finalmente, o índice.jinja2 o arquivo de modelo deve se parecer com o mostrado na captura de tela abaixo.

Depois de editar o arquivo, salve-o pressionando + X, seguido pela Y e .

Agora, execute o manual copy_file_template1.yaml do seguinte modo:

$ ansible-playbook playbooks / copy_file_template1.yaml

Como você pode ver, o Jinja2 para loop gerou uma barra de navegação HTML (no índice.html arquivo) a partir de uma série de objetos.

Qual é o próximo?

Neste artigo, mostrei como usar o Ansible modelo módulo e descreveu alguns dos fundamentos da linguagem de modelos Jinja2. Visite o site oficial do Jinja2 para saber mais sobre a linguagem de modelos do Jinja2.

O botão do meio do mouse não funciona no Windows 10
O botão do meio do mouse ajuda você a percorrer longas páginas da web e telas com muitos dados. Se isso parar, você vai acabar usando o teclado para r...
Como alterar os botões esquerdo e direito do mouse no PC com Windows 10
É normal que todos os dispositivos de mouse de computador sejam ergonomicamente projetados para usuários destros. Mas existem dispositivos de mouse di...
Emular cliques do mouse passando o mouse usando o mouse sem cliques no Windows 10
Usar um mouse ou teclado na postura errada de uso excessivo pode resultar em muitos problemas de saúde, incluindo tensão, síndrome do túnel do carpo e...