1. grains简介
(1)grains是Saltstack最重要的组件之一,grains的作用是收集被控主机的基本信息,这些信息通常都是一些静态的数据,包括CPU、内核、操作系统、虚拟化等,在服务器端可以根据这些信息进行灵活定制,管理员可以利用这新信息对不同业务进行个性化配置。
(2)Grains是SaltStack当中的一个数据系统,当Minion启动时Grains会把Minion的数据收集起来,比如操作系统版本、CPU 位数等。由于采用的是静态收集,只有当Minion发生重启时数据才会发生变化,在Grains的实际运用中常用于对多台Minion做操作时进行一些条件匹配,比如有上百台Minion服务器,只需要对操作系统为CentOS的做一些操作等。
2. grains模块的应用
(1)罗列出所有Minion的所有信息,命令执行后可以看到出现了很多信息,我们可以用这些信息来作为一些过滤条件。
[root@server1 apache]# salt server2 grains.items
server2:
----------
SSDs:
biosreleasedate:
01/01/2011
biosversion:
0.5.1
cpu_flags:
- fpu
- de
- pse
- tsc
- msr
- pae
- mce
- cx8
...
...
[root@server1 apache]# salt server2 grains.item os
server2:
----------
os:
RedHat
[root@server1 apache]# salt server2 grains.item fqdn
server2:
----------
fqdn:
server2
[root@server1 apache]# salt server2 grains.item nodename
server2:
----------
nodename:
server2
[root@server1 apache]#
(2)jinja模板结合grains部署安装httpd服务
[root@server1 apache]# vim init.sls
[root@server1 apache]# cat init.sls
install-apache:
pkg.installed:
- pkgs:
- httpd
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/httpd.conf
- template: jinja
- context:
port: 80
host: {{ grains['ipv4'][-1] }}
service.running:
- name: httpd
- reload: true
- restart: true
- watch:
- file: install-apache
[root@server1 apache]#
推送部署:
salt server2 state.sls apache
[root@server2 zabbix]# netstat -antlp| grep 80
tcp 0 0 172.25.254.2:80 0.0.0.0:* LISTEN 22320/httpd
tcp 0 0 127.0.0.1:10050 127.0.0.1:35380 TIME_WAIT -
[root@server2 zabbix]#
3. pillar模块的应用
(1)pillar,只在master端
[root@server1 ~]# cd /srv/pillar/
[root@server1 pillar]# ls
top.sls web.sls
[root@server1 pillar]# vim web.sls
[root@server1 pillar]# cat web.sls
{% if grains['fqdn'] == 'server3' %}
webserver: httpd
{% elif grains['fqdn'] == 'server2' %}
webserver: nginx
{% endif %}
port: 80
[root@server1 pillar]#
[root@server1 pillar]# cat top.sls
base:
'*':
- web
[root@server1 pillar]#
刷新,并测试
[root@server1 pillar]# salt '*' saltutil.refresh_pillar
server2:
True
server3:
True
[root@server1 pillar]# salt '*' pillar.items
server2:
----------
port:
80
webserver:
nginx
server3:
----------
port:
80
webserver:
httpd
[root@server1 pillar]#
(2)使用pillar部署httpd服务
[root@server1 apache]# cat init.sls
install-apache:
pkg.installed:
- pkgs:
- httpd
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/httpd.conf
- template: jinja
- context:
port: {{ pillar['port'] }}
host: {{ pillar['host'] }}
service.running:
- name: httpd
- reload: true
- restart: true
- watch:
- file: install-apache
vim httpd.conf
42 Listen {{ host }}:{{ port }}
[root@server1 pillar]# cat web.sls
{% if grains['fqdn'] == 'server3' %}
host: 172.25.254.3
port: 80
{% elif grains['fqdn'] == 'server2' %}
host: 172.25.254.2
port: 80
{% endif %}
[root@server1 pillar]# cat top.sls
base:
'*':
- web
[root@server1 pillar]#
[root@server1 apache]# salt server2 state.sls apache
[root@server2 zabbix]# netstat -antlp| grep 80
tcp 0 0 172.25.254.2:80 0.0.0.0:* LISTEN 22320/httpd
tcp 0 0 172.25.254.2:59180 172.25.254.1:4506 TIME_WAIT -
tcp 0 0 127.0.0.1:10050 127.0.0.1:38480 TIME_WAIT -
[root@server2 zabbix]#