saltsack之数据系统(三)
saltstack 数据系统有两种,Grains pillar
Grains 与 Pillar 区别
类型 数据采集方式 应用场景 定义位置
Granis 静态 minion启动时采集 数据查询 目标选择 配置管理 minion
Pillar 动态 master自定义 目标选择 配置管理 敏感数据 master
Grains:静态数据 当minion启动收集本地信息(操作系统,内核版本,CPU,内存,硬盘,设备型号等) 只要不重启,这些数据只会收集一次
能干什么呢?
1 资产管理,信息查询
(salt 'web01' grains.items。 salt '*' grains.item fqdn_ip4 )
2 用于目标选择
(salt -G 'web01:apache' cmd.run '/etc/init.d/httpd restart')
3 配置管理中使用
举例 :资产管理
停止某一个机器的apache(也可以是指定roles的服务)
1,方法一 从minion配置文件配置(不太推荐,不好管理)
grains:
roles: apache
重启服务
/etc/init.d/salt-minion restar master端: salt '*' grains.item roles web01: ---------- roles: web02: ---------- roles: apache salt -G 'roles:apache' cmd.run '/etc/init.d/httpd stop' web02: Stopping httpd: ?[60G[?[0;32m OK ?[0;39m]
2 方法2 创建grains(minion端)(推荐)
vim /etc/salt/grains server: httpd salt '*' saltutil.sync_grains 刷新(不用重启强制刷新) salt '*' grains.item server web01: ---------- server: web02: ---------- server:httpd
举例:目标选择
vim /srv/salt/top.sls
base:
'web01':
- web.apache
'roles:apache':
- match: grain
- web.apache
====================开发一个grains================
mkdir /srv/salt/_grains
cd /srv/salt/_grains
vim my_grains.py
[root@web01 _grains]# vim my_grains.py #!/usr/bin/env python #_*_ coding: utf-8 _*_ def my_grains(): #初始化一个grains字典 grains = {} #设置字典中的值(key-value) grains['iaas'] = 'openstack' grains['edu'] = 'daxian' #返回这个字典 return grains ~
从master端同步到minion端
salt '*' saltutil.sync_grains web01: - grains.my_grains web02: - grains.my_grains
同步到minion /var/cache/salt/minion/extmods/grains
执行以下
salt '*' grains.item iaas web02: ---------- iaas: openstack web01: ---------- iaas: openstack
Grians优先级:
- 系统自带
- grains 文件写的
- minion配置文件写的
- 自己写的
Pillar介绍
Pillar是动态的 给特定的minion指定特定的数据
默认是关闭的,在配置文件master里开启,一般都关闭,一般都是自己写
vim /etc/salt/master pillar_roots: base: - /srv/pillar
#创建这个目录
mkdir /srv/pillar
cd /srv/pillar
mkdir web
cd web
#重启
/etc/init.d/salt-master restart
#编辑
vim apache.sls
{% if grains['os'] == 'CentOS' %}
apache: httpd
{% elif grains['os'] == 'Debian' %}
apache: apache2
{% endif %}
编辑top file
cd .. vim top.sls base: 'web01': - web.apache #刷新 salt '*' saltutil.refresh_pillar salt '*' pillar.items apache web02: ---------- web01: ---------- apache: httpd