Saltstack自动化(四)pillar组件
在一上篇中了解了saltstack的grains组件,本篇继续研究pillar组件。grains用于存储静态不易变更的数据,而pillar一般用来存储动态的、敏感的数据;通过minion端和master端都可以配置设置或获取grains信息,而pillar信息只能在master端配置,再到minion端执行。pillar默认使用sls文件进行数据存储(YAML格式),除此之外,pillar也同时支持多种后端的数据存储方式。例如:mysql, mongodb, ldap, json, cobbler甚至是puppet。这无疑为开发中的接口提供了极大的便利。
一、pillar使用场景和常用命令
1、pillar常用的场景
a、敏感数据:例如ssh key,加密证书等,由于pillar使用独立的加密session,可以确保这些敏感数据不被其他minion看到;
b、不同变量:可以在pillar中处理平台差异性,比如针对不同的操作系统设置软件包的名字,然后在state中引用;
c、用户版本等变量:可以在pillar中添加任何需要用到的数据,比如定义用户和UID的对应关系、软件版本和端口、minion的角色等等。
2、常用命令
1salt '*' sys.doc pillar //查看与pillar有关的帮助信息
2salt '*' pillar.items //获取所有pillar items值
3salt '*' pillar.data //等价于pillar.items
4salt '*' saltutil.refresh_pillar //刷新pillar值
5salt '*' saltutil.sync_all //刷新pillar值,与refresh_pillar操作类似,但范围更大
6salt '*' sys.list_functions pillar //列出所有的pillar相关函数方法
7salt '*' pillar.get xxx //获取某项的值
8salt '*' pillar.raw //内存中获取
二、使用pillar存储软件版本端口信息
默认pillar使用的目录是/srv/pillar/,如果想要使用其他目录需要在master上的/etc/salt/master配置文件中修改路径。默认的主入口配置文件是top.sls ,具体结构如下:
1[root@itohost ~]# tree /srv/
2/srv/
3└── pillar
4 ├── packages.sls
5 ├── services.sls
6 └── top.sls
对应的文件内容如下:
1[root@itohost pillar]# cat top.sls
2base:
3 '*':
4 - packages
5 - services
6[root@itohost pillar]# cat packages.sls
7zabbix:
8 package-name: zabbix
9 version: 2.2.4
10[root@itohost pillar]# cat services.sls
11zabbix:
12 port: 10050
13 user: admin
top.sls引用时可以用两种方法:可以将引用文件放在同级,上面使用的就是这种;另一种是是在pillar目录下创建packages 、services目录,在该目录下创建init.sls文件。第二种用法,对应的目录结构如下:
1[root@itohost mnt]# tree
2.
3└── pillar
4 ├── packages
5 │ └── init.sls
6 ├── services
7 │ └── init.sls
8 └── top.sls
三、根据操作系统版本进行包安装
还是同样在/srv/pillar目录下,我们修改刚刚的sls文件,具体如下:
1#top.sls文件内容
2[root@itohost pillar]# cat top.sls
3base:
4 '*':
5 - packages
6#引用的packages.sls文件的内容
7[root@itohost pillar]# cat packages.sls
8pkgs:
9 {% if grains['os'] == 'CentOS' %}
10 apache: httpd
11 git: git
12 {% elif grains['os'] == 'SUSE' %}
13 apache: apache2
14 git: git-core
15 {% endif %}
执行后获取的结果如下:
1[root@itohost pillar]# salt '*' pillar.items
2ZJHZ-BMC-test252-BJ:
3 ----------
4 pkgs:
5 ----------
6 apache:
7 apache2
8 git:
9 git-core
10ZJHZ-CMREAD-YUM01-VINT-SD:
11 ----------
12 pkgs:
13 ----------
14 apache:
15 httpd
16 git:
17 git
也可以单独调用一个子值,如下:
1[root@itohost pillar]# salt '*' pillar.item pkgs:apache
2ZJHZ-BMC-test252-BJ:
3 ----------
4 pkgs:apache:
5 apache2
6ZJHZ-CMREAD-YUM01-VINT-SD:
7 ----------
8 pkgs:apache:
9 httpd
这里的使用就比较有意思,先是通过Jinja模板写的sls(获取zabbix版本端口用的是YAML模块),然后通过操作系统的不同利用grains获pillar信息 。同样在state组件里也可以更方便的调用pillar,如下示例通过state组件可以方便的进行apache安装:
1apache:
2 pkg.installed:
3 - name: {{ pillar['pkgs']['apache'] }}
对于上面的state sls文件还可以再进一步优化,设置默认值,如下:
1apache:
2 pkg.installed:
3 - name: {{ salt['pillar.get']('pkgs:apache', 'httpd') }}
state组件后面还会再提及到,这里只简要说明下。
四、敏感数据密码信息
这里以mysql 的用户、密码及库名为例 ,如下:
1# cat /srv/pillar/database.sls
2dbname: project
3dbuser: username
4dbpass: password
5dbhost: localhost
在模块文件中引用是,就可以像如下进行引用:
1# cat website.conf
2// MySQL settings
3define('DB_NAME', '{{ pillar['dbname'] }}');
4// MySQL database username
5define('DB_USER', '{{ pillar['dbuser'] }}');
6// MySQL database password
7define('DB_PASSWORD', '{{ pillar['dbpass'] }}');
8// MySQL hostname
9define('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
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/saltstack-pillar/5107.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.