grains与pillar
-
Grains简介
-
Grains是SaltStack的一个组件,存放在SaltStack的minion端。
-
当salt-minion启动时会把收集到的数据静态存放在Grains当中,只有当minion重启时才会进行数据的更新。
-
由于grains是静态数据,因此不推荐经常去修改它。
-
应用场景:
- 信息查询,可用作CMDB。
- 在target中使用,匹配minion。
- 在state系统中使用,配置管理模块。
-
(1)信息的查询
salt server2 grains.ls #列出所有grains的所有参数
salt server2 grains.ls | wc -l #统计grains的参数值
salt server2 grains.item os #查询server2的系统名称
salt server2 grains.item hostname #查询server2的主机名
salt server2 grains.item dns #查询server2上的DNS信息
(2)自定义grains项
- 方法一:在minion的主配置文件中直接来创建
vim /etc/salt/minion
systemctl restart salt-minion
salt server3 grains.item roles
salt server2 grains.item roles
salt -G 'roles:nginx' test.ping
- 方法二:在/etc/salt/grains文件中来创建
这种方法不需要重启salt-minion,但是需要在master上同步数据
- 方法三:在master上直接创建
pillar简介
- pillar和grains一样也是一个数据系统,但是应用场景不同。
- pillar是将信息动态的存放在master端,主要存放私密、敏感信息(如用户名密码等),而且可以指定某一个minion才可以看到对应的信息。
- pillar更加适合在配置管理中运用。
- pillar只会在master端存储
(1)声明pillar
vim /etc/salt/master
mkdir /srv/pillar
cd /srv/pillar
vim web.sls
{% if grains['fqdn'] == 'server2' %}
webserver: httpd
{% elif grains['fqdn'] == 'server3' %}
webserver: nginx
{% endif %}
port: 80
vim top.sls
base:
'*':
- web
salt '*' pillar.items
salt '*' saltutil.refresh_pillar #刷新pillar数据
salt '*' pillar.items webserver #查询pillar数据
salt '*' pillar.items port
Jinja模板
-
Jinja是一种基于python的模板引擎,在SLS文件里可以直接使用jinja模板来做一些操作。
-
通过jinja模板可以为不同服务器定义各自的变量。
-
两种分隔符: {% … %} 和 {{ … }},前者用于执行诸如 for 循环 或赋值的语句,后者把表达式的结果打印到模板上。
-
Jinja最基本的用法是使用控制结构包装条件:
- Jinja模板在普通文件的使用:
cd /srv/salt/httpd
vim init.sls
- 在jinja模板中直接引用grains变量和pillar变量
salt server2 state.sls httpd
还有另外一种编写的方法,在init.sls文件中开启jinja模板,在httpd.conf文件中直接引用grains和pillar的变量,这种方法也可以
- import方式,可在state文件之间共享
salt server2 state.sls httpd