1、grains组件:
Grains是SaltStack的一个组件,存放在SaltStack的minion端。 当salt-minion启动时会把收集到的数据静态存放在Grains当中,只有当minion重启时才会进行数据的更新。 由于grains是静态数据,因此不推荐经常去修改它。
应用场景:
- 信息查询,可用作CMDB。
- 在target中使用,匹配minion。
- 在state系统中使用,配置管理模块。
信息查询:
用于查询minion端的IP、FQDN等信息
默认可用的grains:
salt '*' grains.ls
查看每一项的值:
salt '*' grains.items
取单项的值:
salt server2 grains.item ipv4
salt server2 grains.item fqdn
自定义grains项:
vim /etc/salt/minion
grains:
roles:
- apache
- httpd
systemctl restart salt-minion
vim /etc/salt/grains
deployment: datacenter1
同步数据:
salt server3 saltutil.sync_grains
查询自定义项:
salt server3 grains.item deployment
编写grains模块:
mkdir /srv/salt/_grains
vim /srv/salt/_grains/my_grain.py
def my_grain()
grains = {}
grains['roles'] = nginx
grains['hello'] = 'world'
return grains
#同步grains到minion端
salt '*' saltutil.sync_grains
在top文件中匹配
vim /srv/salt/top.sls
base:
'server3':
- match: grain
- apache.install
2、pillar组件
pillar和grains一样也是一个数据系统,但是应用场景不同。 pillar是将信息动态的存放在master端,主要存放私密、敏感信息(如用户名密码等),而且可以指定某一个minion才可以看到对应的信息。 pillar更加适合在配置管理中运用
声明pallar
vim /etc/salt/master
pillar_roots:
base:
- /srv/pillar
systemctl restart salt-master
mkdir /srv/pillar
自定义pallar项
vim /srv/pillar/top.sls
base:
'*':
- packages
vim /srv/pillar/apache.sls
{% if grains['fqdn'] == 'server3' %}
package: httpd
{% elif grains['fqdn'] == 'server2' %}
package: mairadb
{% endif %}
刷新pillar数据:
salt '*' saltutil.refresh_pillar
查询pillar数据:
salt '*' pillar.items
salt '*' grains.item roles
pillar数据匹配
命令行中匹配:
salt -I 'roles:apache' test.ping
state系统中使用:
vim /srv/salt/apache.sls
apache:
pkg.installed:
- name: {{ pillar['package'] }}
3、jinja模版
Jinja是一种基于python的模板引擎,在SLS文件里可以直接使用jinja模板来做一些操作
通过jinja模板可以为不同服务器定义各自的变量。
两种分隔符: {% ... %} 和 {{ ... }},前者用于执行诸如 for 循环 或赋值的语句,后者把表达式的结果打印到模板上
Jinja最基本的用法是使用控制结构包装条件:
vim /srv/salt/test.sls
/mnt/testfile:
file.append:
{% if grains['fqdn'] == 'server2' %}
- text: server2
{% elif grains['fqdn'] == 'server3' %}
- text: server3
{% endif %}
Jinja在普通文件的使用:
vim /srv/salt/apache.sls
/etc/httpd/conf/httpd.conf:
file.managed:
- source: salt://httpd.conf
- template: jinja
- context:
bind: 172.25.27.1
jinjia模版的使用方式:
import方式,可在state文件之间共享:
定义变量文件:
vim lib.sls
{% set port = 80 %}
导入模板文件:
vim httpd.conf
{% from 'lib.sls' import port %}
...
Listen {{ prot }}
引用变量:
直接引用grains变量:
Listen {{ grains['ipv4'][1] }}
直接引用pillar变量:
Listen {{ pillar['ip'] }}
在state文件中引用:
- template: jinja
- context:
bind: {{ pillar['ip'] }}
4、JOB
job是指master在下发任务的时候的任务jid,minion在接收到指令开始执行时,会在本地的/var/cache/salt/minion/proc目录下产生该jid命名的文件,用于在执行过程中master查看当前任务的执行情况。指令执行完毕将结果传送给master后,删除该临时文件。
我们可以将job保存到数据库中去。
默认job cache:
Job缓存默认保存24小时:
vim /etc/salt/master
keep_jobs: 24
master端Job缓存目录:
/var/cache/salt/master/jobs
job管理方法
查看所有minion当前正在运行的jobs(在所有minions上运行saltutil.running)
salt-run jobs.active
列出当前master jobs cache中所有job
salt-run jobs.list_jobs
从master jobs cache中查询指定jid的运行结果
salt-run jobs.lookup_jid <jid>