1、event实际就是一个字典
这个字典有两个固定的key
"tag" 可以用来区分哪一个mininon
"data" 包含更详细的数据,比如执行是否成功,执行的是哪一个函数,以及id是谁
2、把你的minion和master,以及其他的minion可以联动起来
master执行 salt-run state.event pretty=True 捕捉event
minion执行 salt-call event.send 'tag' 'data' data可以没有,tag必须有
master再开一个终端执行salt 'zabbix_server' state.sls apache_install
捕捉到的event:
salt/job/20151018191951447100/ret/zabbix_server { tag和data ,字典为data
"_stamp": "2015-10-18T11:20:19.543008",
"cmd": "_return",
"fun": "state.sls",
"fun_args": [
"apache_install"
],
"id": "zabbix_server",
"jid": "20151018191951447100",
"out": "highstate",
"retcode": 0,
"return": {
"pkg_|-httpd_|-httpd_|-installed": {
"__run_num__": 0,
"changes": {},
"comment": "Package httpd is already installed.",
"duration": 4001.181,
"name": "httpd",
"result": true,
"start_time": "11:20:14.264181"
}
},
"success": true
}
}配置
修改master配置文件
reactor:
- "salt/job/*": 捕捉到的tag,jid会变化用了*代替
- /srv/reactor/my_custom_module.sls 捕捉到tag要做的事
mkdir -pv /srv/reactor/ && vim /srv/reactor/my_custom_module.sls
{% if data["fun_args"][0] == "apache_install" and data["success"] == true %} 进行一些具体的判断
touch_new_file:
local.state.sls: (老版本这里是cmd.state.sls)
- tgt: 'zabbix_server' 执行的目标
- arg:
- newfile 执行/srv/salt/newfile.sls文件
- kwarg: 临时定义pillar
pillar: 注意这里是四个空格
filename: {{ data["fun_args"][0] }}
{% endif %} ##这个{{data是模板里面的变量}}
相当于 salt ' zabbix_server ' state.sls newfile pillar='{"filename": " apache_install "}'
cat /srv/salt/newfile.sls
/tmp/{{pillar['filename']}}:
file.managed:
- source: salt://passwd
到此,执行salt 'zabbix_server' state.sls apache_install后(成功),就会联动执行newfile.sls