jinja2渲染使用

1、安装jinja2模块

pip3 install jinja2


2、定义模板

说明:变量必须是小写,大写有的情况无法替换,亲测;模板必须是j2结尾或者jinja2默认支持的html格式

本实例的文档是不全的,只是截取了其中一段作为例子进行演示

本实例模板中定义了两个需要被渲染的变量

{{ cluster_cidr }}   { iface }}

cat >kube-flannel.yml.template.j2 <<EOF
kind: ConfigMap
apiVersion: v1
metadata:
  name: kube-flannel-cfg
  namespace: kube-system
  labels:
    tier: node
    app: flannel
data:
  net-conf.json: |
    {
      "Network": "{{ cluster_cidr }}",
      "Backend": {
        "Type": "vxlan"
      }
    }
---
apiVersion: extensions/v1beta1
kind: DaemonSet
spec:
  template:
    metadata:
      labels:
        tier: node
        app: flannel

        - /opt/bin/flanneld
        args:
        - --ip-masq
        - --kube-subnet-mgr
        - --iface={{ iface }}
        resources:
EOF


3、定义脚本

cat >kube-flannel.yml.py<<EOF
#!/usr/bin/python
# -*- codinig: UTF-8 -*-

import os
import jinja2

#定义模板函数,这个必须有,没有模板函数是无法实现替换的

def render(tpl_path,**kwargs):
    path,filename=os.path.split(tpl_path)
    return jinja2.Environment(
        loader=jinja2.FileSystemLoader(path or './')
    ).get_template(filename).render(**kwargs)


def test_simple():
    iface="ens33"
    cluster_cidr="172.30.0.0/16"
    result=render('/rubbish/kube-flannel.yml.template.j2',**locals())
    print(result)
if __name__ == '__main__':
    test_simple() 
EOF

4、执行脚本

[root@test1 rubbish]# python kube-flannel.yml.py
kind: ConfigMap
apiVersion: v1
metadata:
  name: kube-flannel-cfg
  namespace: kube-system
  labels:
    tier: node
    app: flannel
data:
  net-conf.json: |
    {
      "Network": "172.30.0.0/16",
      "Backend": {
        "Type": "vxlan"
      }
    }
---
apiVersion: extensions/v1beta1
kind: DaemonSet
spec:
  template:
    metadata:
      labels:
        tier: node
        app: flannel

        - /opt/bin/flanneld
        args:
        - --ip-masq
        - --kube-subnet-mgr
        - --iface=ens33
        resources:

可以看到模板文件里面的变量都被替换掉了,替换效果如下:

"Network": "172.30.0.0/16",

- --iface=ens33

 

上一篇:K8s 从懵圈到熟练 – 集群网络详解


下一篇:From 虚拟机模板 创建单节点K8S1.14.1的操作步骤