2017年底做了一个关于saltstack的demo,用到了一些比较方便的tips,简单记录一下。
另外吐槽一下saltstack的官方文档,跟ansible一比,真的很垃圾很不方便,加大了学习saltstack的难度。。。有问题,只能自己多琢磨琢磨,多Google看看了。
(一)异步执行
Saltstack执行命令时,minion端经常因为超时没有返回,通过异步执行,直接返回jobId,再查询job执行结果。
# salt -v "SERVER-01" test.ping
Executing job with jid 20180328113510462472
-------------------------------------------
SERVER-01:
Minion did not return.
加上异步选项–async:
# salt --async "SERVER-01" test.ping
Executed command with job ID: 20180328113742741120
# salt-run jobs.lookup_jid 20180328113742741120
SERVER-01:
True
异步操作可以和shell相结合,根据job id查询job执行结果,eg:
res=`salt --async -N targets state.sls multiInstall`
jid=`echo $res | head -1| awk -F ' ' '{print $6}' | tr -d ' '
salt-run jobs.lookup_jid $jid
(二)pillar变量
官网相关链接:https://docs.saltstack.com/en/latest/topics/pillar/
Pillar直接看以下示例:
目录结构:
-srv_dir
-srv_pillar
-patch.sls
-top.sls
-srv_salt
-install.sls
pillar文件夹:
#cat top.sls
base:
'*':
- patch
#cat patch.sls
patch:
info:
win2008Id: KB1234567
win2016Id: KB7654321
调用pillar变量:
#cat multiInstall.sls
multiInstall:
wua.installed:
#如果minion的系统是2008R2,就安装KB1234567
{% if grains['osrelease'] == '2008ServerR2' %}
- name: {{ salt['pillar.get']('patch:info:win2008Id') }}
#如果minion的系统是2016,就安装KB7654321
{% elif grains['osrelease'] == '2016Server' %}
- name: {{ salt['pillar.get']('patch:info:win2016Id') }}
{% endif %}