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

results matching ""

    No results matching ""