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