Saltstack入门到精通教程(五):Jinja详解

jinja做为一个模板语言,不仅使得saltstack中的sls文件能根据pillar和grains的值进行动态变化,同时因为引入了逻辑判断,使得原本十分呆板的普通配置文件也可以变得灵活起来。这一节我们通过实际操作来一起看看jinja如何玩耍。

我是T型人小付,一位坚持终身学习的互联网从业者。喜欢我的博客欢迎在csdn上关注我,如果有问题欢迎在底下的评论区交流,谢谢。

测试环境准备

这里还是坚持前几节一直用的官方vagrant演示环境,我们在这个基础上来搭建一个简单的jinja测试环境,用来实际感受下jinja的语法。

首先准备一个pillar文件用来存放jinja中会使用的变量,创建/srv/pillar/jinja_test.sls内容如下

name: james
age: 28

然后创建一个空文件/srv/salt/files/jinja_test.txt用来进行jinja模板的编辑

根据默认情况下的file_roots配置,/srv/salt/在file.managed中可以简单表示为salt://

最后创建一个state文件/srv/salt/jinja_test.sls来将上面的jinja模板同步到minion

/home/vagrant/jinja_test.txt:
  file.managed:
    - source: salt://files/jinja_test.txt
    - template: jinja

这样一个简单的测试环境就搭建好了,来将上面定义的pillar变量用jinja模板表示看看。新开一个文本文件jinja_test.txt,编辑如下

name: {
  { pillar['name'] | capitalize() }}
age: {
  { pillar['age'] }}

简单测试,语法不懂也没关系

然后在salt master上把pillar下发下去

root@saltmaster:/home/vagrant# salt * saltutil.refresh_pillar
minion1:
    True
minion2:
    True

之后对minion2去套用刚才的state文件

root@saltmaster:/srv/salt/files# salt 'minion2' state.apply jinja_test

成功了的话就可以在minion2上看到新建的/home/vagrant/jinja_test.txt文件,内容如下

vagrant@minion2:~$ cat jinja_test.txt
name: James
age: 28

如果成功显示了变量的内容。并且James开头是大写的J,那就表示测试环境配置成功了,可以开始进行下面具体的学习和实际操作了。后面我们用jinja语法去编辑jinja_test.txt文件然后下发到minion就可以看到实际效果了。

jinja语法

{ { … }}

在jinja中,两个大括号中间用来放会被打印为具体结果的表达式(Expressions)。常规的表达式包含以下几个部分:

  • python数据类型

例如整型数,浮点型数,字符串,列表,元组,字典等等

在测试环境的/srv/pillar/jinja_test.sls中增加下面两个变量

lucky number: [2,7,16]
pets: {'cat':'chouchou','dog':'haha'}

同时修改jinja模板jinja_test.txt添加下列内容

loved cat: {
  { pillar['pets']['cat'] }}
3rd lucky number: {
  { pillar['lucky number'][2] }}

然后对minion2更新文件

root@saltmaster:/home/vagrant# salt 'minion2' state.apply jinja_test

之后会发现目标文件多了两行

loved cat: chouchou
3rd lucky number: 16
  • 运算符号

例如常规的加减乘除 + - * /,以及余数%和求幂**

在上述的模板文件中添加

{
  { 1+4 }}
{
  { 2**4 }}
{
  { 6%5 }}

目标文件会多出三行

5
16
1

python中可以用加号 + 去链接多个字符串,在jinja里面虽然也可以,但是推荐用专门的波浪线 ~ 去链接字符串

  • 比较符号和逻辑符号

就和python中一样,==/!=/>/>=/</<=/and/or/not。这里就不举例子了。需要注意的是这里只是纯粹的比较符号和逻辑符号,如果是和if语句一起使用的话就不能用两个大括号了,而要用到后面提到的百分号。

  • 一些特殊符号

in符号 - 和python中一样,判断元素是否在集合中。例如下面的表达式会返回True

{
  { 'apple' in ['apple','banana','cherry'] }}

~符号 - 连接多个字符串。例如

{
  { 'life'~' is '~'wonderful' }}

会返回life is wonderful

|符号 - 管道符号和shell里面一样,用来对前面的输出做进一步处理,在jinja中叫filter。可以查看官方的内建filter函数。举几个例子,例如

{
  { '
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值