12_Visão geral do modelo Ansible Jinja2, como usar o Jinja2, precauções para usar o Jinja2, uso do modelo jinja2, sintaxe de uso variável, sintaxe de julgamento lógico do modelo Jinja2, sintaxe de loop do modelo Jinja2, comentários, etc.

15. Ansible Jinja2 template 15.1
Visão geral do jinja2 template
15.1.1 O que é jinja2 template 15.1.2 Qual é a relação entre jinja2
e Ansible
15.2.1 Variável sintaxe de uso 15.2.2 Jinja2 template lógica de julgamento sintaxe 15.2. 3. Sintaxe do loop do modelo Jinja2 15.2.4. Comentários 15.3. Teste do modelo Jinja2 15.3.2. Exemplo 2







15. Modelo Ansible Jinja2

Repostado de: https://blog.csdn.net/weixin_48981270/article/details/117756914

15.1. Visão geral dos modelos jinja2

15.1.1. O que é modelo jinja2

jinja2 é um mecanismo de modelo completo para Python

15.1.2. Qual é a relação entre jinja2 e Ansible

Ansible geralmente usa modelos jinja2 para modificar os arquivos de configuração de hosts gerenciados, etc. jinja2 também é usado em saltstack.
Se o redis estiver instalado em 100 hosts, o endereço de escuta de cada redis é diferente. Como resolver isso?

15.1.3. Como o Ansible usa o Jinja2

Usar o template jinja2 do Ansible é usar o módulo template, que é o mesmo que o módulo copy, que copia o arquivo para o host remoto, mas a diferença é que o módulo template pode pegar as variáveis ​​do arquivo, enquanto a cópia está intacta Copie o conteúdo do arquivo no passado. Quando enviamos o script de backup do rsync antes, queríamos alterar o nome da variável no script para o nome do host. Se usássemos o módulo de cópia, enviaríamos { { ansible_fqdn }}, inalterado. Se usássemos o modelo, seria se tornaria o nome da CPU correspondente.

15.1.4. Precauções para usar Jinja2 no Ansible

O Ansible permite que julgamentos condicionais e loops sejam usados ​​em templates jinja2, mas não em playbooks.
Observação: nem todo administrador precisa desse recurso, mas às vezes o módulo jinja2 pode melhorar muito a eficiência.

15.2. Uso do modelo Ansible jinja2

15.2.1. Sintaxe de uso de variáveis

{ { EXPR }} Valor da variável de saída, gerará o valor da variável personalizada ou fatos
1. O arquivo Playbook usa o modelo de modelo
2. As variáveis ​​no arquivo de modelo usam { { name }}, como { { PORT }} ou usam fatos

15.2.2. Sintaxe de julgamento lógico do modelo Jinja2

#shell中的判断语法
[root@m01 project]# vim pd.sh 
#!/bin/bash
age=$1
if [ $age -lt 18 ];then
    echo "小姐姐"
else
    echo "大妈"
fi

#Jinja2模板判断语法
#条件判断
{
    
    % if EXPR %}
{
    
    % elif EXPR %}
{
    
    % else %}
{
    
    % endif %}

15.2.3. Sintaxe de loop do modelo Jinja2

#shell中的循环
[root@m01 project]# vim xh.sh
#!/bin/bash
for i in `seq 10`
  do
      echo $i
  done
  
#Jinja2模板循环语法
#循环表达式
{
    
    % for i in EXPR %}
{
    
    % endfor %}

15.2.4. Notas

# shell中的注释
使用#写在注释内容最前面

#Jinja2模板注释语法
{
    
    # COMMENT #}

15.3. Teste de modelo Jinja2

15.3.1. Exemplo 1

1) Configure o modelo jinja2 para o arquivo de login

[root@node2 workspace]# cat motd.j2
Welcome to {
    
    {
    
     ansible_fqdn }}
This system total mem is : {
    
    {
    
     ansible_memtotal_mb }} MB
This system free mem is: {
    
    {
    
     ansible_memfree_mb }} MB

2) Escreva o manual

[root@node2 workspace]# cat motd.yml
- hosts: all
  tasks:
    - name: Config motd
      template:
        src: ./motd.j2
        dest: /etc/motd

3) Executar e visualizar

[root@node2 workspace]# ansible-playbook motd.yml

PLAY [all] *******************************************************************************************************

TASK [Gathering Facts] *******************************************************************************************
ok: [172.17.0.5]
ok: [172.17.03]
ok: [172.17.0.6]
ok: [172.17.0.4]
ok: [172.17.0.3]
ok: [172.17.06]
ok: [172.17.04]
ok: [172.17.05]

TASK [Config motd] ***********************************************************************************************
changed: [172.17.0.5]
changed: [172.17.0.4]
changed: [172.17.0.3]
changed: [172.17.0.6]
changed: [172.17.03]
changed: [172.17.04]
changed: [172.17.05]
changed: [172.17.06]

PLAY RECAP *******************************************************************************************************
172.17.0.3                 : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
172.17.0.4                 : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
172.17.0.5                 : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
172.17.0.6                 : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
172.17.03                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
172.17.04                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
172.17.05                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
172.17.06                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

[root@node2 workspace]# cat /etc/motd
Welcome to node2
This system total mem is : 12560 MB
This system free mem is: 10638 MB
[root@node2 workspace]#

15.3.2. Exemplo 2

1) Configure o arquivo de configuração do banco de dados

#正常的配置文件
[root@m01 project]# vim conf/upstream.conf
upstream web {
    
    
    server 172.16.1.7;
    server 172.16.1.8;
}

server {
    
    
    listen 80;
    server_name linux.wp.com;

    location / {
    
    
        proxy_pass http://web;
        proxy_set_header Host $http_host;
    }
}

#不正经的配置文件
[root@m01 project]# vim conf/upstream.j2
upstream {
    
    {
    
     server_name }} {
    
    
{
    
    % for i in range(7,20) %}
    server {
    
    {
    
     net_ip }}.{
    
    {
    
     i }};
{
    
    % endfor %}
}

server {
    
    
    listen {
    
    {
    
     web_port }};
    server_name {
    
    {
    
     server_name }};

    location / {
    
    
        proxy_pass http://{
    
    {
    
     server_name }};
        proxy_set_header Host $http_host;
    }
}

2) Arquivo de variável de configuração

[root@m01 project]# vim upstream_vars.yml
server_name: linux.wp.com
web_port: 80
net_ip: 172.16.1

3) Escreva o roteiro

[root@m01 project]# vim lb.yml
- hosts: lb_server
  vars_files: ./upstream_vars.yml
  tasks:
    - name: Config Nginx Upstream
      template:
        src: conf/upstream.j2
        dest: /etc/nginx/conf.d/upstream.conf
      notify: restert_upstream

    - name: Start Nginx Server
      systemd:
        name: nginx
        state: started

  handlers:
    - name: restert_upstream
      systemd:
        name: nginx
        state: restarted

4) Execute e teste

[root@m01 project]# ansible-playbook lb.yml

Guess you like

Origin blog.csdn.net/toto1297488504/article/details/132235411