zoukankan      html  css  js  c++  java
  • Jinja2模板概述

    例子一

    循环语句

    [root@m01 ~]# cat upstream.conf 
    upstream web {
            {% for i in range(1,11) %}
               server 172.16.1.{{ i }}
            {% endfor %}
    }
    
    server {
    	listen 80;
    	server_name wp.gong.com;
            location / {
                    proxy_pass http://web;
                    include proxy_params;
            }
    }
    
    [root@m01 ~]# cat send_conf.yml 
    - hosts: web01
      tasks:
        - name: send jianja mode
          template:
            src: /root/upstream.conf
            dest: /root/upstream.conf
    
    
    
    # 推送生成的效果
    [root@web01 ~]# cat upstream.conf 
    upstream web {
                       server 172.16.1.1
                       server 172.16.1.2
                       server 172.16.1.3
                       server 172.16.1.4
                       server 172.16.1.5
                       server 172.16.1.6
                       server 172.16.1.7
                       server 172.16.1.8
                       server 172.16.1.9
                       server 172.16.1.10
            }
    server {
    	listen 80;
    	server_name wp.gong.com;
            location / {
                    proxy_pass http://web;
                    include proxy_params;
            }
    }
    
    

    jinjia2语法

    变量

    ## 调用变量
    {{ VAR }}		# 会把里面的变量名转换为变量值
    
    ## 模版文件
    在一个文件中有{{ vars }}去调用变量的,使用template复制,会把变量转换为值。
    模版文件中可以调用自己设置的变量。str_www: www
    {{ str_www }}
    
    调用facts变量
    {{ ansible_fqdn }}  # 获取主机名
    {{ ansible_memtotal_mb }}	# 获取主机物理内存大小
    
    ## 逻辑判断语法
    - 注释
      {# 中间的是注释 #}
    在推送的时候,注释不会推送到目标主机
    
    - 循环
      {% for var in data %}
          {{ var }}					# 表示调用变量名,data可以是一个可迭代对象
      {% endfor %}
      
     - 判断的语法
        {% if ansible_fqdn == "db01" %}
            mem=16G
        {% elif ansible_fqdn == "db02" %}
            mem=8G
        {% else %}
            mem=4G
        {% endif %}
    

    案例一

    推送motd

    [root@m01 ~]# cat motd.j2 
    本机内存:{{ ansible_memtotal_mb }}
    剩余内存:{{ ansible_memfree_mb }}
    ip add : {{ ansible_eth0.ipv4.address }}
    
    [root@m01 ~]# cat send_motd.yml 
    - hosts: web01
      tasks:
        - name: send jianja mode
          template:
            src: /root/motd.j2
            dest: /root/motd
            
    [root@web01 ~]# cat motd 
    本机内存:456
    剩余内存:9
    ip add : 10.0.0.7
    
    

    fqdn和hostname的区别: 比如主机名是www.baidu.com;使用ansible_hostname得到的变量值是www;ansible_fqdn 取到的值是www.baidu.com

    案例二

    通过判断来配置不同的域名的nignx配置文件

    [root@m01 ~]# cat upstream.j2 
    upstream web {
            {% for i in range(1,10) %}
               server 172.16.1.{{ i }}
            {% endfor %}
    }
    
    server {
    	listen 80;
            {% if ansible_fqdn == "web01" %}
            	server_name {{ domain_1 }}
          
            {% elif ansible_fqdn == "web02" %}
            	server_name {{ domain_2 }}
            
            {% elif ansible_fqdn == "web03" %}
            	server_name {{ domain_3 }}
            {% endif %}
            location / {
                    proxy_pass http://web;
                    include proxy_params;
            }
    }
    
    [root@m01 ~]# cat send_up_j2.yml 
    - hosts: web_group
      vars:
        - domain_1: www.baidu.com
        - domain_2: www.google.com
        - domain_3: gong.cc.con
      tasks:
        - name: send up_j2 mode
          template:
            src: /root/upstream.j2
            dest: /root/upstream_j2.conf
    
    [root@web01 ~]# cat upstream_j2.conf 
    upstream web {
                       server 172.16.1.1
                       server 172.16.1.2
                       server 172.16.1.3
                       server 172.16.1.4
                       server 172.16.1.5
                       server 172.16.1.6
                       server 172.16.1.7
                       server 172.16.1.8
                       server 172.16.1.9
            }
    
    server {
    	listen 80;
                    	server_name www.baidu.com
          
                    location / {
                    proxy_pass http://web;
                    include proxy_params;
            }
    }
    
    [root@web02 ~]# cat upstream_j2.conf 
    upstream web {
                       server 172.16.1.1
                       server 172.16.1.2
                       server 172.16.1.3
                       server 172.16.1.4
                       server 172.16.1.5
                       server 172.16.1.6
                       server 172.16.1.7
                       server 172.16.1.8
                       server 172.16.1.9
            }
    
    server {
    	listen 80;
                    	server_name www.google.com
            
                    location / {
                    proxy_pass http://web;
                    include proxy_params;
            }
    }
    
    

    案例三

    管理keepalived的配置文件

    判断语法

    [root@lb01 ~]# cat /etc/keepalived/keepalived.conf 
    global_defs { 
        router_id lb01
    }
    
    vrrp_script check_web {
        script "/root/check_web.sh"
        interval 5
    
    vrrp_instance VI_1 {
        state MASTER   
        interface eth0
        virtual_router_id 50
        priority 150
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {                
            10.0.0.3
        }
        track_script {
            check_web
        }   
    }
    
    
    
    [root@lb02 ~]# cat /etc/keepalived/keepalived.conf 
    global_defs {
        router_id lb02
    }
    
    vrrp_instance VI_1 {
        state BACKUP
        interface eth0
        virtual_router_id 50
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            10.0.0.3
        }
    }
    
    
    [root@lb01 ~]# cat /etc/keepalived/keepalived.conf 
    global_defs { 
        router_id lb01
    }
    
    vrrp_script check_web {
        script "/root/check_web.sh"
        interval 5
    
    vrrp_instance VI_1 {
        state MASTER   
        interface eth0
        virtual_router_id 50
        priority 150
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {                
            10.0.0.3
        }
        track_script {
            check_web
        }   
    }
    
    
    {# 把keepalived配置文件改成模板文件 #}
    global_defs {
        router_id {{ ansible_fqdn }}
    }
    
    vrrp_instance VI_1 {
    	{% if ansible_fqdn == 'lb01' %}
        state MASTER
        priority 150
        {% elif ansible_fqdn == 'lb02' %}
        state BACKUP
        priority 100
        {% endif %}
        interface eth0
        virtual_router_id 50
        advert_int 1
        authentication {
            auth_type PASS  
            auth_pass 1111
        }
        virtual_ipaddress {
            10.0.0.3
        }
    }
    

    案例四

    根据实际物理内存的大小来分配给mysql所占内存的百分比

    [root@m01 ~]# vi mysql_mem.j2
    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    innodb_buffer_pool_size = {{ (ansible_memtotal_mb * 0.8) | int }}
    symbolic-links=0
    
    [mysqld_safe]
    log-error=/var/log/mariadb/mariadb.log
    pid-file=/var/run/mariadb/mariadb.pid
    
    !includedir /etc/my.cnf.d
    


    FBI WARNING
    QQ:1402122292 认准原创sheldon 别人叫我晓东
  • 相关阅读:
    【算法】Manacher算法
    python 02 python入门知识
    python 01:计算机基础知识
    表示数值的字符串
    C++ 迭代器(STL迭代器)iterator详解
    构建乘积数组
    C++ 容器(STL容器)
    数组中重复的数字
    把字符串转换成整数
    十大经典排序算法
  • 原文地址:https://www.cnblogs.com/gshelldon/p/13376515.html
Copyright © 2011-2022 走看看