salt manage event reactor

salt Event和Reactor系统

  1. salt Event说明

    1
    2
    Event是SaltStack里面的对每个事件的一个记录,它相比job更加底层,Event能记录更加详细的SaltStack事件,比如:Minion服务启动后请求Master签发证书或者证书校验的过程,都能通过Event事件来查看整个过程.
    Event也为扩展SaltStack提供了更加友好的接口.目前官方已经列出一些Event事件,包括认证,Minion连接Master,key认证,job等
  2. 查看event事件

    1
    [root@salt-master ~]# salt-run state.event pretty=True
  3. salt Reactor系统

    1
    Reactor是基于Event的每个事件来做相应的操作(states).我们可以理解Reactor系统是一直监听着Event,然后触发一些States操作.例如:在我们日常大规模新机器上线或者初始化机器的时候,都希望Minion第一次服务起来的时候就能完成所有的配置,这个时候需要自动完成Minion的证书签发和根据不同的业务完成不同states配置.恰好Reactor就是干这个事情的.
  4. master配置文件中添加如下内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    [root@salt-master ~]# vim /etc/salt/master
    reactor:
    - 'salt/auth': #监听证书认证event
    - /mnt/data/salt.repo/reactor/minion.sls #执行states sls文件
    - 'salt/minion/*/start': #监听Minion start event
    - /mnt/data/salt.repo/reactor/auto.sls #执行states sls文件

    [root@salt-master ~]# vim /mnt/data/salt.repo/reactor/minion.sls
    {% if 'act' in data and data['act'] == 'pend' and data['id'].startswith('Min') %}
    key_accept:
    wheel.key.accept:
    - match: {{ data['id'] }}
    {% endif %}

    [root@salt-master ~]# vim /mnt/data/salt.repo/reactor/auto.sls
    run_state:
    local.state.sls:
    - tgt: {{ data['id'] }}
    - arg:
    - shencan
    fun_init:
    local.cmd.run:
    - tgt: {{ data['id'] }}
    - arg:
    - echo initsok |tee /tmp/cpis

    [root@salt-master ~]# vim /mnt/data/salt.repo/salt/base/shencan.sls
    /tmp/example:
    file.managed:
    - source: salt://example

    5. 重启salt-master服务

    6. 启动一台新的minion客户端,并且minion配置文件的ID中必须以"Min"开头即可.当minion启动时会自动初始化配置了