ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

如何通过 Saltstack pillar组件定义与被控主机相关的任何数据?

2021-01-26 21:57:57  阅读:217  来源: 互联网

标签:被控 grains pillar sls master saltstack Saltstack salt


什么是pillar?
pillar也是Saltstack最重要的组件之一,其作用是定义与被控主机相关的任何数据,定义好的数据可以被其他组件使用,如模板、state、API等。在pillar中定义的数据与不同业务特性的被控主机相关联,这样不同被控主机只能看到自己匹配的数据,因此pillar安全性很高,适用于一些比较敏感的数据,这也是区别于grains最关键的一点,如定义不同业务组主机的用户id、组id、读写权限、程序包等信息,定义的规范是采用Python字典形式,即键/值,最上层的键一般为主机的id或组的名称。

pillar主配置文件定义

Saltstack默认将主控端配置文件中的所有数据都定义到pillar中,而对所有被控主机开放,可通过修改/etc/salt/master配置来定义是否开启或关闭这项功能。


[root@saltstack-master _grains]# vim /etc/salt/master
pillar_opts: True
[root@saltstack-master _grains]# /etc/init.d/salt-master restart
Stopping salt-master daemon: [确定]
Starting salt-master daemon: [确定]

修改后执行命令来观察效果:


[root@saltstack-master _grains]# salt 'saltstack_web1group_1' pillar.data
saltstack_web1group_1:
----------
master:
----------
__role:
master
auth_mode:
1
auto_accept:
True
cache_sreqs:
True
cachedir:
/var/cache/salt/master
cli_summary:
False
--------------忽略部分内容------------------

SLS文件定义

pillar支持在sls文件中定义数据,格式须符合YAML规范,与Saltstack的state组件十分相似,两者文件的配置格式、入口文件top.sls都是一致的。下面详细介绍pillar使用sls定义的配置过程。

1.定义pillar的主目录

修改主配置文件/etc/salt/master的pillar_roots参数,定义pillar的主目录,格式入下:


[root@saltstack-master _grains]# vim /etc/salt/master
pillar_roots:
base:
- /srv/pillar
[root@saltstack-master _grains]# /etc/init.d/salt-master restart
Stopping salt-master daemon: [确定]
Starting salt-master daemon: [确定]

同时创建pillar目录,执行命令:install -d /srv/pillar


[root@saltstack-master _grains]# install -d /srv/pillar

2.定义入口文件top.sls

入口文件的作用一般是定义pillar的数据覆盖被控主机的有效域范围,"*" 代表任意主机,其中包括了一个data.sls文件。


[root@saltstack-master _grains]# vim /srv/pillar/top.sls
base:
'*':
- data
[root@saltstack-master _grains]# vim /srv/pillar/data.sls
appname: website
flow:
maxconn:30000
maxmen:6G

3.效验pillar

  通过查看"saltstack_web1group_1" 主机的pillar数据,可以看到多出了data.sls数据项,原因是我们定义top.sls时使用“ ”覆盖了所有主机。如下所示,如果结果不符合预期,可以尝试刷新被控主机pillar数据,运行 salt '' saltutil.refresh_pillar即可。


[root@saltstack-master _grains]# salt 'saltstack_web1group_1' pillar.data appname flow
saltstack_web1group_1:
----------
appname:
website
flow:
maxconn:30000 maxmen:6G

pillar的使用
完成pillar配置后,接下来介绍使用方法。我们可以在state、模板文件中引用,模板格式为"{{pillar 变量}}"


{{ pillar['appname'] }} (一级字典)
{{ pillar['flow']['maxconn'] }} (二级字典)或{{ salt['pillar.get']('flow: 'maxconn',{}) }}

Python API 格式:


pillar['flow']['maxconn']
pillar.get('flow:appname',{})

1.操作目标主机

通过-I 选项来使用pillar来匹配被控主机:

[root@saltstack_master ~]# salt -I 'appname:website' test.ping
saltstack_web1group_1:
True

2.结合grains处理数据的差异性

首先通过结合grains的ID信息来区分不同id的maxcpu的值,其次进行引用观察匹配的信息。将data.sls修改成如下形式,其中,"if ... else...endfi"为jinja2的模板语法。

appname: website
flow:
maxconn:30000
maxmen:6G
{% if grains['id'] == 'SN100-128' %}
maxcpu: 8
{% else %}
maxcpu: 4
{% endif %}

查看被控主机的pillar数据


salt 'saltstack_web1group_1' pillar.data appname flow

Pillar在top.sls定义实例:

在master端配置文件中打开pillar_root


pillar_roots:
base:
- /etc/salt/pillar

mkdir /etc/salt/pillar
mkdir /etc/salt/pillar/init

重启 /etc/init.d/salt-master restart

vim /etc/salt/pillar/top.sls
base:
'*':
- init.rsyslog

vim /etc/salt/pillar/init/rsyslog.sls

{% if grains['osfinger'] == 'CentOS-6' %}

syslog:rsyslog
{% elif grains['osfinger'] == 'CentOS-5' %}

syslog: syslog

{% endif %}

salt '*' saltutil.refresh_pillar //刷新

标签:被控,grains,pillar,sls,master,saltstack,Saltstack,salt
来源: https://blog.51cto.com/15067236/2607520

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有