jinja2模板 (动态管理nginx配置文件)

使用ansible的template模块 渲染jinja2模板中的内容,结果以文件形式生成在远程主机指定目录,如下;

---
- hosts: web
  gather_facts: no
  vars:
    hello: ansible

  tasks:
    - template: src=f.j2 dest=/opt2/j2.conf
  • template :模块名
  • src : 本机jinja2文件
  • dest :渲染j2内容生成文件的路径 (远端主机)

例子:现在先在本机创建个jinjia2的文件f.j2 (自己写内容,注意语法{% xxxx %})
内容:定义一个数组,遍历打印出来

[root@server-www xunhuan]# cat f.j2 
{% set list=['l', 'o', 'v', 'e'] %}
{% for i in list %}
   {{i}}
{%endfor%}

执行 ansible-playbook jinja2.yml
结果:


image.png

执行成功,我们再去远程主机的opt2目录下去看,已经生成了j2.conf这个文件,并且吧f.j2的结果渲染出来了。


image.png
  • 可以if判断
[root@server-www xunhuan]# cat f.j2 
{% set list=['l', 'o', 'v', 'e'] %}
{% for i in list %}
   {% if i == 'l' %}
     -> love-l
  # {% elif i == 'e' %}
  #   -> love -e
   {% endif %}
{%endfor%}
  • 打印变量 + 遍历字典 (for key,value in dict.iteritems() 遍历字典和python是一样的分别赋值key与value)
{{hello}}  --在yml文件中的vars指定的变量。
#遍历字典
{% set dict={'zhangsan':25,'lisi':26,'wangwu':27} %}
{% for key,value in dict.iteritems() %}
  {{key}} -> {{value}}
{%endfor%}

执行一下ansible-playbook jinjia2.yml

image.png

动态管理nginx配置文件。

如我们要新增站点,或者频繁变成配置文件中的内容,可利用jinja2模板渲染nginx配置文件、
创建yml文件 (http_port2 是负载均衡real_server代理端口变量)

[root@server-www xunhuan]# cat manger_nginx.yml 
--- 
- hosts: web
  gather_facts: no
  vars:
    h: ansible
    http_port: 80
    http_port2: 8011
    server_name: www.123.com
  tasks:
    - name: copy nginx file 
      template: src=add.j2 dest=/etc/nginx/conf.d/add.conf
      notify: reload nginx 
    - name: touch test page
      shell: echo "hello {{h}}" >/var/www/index.html
  handlers:
    - name: reload nginx 
      service: name=nginx state=reloaded

上面yml文件引用了add.j2 这个jinja2类型文件,并渲染内容到目标机器的/etc/nginx/conf.d下
vim add.j2

{% set list=[111, 112] %}
upstream ansible_lunxun {
    {%for i in list%}
        server 192.168.1.{{i}}:{{http_port2}};
    {%endfor%}

}

server {
        listen {{http_port}};
        server_name {{server_name}};
        root /var/www;
    location / {
            proxy_pass http://ansible_lunxun;
    }
}

运行:


image.png

渲染一个负载均衡的配置文件,运行剧本后,目标机器的/etc/nginx/conf.d下已经生成了add.conf
192.168.111 和 112 的负载均衡文件add .conf 和 站点配置文件8011.conf


image.png
image.png

访问域名:


image.png

总结:

通过剧本运行yml的内容,在yml中我们又引用.j2 格式的jinja2文件。在这个文件中,我们写出想要渲染到远端机器的内容。可以用for ,if 列表list , 字典dict,就像py脚本一样。最终把执行内容渲染出来在远端机器生成文件。
j2的语法:

for循环  {% for i in  %}  {{i}}  {%endfor%}
if判断    {% if xxx %}  {{i}}  {%endif%}
列表list {{%  set list=['1', '2', '3'] %}}
字典dict {{% set dict={'zhangsan':25,'lisi':26,'wangwu':27}  %}}
遍历字典:
              {% for key,value in dict.iteritems() %}
                          {{key}} -> {{value}}
              {%endfor%}
引用变量:{{vars_name}}

你可能感兴趣的:(jinja2模板 (动态管理nginx配置文件))