说明:通过jinja2渲染后只能打印出来效果,目前无法保存 例1:渲染 .j2 文件 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 实例2:渲染.txt文件 1、安装jinja2模块 pip3 install jinja2 2、定义模板 说明:变量必须是小写,大写有的情况无法替换,亲测;模板必须是j2结尾或者jinja2默认支持的html格式 本实例的文档是不全的,只是截取了其中一段作为例子进行演示 本实例模板中定义了一个需要被渲染的变量 { iface }} cat >a.txt <<EOF
hello "{{ iface }}"
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/a.txt',**locals())
print(result)
if __name__ == '__main__':
test_simple()
EOF 4、执行脚本 [root@test1 rubbish]# python kube-flannel.yml.py
hello "ens33" 可以看到模板文件里面的变量都被替换掉了