一、Grains组件
Grains是saltstack记录minion的一些静态信息组件,可以简单的理解为grains里面记录着每台minion的一些常用的属性,比如cpu、内存、磁盘、网络信息等,可以通过grains.items查看某台minion的grains所有信息,minion的grains信息是minion启动的时候采集汇报给master的。
grains会在minion进程启动时进行加载,并缓存在内存中。这样salt-minion进程无需每次操作都要重新检索系统来获取grain,提升了minion性能。
通俗来讲:可以在minion端自定义 然后自动汇报上来 也可以从master端定义然后推下去 采集完后 再汇报上来
设置grains的方法
NO1. 方法1
[1] server2 minion的配置文件打开grains
[root@server2 ~]# vim /etc/salt/minion
120 grains:
121 roles:
122 - apache
[root@server2 ~]# /etc/init.d/salt-minion restart ##重启salt-minion
[2] server1 端查询信息
NO2. 方法2 (需要server1端刷新!)
[root@server3 ~]# cd /etc/salt
[root@server3 salt]# touch grains
[root@server3 salt]# vim grains ##编写一个grains的配置文件
[root@server3 salt]# cat grains
roles:
nginx
NO3. 方法3 建立目录_grains,编写python方法
[root@server1 salt]# mkdir _grains
[root@server1 salt]# cd _grains/
[root@server1 _grains]# vim my_grains.py
[root@server1 _grains]# cat my_grains.py
#!/usr/bin/env/python
def my_grains():
grains = {}
grains['mu'] = 'bai'
grains['hello'] = 'world'
return grains
[root@server1 _grains]# salt server2 saltutil.sync_grains ## 将模块同步到server2
server2:
- grains.my_grains
二、Pillar组件
它跟grains的结构一样,也是一个字典格式,数据通过key/value的格式进行存储。在Salt的设计中,Pillar使用独立的加密sessiion,所以Pillar可以用来传递敏感的数据,例如ssh-key,加密证书等。
Grains和Pillar的存储:
Grains : 用于存储minion的基本数据信息;存储的是静态、不常变化的内容;
Pillar : 用于存储master分配给minion的数据信息,与grains相反;
Grains和Pillar的存储区域:
Grains : 元数据存储在minion端;
Pillar : 元数据存储在master端。
Grains和Pillar的更新方式:
Grains : 在minion启动时进行更新;minion有权限操作自己的grains值,如增加、删除;
Pillar : 元数据存储在master端,使用 saltutil.refresh_pillar进行刷新,效率更高,更为灵活。minion只能查看自己的pillar,无权修改
pillar 配置
[root@server1 ~]# vim /srv/salt/master
694 pillar_roots:
695 base:
696 - /srv/pillar
[root@server1 salt]# /etc/init.d/salt-master restart
[root@server1 ~]# mkdir /srv/pillar
[root@server1 ~]# cd /srv/pillar/
[root@server1 pillar]# mkdir web
[root@server1 pillar]# cd web/
[root@server1 web]# vim install.sls
{% if grains['fqdn'] == 'server2' %} //fqdn代表主机名
webserver: apache
{% elif grains['fqdn'] == 'server3' %}
webserver: nginx
{% endif %}
[root@server1 web]# cd ..
[root@server1 pillar]# vim top.sls
base:
'*':
- web.install
[root@server1 web]# salt '*' saltutil.refresh_pillar ##刷新
三、Jinja模板
为了实现不同机器的差异化配置
方式一:
[root@server1 salt]# cd apache/
[root@server1 apache]# ls
files install.sls service.sls
[root@server1 apache]# vim install.sls
apache-install:
pkg.installed:
- pkgs:
- httpd
- php
- php-mysql
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/files/httpd.conf
- mode: 644
- user: root
- template: jinja
- context:
bind: 172.25.254.2
port: 8080
[root@server1 apache]# vim files/httpd.conf
136 Listen {{ bind }}:{{ port }}
[root@server1 apache]# salt server2 state.sls apache.service ## 推到server2端
查看server2的apache端口,被改为8080,ok!
方式二:
[root@server1 httpd]# vim files/httpd.conf
136 Listen {{ port }}
[root@server1 apache]# salt server2 state.sls apache.service
[root@server2 salt]# cat /etc/httpd/conf/httpd.conf | head -n 136 | tail -n 1
Listen 8080
方式三:
[root@server1 httpd]# vim files/httpd.conf
1 {% from 'apache/lib.sls' import port with context %}
136 Listen {{ bind }}:{{ port }}
[root@server1 httpd]# vim lib.sls
{% set port = 80 %}
[root@server1 httpd]# salt server2 state.sls apache.service
[root@server2 minion]# cat /etc/httpd/conf/httpd.conf | head -n 137 | tail -n 1
Listen 172.25.254.2:80
方式四:
[root@server2 ~]# vim /etc/httpd/conf/httpd.conf
Listen 172.25.254.2:80
[root@server1 apache]# vim install.sls ## 修改bind
- bind: {{ grains['ipv4'][-1] }}
[root@server1 httpd]# vim files/httpd.conf
136 Listen {{ bind }}:{{ port }}
[root@server1 httpd]# salt server2 state.sls apache.install
[root@server2 ~]# cat /etc/httpd/conf/httpd.conf | head -n 136 | tail -n 1
Listen 172.25.254.2:8080
方式五:
[root@server2 ~]# vim /etc/httpd/conf/httpd.conf
Listen 172.25.254.2:8080
[root@server1 apache]# vim install.sls
[root@server1 apache]# vim install.sls
[root@server1 apache]# cat install.sls
apache-install:
pkg.installed:
- pkgs:
- httpd
- php
- php-mysql
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/files/httpd.conf
- mode: 644
- user: root
- group: root
- template: jinja
- context:
bind: 172.25.254.2
port: 80
[root@server1 apache]# vim files/httpd.conf
136 Listen {{ grains['ipv4'][-1] }}:{{ port }}
[root@server1 apache]# salt server2 state.sls apache.install
[root@server2 salt]# cat /etc/httpd/conf/httpd.conf | head -n 135 | tail -n 1
Listen 172.25.254.2:80
方式六:
[root@server1 httpd]# cd /srv/pillar/web
[root@server1 web]# vim install.sls
{% if grains['fqdn'] == 'server2' %}
webserver: httpd
bind: 172.25.254.2
port: 8080
{% elif grains['fqdn'] == 'server3' %}
webserver: nginx
{% endif %}
[root@server1 web]# cd ..
[root@server1 pillar]# cd ..
[root@server1 srv]# cd salt/httpd/
[root@server1 httpd]# vim files/httpd.conf
136 Listen {{ pillar['bind'] }}:{{ pillar['port'] }}
[root@server1 httpd]# salt server2 state.sls apache.install
[root@server2 conf]# cat /etc/httpd/conf/httpd.conf | head -n 136 | tail -n 1
Listen 172.25.254.2:8080