2、pillar
pillar 和 grains 不一样,是在 master 上定义的,并且是针对 minion 定义的一些信息。像一些比较重要的数据(密码)可以存在 pillar 里,还可以定义变量等。
首先我们查看master端pillars组件是否在开启状态
查看/etc/salt/master pillar_ops: True 就代表pillars在开启状态,否则我们手动修改。
新的版本默认已经开启,继续下面内容。
查看指定minion的 pillar 值:
[root@saltstack ~]# salt 'client1' pillar.items client1: ----------服务端自定义配置 pillar
[root@saltstack ~]# vi /etc/salt/master +529 // 找到如下内容,去掉#号 pillar_roots: base: - /srv/pillar [root@saltstack ~]# mkdir /srv/pillar [root@saltstack ~]# vi /srv/pillar/test.sls // 自定义配置文件,内容如下 conf: /etc/mum.conf myname: primum est [root@saltstack ~]# vi /srv/pillar/top.sls // 总入口文件,内容如下 base: 'client1': - test重启master
[root@saltstack ~]# systemctl restart salt-master注意:当更改完 pillar 配置文件后,我们可以通过刷新 pillar 配置来获取新的 pillar 状态:
[root@saltstack ~]# salt '*' saltutil.refresh_pillar client1: True saltstack: True client2: True验证:
[root@saltstack ~]# salt 'client1' pillar.items client1: ---------- conf: /etc/mum.conf myname: primum est [root@saltstack ~]# salt 'client1' pillar.item myname client1: ---------- myname: primum est [root@saltstack ~]# salt 'client1' pillar.item conf client1: ---------- conf: /etc/mum.confpillar 同样可以用来作为 salt 的匹配对象。比如:
[root@saltstack ~]# salt -I 'conf:/etc/mum.conf' test.ping client1: True [root@saltstack ~]# salt -I 'conf:/etc/mum.conf' cmd.run 'w' client1: 17:19:45 up 7:45, 1 user, load average: 0.05, 0.03, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/1 172.16.0.1 11:14 25.00s 0.68s 0.68s -bash另外一种定义pillar的方式,也适用于state
首先编辑/srv/pillar/目录下的top.sls 文件
第一行代表这是我们的入口文件
第二行代表我们要匹配的用户,‘client1’代表client1客户端,“*”代表所有用户
第三丶四行代表匹配到的用户可以看到的数据的配置文件的名字
这里我们可以直接写一个名字叫做apache的文件进行配置,也可以写一个包含init.sls的目录进行配置。这里采用包含init.sls文件的目录的形式的配置方法。
[root@saltstack ~]# cd /srv/pillar/ [root@saltstack pillar]# mkdir apache [root@saltstack pillar]# cd apache/ [root@saltstack apache]# vim init.sls // 添加如下内容 system-type: {% if grains.os == 'CentOS' %} name: Centos-Linux {% else %} name: unknown {% endif %} apache-name: {% if grains.os_family == 'RedHat' %} apache: httpd {% elif grains.os_family == 'Arch' %} apache: apache {% elif grains.os_family == 'Debian' %} apache: apache2 {% endif %}{% if grains.os == 'CentOS' %} 类似于django的模板语言(我们可以采用python脚本定义grains的数据,但是pillar没有。我们可以在pillar的sls脚本当中调用grains的变量,pillar和grains具有同样的功能可以被其他组件调用。)
服务端查看自定义的pillar信息
[root@saltstack apache]# salt 'client1' pillar.item apache-name client1: ---------- apache-name: ---------- apache: httpd [root@saltstack apache]# salt 'client1' pillar.item system-type client1: ---------- system-type: ---------- name: Centos-Linux 配置管理安装Apache下面进行的演示是远程通过 yum 方式安装 Apache。步骤如下:
修改配置文件
注意:环境: base、dev(开发环境)、test(测试环境)、prod(生产环境)。
[root@saltstack ~]# mkdir /srv/salt [root@saltstack ~]# vi /srv/salt/top.sls base: 'client1': - apache注意:若换成 '*',则表示在所有的客户端执行 apache 模块。
[root@saltstack ~]# vi /srv/salt/apache.sls apache-service: pkg.installed: - names: // 如果只有一个服务,那么就可以写成 –name: httpd 不用再换一行 - httpd - httpd-devel service.running: - name: httpd - enable: True