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