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ê deseja experimentar os exemplos neste 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 Ansible Automation.
Existem muitos artigos sobre Linuxhint dedicados à instalação do Ansible e configurando hosts para Ansible Automation. Você pode verificar isso também, se necessário.
Configurando um diretório de projeto Ansible
Antes de avançarmos, é uma boa ideia criar uma estrutura de diretório de projeto, apenas para manter as coisas um pouco organizadas.
Para criar um diretório de projeto modelo-demão/ E todos os subdiretos necessários (em seu diretório de trabalho atual), execute o seguinte comando:
$ mkdir -pv modelo -demodos/playbooks/modelos
Depois que o diretório do projeto for criado, navegue até o diretório do projeto, como segue:
$ cd
Criar uma anfitriões Arquivo de inventário, como segue:
$ nano hosts
Em seguida, adicione o nome IP do host ou DNS (VM1.NodeKite.com e VM2.NodeKite.com) no arquivo de inventário.
Depois de terminar esta etapa, salve o arquivo pressionando + X, seguido pela Y e .
Crie um arquivo de configuração Ansible no diretório do projeto, como segue:
$ 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 parecer o seguinte:
$ árvore
Como você pode ver, os anfitriões 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
Básico do módulo de modelo Ansible
O modelo O módulo de Ansible aceita as mesmas opções que o cópia de módulo de Ansible.
Ansible comum modelo Opções do módulo:
src - O caminho do arquivo de modelo Jinja2 no seu computador, que será analisado pela linguagem Jinja2 de modelos e copiado para os hosts remotos.
dest - O caminho de destino nos hosts remotos aos 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 do arquivo nos hosts remotos.
Vamos ver um exemplo.
Primeiro, crie um novo manual Ansible copy_file_template1.Yaml no Playbooks/ Diretório, como segue:
$ nano playbooks/copy_file_template1.YamlEm seguida, digite as seguintes linhas no copy_file_template1.Yaml livro de cantadas.
- Hosts: todosEste manual vai copiar o índice.Jinja2 arquivo do Playbooks/modelos/ diretório (em relação ao seu diretório de projeto) para os hosts remotos usando o Ansible modelo módulo.
Depois de terminar esta etapa, salve o arquivo pressionando + X, seguido pela Y e .
Crie o índice.Jinja2 arquivo de modelo no Playbooks/modelos Diretório, como segue:
$ nano Playbooks/modelos/índice.Jinja2
Digite as seguintes linhas no índice.Jinja2 Arquivo de modelo:
Este é apenas um arquivo html simples. Eu não usei nenhuma sintaxe de Jinja2 sofisticada aqui.
Depois de terminar 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.YamlO manual deve correr com sucesso.
Como você pode ver, o índice.Jinja2 Modelo foi renderizado usando a linguagem de modelos Jinja2. O conteúdo renderizado deve ser copiado para o índice.html arquivo dos hosts remotos.
Variáveis de impressão no modelo Jinja2
Você pode usar fatos, variáveis e variáveis definidas pelo usuário em seus modelos Jinja2.
No 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 de 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 -DATA DA EM CORA |
Primeiro, abra o índice.Jinja2 Arquivo de modelo com o editor de texto Nano, como segue:
$ nano Playbooks/modelos/índice.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 procurar como mostrado na captura de tela abaixo.
Depois de terminar 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.YamlComo você pode ver, o índice.Jinja2 modelo foi processado pela linguagem Jinja2 de modelagem e substituiu o Ansible_date_time.data variável com a data em AAAA-MM-DD formatar. A saída foi então copiada para o índice.html arquivo no host remoto.
Modelo Condicional IF no Jinja2
A linguagem de modelos Jinja2 suporta condicional se declarações. Você pode verificar certas variáveis antes de imprimir qualquer coisa usando o se declaração.
O Jinja2 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 se declaração.
Nesta seção, vou demonstrar o Jinja2 se declaração usando o Ansible_distribution Variável de fatos.
$ Ansible All -u Ansible -M Setup | egrep -cor 'dist'
Primeiro, abra o índice.Jinja2 Jinja2 modelo com o editor de texto Nano, como segue:
$ nano Playbooks/modelos/índice.Jinja2
Em seguida, adicione as seguintes linhas no índice.Jinja2 Arquivo de modelo:
% se Ansible_distribution == "Debian" %Você está executando o Debian Linux
Aqui, eu verifiquei se Ansible_distribution é Debian. Se for, então imprima a string Você está executando o Debian Linux
finalmente, o índice.Jinja2 O arquivo de modelo deve procurar como mostrado na captura de tela abaixo.
Depois de editar o arquivo, salve o arquivo pressionando + X, seguido pela Y e .
Agora, execute o manual copy_file_template1.Yaml do seguinte modo:
$ Ansible-Playbook Playbooks/copy_file_template1.YamlComo você pode ver, no meu host remoto do Debian, o índice.html O arquivo tem a linha Você está executando o Debian Linux
Condicional: declaração IF-Else no modelo Jinja2
A linguagem de modelos Jinja2 suporta condicional if-else declarações. Você pode imprimir uma coisa se a condição corresponde e imprimir outra coisa se não usar o if-else declaração.
O Jinja2 if-else A sintaxe é a seguinte:
% se condição %Vamos ver um exemplo do Jinja2 if-else declaração.
Primeiro, abra o índice.Jinja2 Jinja2 modelo com o editor de texto Nano, como segue:
$ nano Playbooks/modelos/índice.Jinja2
Em seguida, adicione as seguintes linhas no índice.Jinja2 Arquivo de modelo:
% se Ansible_distribution == "Debian" %Você está executando o Debian Linux
Você não está executando o debian linux
Aqui, eu verifiquei se Ansible_distribution é Debian. Se for, então imprima a string Você está executando o Debian Linux Você não está executando o debian linux
finalmente, o índice.Jinja2 O arquivo de modelo deve procurar como mostrado na captura de tela abaixo.
Depois de editar o arquivo, 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.YamlComo você pode ver, no meu host remoto do Debian, o índice.html O arquivo tem a linha Você está executando o Debian Linux Você não está executando o debian linux
Condicional: declaração IF-Elif no modelo Jinja2
A linguagem de modelos Jinja2 suporta condicional if-elif declarações.
O Jinja2 if-elif A sintaxe é a seguinte:
% se condicionado1 %Aqui o % outro % a seção é opcional, mas está lá se você precisar.
Vamos ver um exemplo do Jinja2 if-elif declaração.
Primeiro, abra o índice.Jinja2 Jinja2 modelo com o editor de texto Nano, como segue:
$ nano Playbooks/modelos/índice.Jinja2
Em seguida, adicione as seguintes linhas no índice.Jinja2 Arquivo de modelo:
% se Ansible_distribution == "Debian" %Você está executando o Debian Linux
Você está executando o CentOS Linux
Seu sistema operacional não é suportado
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 o CentOS Linux
Caso contrário, imprima Seu sistema operacional não é suportado
finalmente, o índice.Jinja2 O arquivo de modelo deve procurar como mostrado na captura de tela abaixo.
Depois de editar o arquivo, 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.YamlComo você pode ver, no meu host remoto do Debian, o índice.html O arquivo tem a linha Você está executando o Debian Linux
No meu host remoto do CentOS, o índice.html O arquivo tem a linha Você está executando o CentOS Linux
Se eu tivesse outro host remoto executando um sistema operacional que não o Debian ou CentOS, ele teria a linha Seu sistema operacional não é suportado
Então, o Jinja2 if-elif condição está funcionando.
Loops in Jinja2 modelo
Você também pode imprimir matrizes e objetos usando loops em Jinja2.
O Jinja2 para A sintaxe do loop é a seguinte:
% para variatlebleName em ArrayName %
Faça algo com VaribleName
% endfor %
Aqui, em cada iteração da matriz ArrayName, Um dos elementos da matriz (a partir do início da matriz) é atribuído ao nome variável variável. Você pode fazer algo com essa variável dentro do loop.
Vamos ver como você pode imprimir elementos da matriz em seu modelo Jinja2 no exemplo a seguir.
Primeiro, abra o copy_file_template1.Yaml Ansible Playbook com o editor de texto Nano, como segue:
$ nano playbooks/copy_file_template1.YamlEm seguida, adicione as seguintes linhas no copy_file_template1.Yaml Arquivo de Playbook:
VARs:Aqui, eu adicionei um menus Array no copy_file_template1.Yaml livro de cantadas. Em seguida, vou imprimir os elementos da matriz usando um loop no meu índice.Jinja2 Arquivo de modelo Jinja2.
finalmente, o copy_file_template1.Yaml O arquivo de playbook deve procurar como mostrado na captura de tela abaixo.
Depois de editar o arquivo, salve o arquivo pressionando + X, seguido pela Y e .
Agora, abra o índice.Jinja2 Jinja2 modelo com o editor de texto Nano, como segue:
$ nano Playbooks/modelos/índice.Jinja2
Adicione as seguintes linhas no índice.Jinja2 Arquivo de modelo:
Aqui, estou gerando uma simples barra de navegação HTML usando um Jinja2 para laço. O loop itera através do menus Array (que eu defini no copy_file_template1.Playbook Yaml) elementos e gera um cardápio item em cada iteração.
finalmente, o índice.Jinja2 O arquivo de modelo deve procurar como mostrado na captura de tela abaixo.
Depois de editar o arquivo, 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.YamlComo você pode ver, o Jinja2 para O 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 Ansible Playbook com o editor de texto Nano, como segue:
$ nano playbooks/copy_file_template1.YamlEm seguida, adicione as seguintes linhas no copy_file_template1.Yaml Arquivo de Playbook:
VARs:Aqui, eu adicionei um menus matriz de objetos no copy_file_template1.Yaml livro de cantadas. Cada um desses objetos tem duas propriedades, um nome propriedade e a link propriedade.
finalmente, o copy_file_template1.Yaml O arquivo de playbook deve procurar como mostrado na captura de tela abaixo.
Depois de editar o arquivo, salve o arquivo pressionando + X, seguido pela Y e .
Abra o índice.Jinja2 Jinja2 modelo com o editor de texto Nano, como segue:
$ nano Playbooks/modelos/índice.Jinja2Em seguida, adicione as seguintes linhas no índice.Jinja2 Arquivo de modelo:
Tudo o que você vê aqui é o mesmo que no 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 procurar como mostrado na captura de tela abaixo.
Depois de editar o arquivo, salve o arquivo pressionando + X, seguido pela Y e .
Agora, execute o manual copy_file_template1.Yaml do seguinte modo:
$ Ansible-Playbook Playbooks/copy_file_template1.YamlComo você pode ver, o Jinja2 para O loop gerou uma barra de navegação HTML (no índice.html arquivo) de uma variedade de objetos.
Qual é o próximo?
Neste artigo, mostrei como usar o Ansible modelo módulo e descreveu alguns dos princípios básicos da linguagem de modelos Jinja2. Visite o site oficial do Jinja2 para saber mais sobre a linguagem de modelos Jinja2.