pillar

 

pillar

pillar是什么?

Pillar是Salt非常重要的一个组件,它用于给特定的Minion定义任何你需要的数据,这些数据可以被Salt的其他组件使用。

Pillar数据是与特定minion关联的,也就是说每一个minion都只能看到自己的数据,所以Pillar可以用来传递敏感数据。

Pillar可以用在哪些地方?

敏感数据

例如ssh key,加密证书等,由于Pillar使用独立的加密session,可以确保这些敏感数据不被其他minion看到。

变量

可以在Pillar中处理平台差异性,比如针对不同的操作系统设置软件包的名字,然后在State中引用。

其他任何数据

可以在Pillar中添加任何需要用到的数据。比如定义用户和UID的对应关系,mnion的角色等。

用在Targetting中

Pillar可以用来选择minion,使用-I选项。

pillar相关基本命令

salt '*' sys.doc pillar            //查看与pillar有关的帮助信息 salt '*' pillar.items              //获取所有pillar items值 salt '*' pillar.data               //等价于pillar.items salt '*' saltutil.refresh_pillar   //刷新pillar值 salt '*' saltutil.sync_all         //刷新pillar值,与refresh_pillar操作类似,但范围更大 salt '*' sys.list_functions pillar //列出所有的pillar相关函数方法 salt '*' pillar.get xxx            //获取某项的值 salt '*' pillar.raw                //内存中获取 

怎么定义Pillar数据?

二、使用pillar存储软件版本端口信息

默认pillar使用的目录是/srv/pillar/,如果想要使用其他目录需要在master上的/etc/salt/master配置文件中修改路径。默认的主入口配置文件是top.sls ,具体结构如下:

[root@itohost ~]# tree /srv/

/srv/

└── pillar

├── packages.sls

├── services.sls

└── top.sls

对应的文件内容如下:

[root@itohost pillar]# cat top.sls

base:

‘*’:

– packages

– services

[root@itohost pillar]# cat packages.sls

zabbix:

package-name: zabbix

version: 2.2.4

[root@itohost pillar]# cat services.sls

zabbix:

port: 10050

user: admin

top.sls引用时可以用两种方法:可以将引用文件放在同级,上面使用的就是这种;另一种是是在pillar目录下创建packages 、services目录,在该目录下创建init.sls文件。第二种用法,对应的目录结构如下:

[root@itohost mnt]# tree

.

└── pillar

├── packages

│ └── init.sls

├── services

│ └── init.sls

└── top.sls

salt-pillar

三、根据操作系统版本进行包安装

还是同样在/srv/pillar目录下,我们修改刚刚的sls文件,具体如下:

top.sls文件内容

[root@itohost pillar]# cat top.sls

base:

‘*’:

– packages

引用的packages.sls文件的内容

[root@itohost pillar]# cat packages.sls

pkgs:

{% if grains[‘os’] == ‘centos’ %}

apache: httpd

git: git

{% elif grains[‘os’] == ‘SUSE’ %}

apache: apache2

git: git-core

{% endif %}

执行后获取的结果如下:

[root@itohost pillar]# salt ‘*’ pillar.items

ZJHZ-BMC-test252-BJ:

———-

pkgs:

———-

apache:

apache2

git:

git-core

ZJHZ-CMREAD-YUM01-VINT-SD:

———-

pkgs:

———-

apache:

httpd

git:

git

也可以单独调用一个子值,如下:

[root@itohost pillar]# salt ‘*’ pillar.item pkgs:apache

ZJHZ-BMC-test252-BJ:

———-

pkgs:apache:

apache2

ZJHZ-CMREAD-YUM01-VINT-SD:

———-

pkgs:apache:

httpd

这里的使用就比较有意思,先是通过Jinja模板写的sls(获取zabbix版本端口用的是YAML模块),然后通过操作系统的不同利用grains获pillar信息 。同样在state组件里也可以更方便的调用pillar,如下示例通过state组件可以方便的进行apache安装

apache:

pkg.installed:

– name: {{ pillar[‘pkgs’][‘apache’] }}

对于上面的state sls文件还可以再进一步优化,设置默认值,如下:

apache:

pkg.installed:

– name: {{ salt[‘pillar.get’](‘pkgs:apache’, ‘httpd’) }}

state组件后面还会再提及到,这里只简要说明下。

四、敏感数据密码信息

这里以mysql 的用户、密码及库名为例 ,如下:

# cat /srv/pillar/database.sls dbname: project dbuser: username dbpass: password dbhost: localhost

在模块文件中引用是,就可以像如下进行引用:

# cat website.conf // MySQL settings define('DB_NAME', '{{ pillar['dbname'] }}'); // MySQL database username define('DB_USER', '{{ pillar['dbuser'] }}'); // MySQL database password define('DB_PASSWORD', '{{ pillar['dbpass'] }}'); // MySQL hostname define('DB_HOST', '{{ pillar['dbhost'] }}');

由于模板也是后面要提到的内容,后面还会提到。这里先有个概念。

五、总结

pillar在saltstack里是比较重要的一个组件,其可以用在模块里面,jinja模板里面,state的sls文件里面。除此之外,其还支持通过ext_pillar进行扩展。

ext_pillar:除了上面提到的之外,pillar还支持通过mysql、redis、mongodb等扩展获取。这里给一个mysql 的示例:http://salt-private.readthedocs.io/en/latest/ref/pillar/all/salt.pillar.mysql.html

相关阅读

pillar了解

pillar简介:pillar和grains不一样,pillar是在master上定义的,并且是针对minion定义的信息,他不需要到minion上进行操作。 像一些重要

发表评论