运维实操——saltstack中grains静态数据、pillar动态数据与Jinja模板

saltstack中grains静态数据、pillar动态数据与Jinja模板

1、grains静态数据

Grains是SaltStack的一个组件,存放在SaltStack的minion端。当salt-minion启动时会把收集到的数据静态存放在Grains当中,只有当minion重启时才会进行数据的更新。
应用场景:
(1)信息查询,可用作CMDB,IP、FQDN等信息
(2)在target中使用,匹配minion
(3)在state系统中使用,配置管理模块

执行salt server2 grains.ls,可以看到很多的server2的静态数据列表,包括ip,主机名等等
在这里插入图片描述
执行salt server2 grains.item ipv4,可以专门查看ipv4这一项静态数据。
在这里插入图片描述

在server2端,/etc/salt/minion文件中给server2添加了角色apache
在这里插入图片描述

systemctl restart salt-minion由于修改了配置文件,所以要重启salt-minion,否则数据不会更新,成功给server2添加apache的角色属性
在这里插入图片描述

接下来给server3添加nginx角色,但是不改配置文件,换一种方法,如下,在base中新建一个文件grains,内容如下。
在这里插入图片描述

不需要重启minion端,只需要同步grains模块
在这里插入图片描述
下面自定义grains项,为了方便先创建了子目录_grains,编写grains.py文件
在这里插入图片描述

内容如下,
在这里插入图片描述

同步grains,执行hello可以看到world
在这里插入图片描述
编辑top.sls文件,表示当角色为apache时,去grain中匹配那个主机,然后执行apche模块(即安装apache);当角色为nginx时,去grain中匹配那个主机,然后执行nginx.service模块(即安装nignx并开启)。执行salt ‘*’ state.highstate,可以看到成功给server2安装apache。
在这里插入图片描述
grain也可以如下,加参数使用,显示角色为apache的主机名,显示角色为nginx的主机名
在这里插入图片描述

2、pillar动态数据

pillar和grains一样也是一个数据系统,但是应用场景不同。pillar是将信息动态的存放在master端,主要存放私密、敏感信息(如用户名密码等),而且可以指定某一个minion才可以看到对应的信息。pillar更加适合在配置管理中运用。
创建pillar子目录,编辑pkgs.sls和top.sls文件
在这里插入图片描述
top.sls文件内容如下
在这里插入图片描述

pkgs.sls文件内容如下,执行salt '*' pillar.items,当主机名是server2时,package是httpd,当主机名是server3时,package是nginx。查items时,无需刷新
在这里插入图片描述
查具体pillar变量时,需要刷新pillar数据salt '*' saltutil.refresh_pillar,再执行salt '*' pillar.item roles

也可以命令行中用参数匹配,显示package是nginx的主机名
在这里插入图片描述

3、Jinja模板

Jinja是一种基于python的模板引擎,在SLS文件里可以直接使用jinja模板来做一些操作,通过jinja模板可以为不同服务器定义各自的变量。两种分隔符: {% … %} 和 {{ … }},前者用于执行诸如 for 循环或赋值的语句,后者把表达式的结果打印到模板上。
Jinja最基本的用法是使用控制结构包装条件:
我想server2和server3都安装开启httpd,但是server2是用80端口,server3是用8080端口。首先修改pkgs.sls文件,设定server2的port为80,server3的port为8080。
在这里插入图片描述
修改init.sls文件,主要是针对/etc/httpd/conf/httpd.conf时,加入jinja模板,并把port这个变量赋予http_port。
在这里插入图片描述
http的配置文件如下写,现在对于server2来说,http_port就是80;对于server3来说,http_port就是8080。执行salt ‘*’ state.sls apache,可以看到确实如此。
在这里插入图片描述

如果我们不仅仅想写端口号,而是想写ip+端口号。修改init.sls文件,主要是针对/etc/httpd/conf/httpd.conf时,把grain静态数据的ipv4这一项的最后一行赋予http_host。
在这里插入图片描述
类似的,修改http的配置文件如下
在这里插入图片描述

执行后,确实server2显示172.25.11.2:80,server3显示172.25.11.3:8080
在这里插入图片描述
在这里插入图片描述


版权声明:本文为qq_40764171原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。