企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
Jinja2是一个强大的Python模板引擎,可以使用代码动态生成内容创建文件内容。 1、jinja2变量 变量: {{ }} 表达式: {% %} 案例1: [admin@master study]$ cat var.sls {% set var="hello world" %} test_var: cmd.run: - name: echo " var is {{ var }}" [admin@master study]$ sudo salt 'node2*' state.sls study.var node2.51yuki.cn: ---------- ID: test_var Function: cmd.run Name: echo " var is hello world" Result: True ** Comment: Command "echo " var is hello world"" run** Started: 13:56:10.085738 Duration: 8.349 ms Changes: ---------- pid: 5461 retcode: 0 stderr: stdout: var is hello world Summary ------------ Succeeded: 1 (changed=1) Failed: 0 ------------ Total states run: 1 总结: 可以定义多种数据类型,比如字符串、列表、字典类型等 2、循环控制语句(For) 在循环内不能有break和continue ![](https://box.kancloud.cn/f756f031700cc5d62d3e323f108ca7aa_634x257.png) 3、条件判断语句(if) 当您的环境同时存在centos和ubuntu时,apache的软件名的名字就不同,我们可以通过Jinja的逻辑语法来指定 ![](https://box.kancloud.cn/bba8174a95a30216ed81bd126dfe7eb2_415x138.png) 4、实际使用 [admin@master init]$ sudo vim dns.sls /etc/resolv.conf: file.managed: - source: salt://init/files/resolv.conf - user: root - group: root - mode: 644 - backup: minion - template: jinja - defaults:-----------------这个和template同级 DNS_SERVER: 10.1.10.6 (变量: 值) 编写模板文件,引用刚刚创建的变量 [admin@master init]$ sudo vim files/resolv.conf # Generated by NetworkManager nameserver {{ DNS_SERVER }} (注意这里填写的变量,一定不能填写错误,要是在sls文件中定义了的变量) 测试: [admin@master init]$ sudo salt 'node2*' state.sls init.dns node2.51yuki.cn: ---------- ID: /etc/resolv.conf Function: file.managed Result: True Comment: File /etc/resolv.conf updated Started: 14:07:17.003602 Duration: 28.738 ms Changes: ---------- diff: --- +++ @@ -1,3 +1,2 @@ # Generated by NetworkManager nameserver 10.1.10.6 -nameserver 202.96.209.133 Summary ------------ Succeeded: 1 (changed=1) Failed: 0 ------------ Total states run: 1 5、jinja变量使用grains {{ grains['fqdn_ip4'] }} 6、jinja变量使用执行模块获取的值 {{ salt['network.hw_addr']('eth0') }} [admin@master init]$ sudo salt '*' network.hw_addr eth0 7、jinja变量使用pillar {{ pillar['apache']['PORT']}}