saltstack自动化运维管理----------(grains、pillar)
1.grains
1.grains简介
Grains是SaltStack的一个组件,存放在SaltStack的minion端。
当salt-minion启动时会把收集到的数据静态存放在Grains当中,只有当minion重启时才会进行数据的更新。由于grains是静态数据,因此不推荐经常去修改它。
应用场景:信息查询,可用作CMDB。在target中使用,匹配minion。在state系统中使用,配置管理模块
2.信息查询
用于查询minion端的IP、FQDN等信息
- 默认可用的grains:
salt '*' grains.ls
2. 查看每一项的值:
salt '*' grains.items
3. 取单项的值:
salt server5 grains.item ipv4
salt server5 grains.item fqdn
3.自定义grains项
在server4中:
在server4的/etc/salt/minion中定义:
vim /etc/salt/minion
##写入
grains:
roles: apache
重启salt-minion,否则数据不会更新:
systemctl restart salt-minion
在server5中:
在server5的/etc/salt/minion中定义:
vim /etc/salt/minion
##写入
grains:
roles: nginx
重启salt-minion,否则数据不会更新:
systemctl restart salt-minion
4.编写grains模块
1。编写模块
在salt-master端创建_grains目录:
mkdir /srv/salt/_grains
vim /srv/salt/_grains/my_grain.py
##写入
def my_grain():
grains = {}
grains['linux'] = 'redhat'
grains['hello'] = 'world'
return grains
salt '*' saltutil.sync_grains #同步grains到minion端
2。grains匹配运用
在target中匹配minion:
salt -G roles:apache cmd.run hostname
salt -G roles:nginx cmd.run hostname
salt -G hello:world cmd.run hostname
在top文件中匹配:
vim /srv/salt/top.sls
##写入
base:
'roles: apache':
- match: grain
- apache
'roles: nginx':
- match: grain
- nginx
2.pillar
1.pillar简介
pillar和grains一样也是一个数据系统,但是应用场景不同。
pillar是将信息动态的存放在master端,主要存放私密、敏感信息(如用户名密码等,而且可以指定某一个minion才可以看到对应的信息。
pillar更加适合在配置管理中运用。
2.声明pillar
定义pillar基础目录:
vim /etc/salt/master
##修改
pillar_roots:
base:
- /srv/pillar
mkdir /srv/pillar
重启salt-master服务:
/etc/init.d/salt-master restart
注意:默认目录就是/srv/pillar,可以不用修改配置文件,服务业就不需要重启。
3.自定义pillar项
定义项:
vim /srv/pillar/top.sls
##写入
base:
'*':
- packages
vim /srv/pillar/apache.sls
##写入
{% if grains['fqdn'] == 'server5' %}
package: nginx
{% elif grains['fqdn'] == 'server4' %}
package: httpd
{% endif %}
注意: 这里会匹配所有minion,现在只有两台minion,所以endif后面不加参数,否则报错。如果有更多的minion,则需要写
刷新pillar数据:
salt '*' saltutil.refresh_pillar
查询pillar数据:
salt 'server4' pillar.items package
salt 'server5' pillar.items package
4.pillar数据匹配
命令行中匹配
salt -I package:nginx cmd.run hostname
state系统中使用
state系统中使用
vim /srv/salt/apache/init.sls
web:
pkg.installed:
- pkgs:
- {{ pillar['package'] }}
-php
service.running:
- name: httpd
- enable: True
- watch:
- file: /etc/httpd/conf/httpd.conf
/etc/httpd/conf/httpd.conf
file.managed:
- source: salt://apache/files/httpd.conf
在server2上安装了apache,在server3上安装了nginx