SaltStack事件驱动 – event reactor

Event是SaltStack里面的对每个事件的一个记录,它相比job更加底层,Event能记录更加详细的SaltStack事件,比如Minion服务启动后请求Master签发证书或者证书校验的过程,都能通过Event事件来查看整个过程。Event也为扩展SaltStack提供了更加友好的接口。目前官方已经列出一些Event事件,包括认证,Minion连接Master,key认证,job等。
 
1、查看Event事件
可以通过命令查看event事件,然后再打开一个终端执行任务
[root@master ~]# salt-run  state.event pretty=True
20190926040122342821    {
    "_stamp": "2019-09-26T08:01:22.343862", 
    "minions": [
        "master"
    ]
}
salt/job/20190926040122342821/new    {
    "_stamp": "2019-09-26T08:01:22.354693", 
    "arg": [], 
    "fun": "test.ping", 
    "jid": "20190926040122342821", 
    "minions": [
        "master"
    ], 
    "missing": [], 
    "tgt": "master", 
    "tgt_type": "glob", 
    "user": "root"
}
salt/job/20190926040122342821/ret/master    {
    "_stamp": "2019-09-26T08:01:22.476802", 
    "cmd": "_return", 
    "fun": "test.ping", 
    "fun_args": [], 
    "id": "master", 
    "jid": "20190926040122342821", 
    "retcode": 0, 
    "return": true, 
    "success": true
}
View Code

2、reactor配置

 

[root@master ~]# cat /etc/salt/master.d/reactor.conf   #在master节点中配置reactor的配置信息
reactor:
  - 'minion_start':                  #匹配event中事件tag
    - /srv/reactor/touch.sls      #minion启动是应用一个state文件
[root@master ~]# 
[root@master ~]# 
[root@master ~]# cat /srv/reactor/touch.sls 
touch_temp:
  local.state.sls:                      
    - tgt: {{ data['id'] }}
    - arg:
      - touch_abc
[root@master ~]# 
[root@master ~]# 
[root@master ~]# cat /srv/salt/base/touch_abc.sls 
touch_abc:
  file.append:
    - name: /tmp/abc.txt
    - text:
      - 'this is append line1'
      - 'this is append line2'
     
[root@master ~]# 

reactor SLS文件

与salt reactor SLS有所以类似的地方。salt state和salt reator SLS文件都是使用YAML和Jinja写的,不过因为它们语法有些不同,且用作不同的目的,它们应该放在不同的目录中(如reactor是在/srv/salt/reactors目录)。

reactor 的类型

 

salt reactor有如下几种类型:

 

  • 远程执行: 在目标minions运行一个执行模块。这个可以通过调用salt命令来完成(包括应用state或highstate)
  • Salt Runners: 通过使用salt-run调用的任务。如HTTP runnner可以触发webhook
  • Wheel: Wheel命令管理你的salt环境,完成如接收密钥和更新配置设置的任务。

远程执行

这种类型的reactor是直接与salt执行模块连接。如果你考虑使用salt命令来运行一个远程执行模块,你应该知道salt命令必须包含三个信息:

  • 目标
  • 函数
  • 参数

salt reactor中的远程执行也同样需要这三个信息:

<section id>:
  local.<function>:
    - tgt: <target>
    - arg:
        <arguments>

注意执行模块必须以local为前缀。我们来看在命令行安装一个包是怎样的:

1、命令行
salt 'myminion' pkg.install cowsay


2、在reactor SLS文件中,应该是按如下配置:
install cowsay on myminion:
  local.pkg.install:
    - tgt: 'myminion'
    - arg:
      - cowsay

 

posted @ 2019-09-26 16:36  在半空頫視地球╰☆╮  阅读(449)  评论(0编辑  收藏  举报