zoukankan      html  css  js  c++  java
  • 《SaltStack技术入门与实践》—— Event和Reactor系统

    Event和Reactor系统

    本章节参考《SaltStack技术入门与实践》,感谢该书作者: 刘继伟、沈灿、赵舜东

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

    1、查看Event事件

      可以通过以下命令查看Event事件,然后再开一个终端执行任务:

    salt-run state.event pretty=True

      另一个终端执行salt ‘minion1‘ test.ping

     1 salt/event/new_client {
     2 
     3     "_stamp": "2016-04-20T02:37:17.643259"
     4 
     5 }
     6 
     7 20160420103717664109 {
     8 
     9     "_stamp": "2016-04-20T02:37:17.665541", 
    10 
    11     "minions": [
    12 
    13         "minion1"
    14 
    15     ]
    16 
    17 }
    18 
    19 salt/job/20160420103717664109/new {
    20 
    21     "_stamp": "2016-04-20T02:37:17.666289", 
    22 
    23     "arg": [], 
    24 
    25     "fun": "test.ping", 
    26 
    27     "jid": "20160420103717664109", 
    28 
    29     "minions": [
    30 
    31         "minion1"
    32 
    33     ], 
    34 
    35     "tgt": "minion1", 
    36 
    37     "tgt_type": "glob", 
    38 
    39     "user": "root"
    40 
    41 }
    42 
    43 salt/job/20160420103717664109/ret/minion1 {
    44 
    45     "_stamp": "2016-04-20T02:37:17.836600", 
    46 
    47     "cmd": "_return", 
    48 
    49     "fun": "test.ping", 
    50 
    51     "fun_args": [], 
    52 
    53     "id": "minion1", 
    54 
    55     "jid": "20160420103717664109", 
    56 
    57     "retcode": 0, 
    58 
    59     "return": true, 
    60 
    61     "success": true
    62 
    63 }
    View Code

    这个时候可以看到每个Event事件的详细信息,包括job key校验等信息。

    2、在master上配置Reactor

      在前面已经简单测试了event,接下来说说reactor系统,reactor是基于event的每个事件来做相应的操作(state)。我们可以理解reactor系统是一直监听着event,然后触发一些states操作。下面通过一个例子来讲解下reactor系统的适用场景吧。在我们日常大规模新机器上线或者初始化机器的时候,都希望minion第一次服务起来的时候就能完成所有的配置,这个时候需要自动完成minion的证书签发和根据不同业务完成不同states配置。恰好reactor就是干这个事情的。

    在master配置文件里面添加如下内容

    1 reactor:    
    2   - ‘salt/auth‘:    #监听证书认证event
    3     - /srv/reactor/Minion.sls    #执行states sls文件
    4   - ‘salt/minion/Minion/start‘:    #监听Minion start event
    5     - /srv/reactor/auto.sls    #执行states sls文件

      关于event的定义,可以通过上一章节对event的了解根据需要监听的event来进行相应的配置,当然reactor里面对event的监听还支持正则表达式的方式,下面来看看这两个sates.sls文件吧:

    1 cat /srv/reactor/Minion.sls
    2 {% if ‘act‘ in data and data[‘act‘] == ‘pend‘ and data[‘id‘].startswith(‘Min‘)%}
    3   key_accept:
    4   wheel.key.accept:
    5     - match: {{data[‘id‘]}}
    6 {% endif %}
    View Code

      这个文件主要是取event里面的数据,然后根据minion的ID进行证书签发,我们在state.sls文件里面引入了Jinja相关的语法,下面我们来看看进行初始的auto.sls吧:

     1 run_state:
     2   local.state.sls:
     3     - tgt: {{data[‘id‘]}}
     4     - arg:
     5     - test
     6 run_init:
     7   local.cmd.run:
     8     - tgt: {{data[‘id‘]}}
     9     - arg:
    10     - echo initsok >> /tmp/cpis
    View Code

      这个文件运行了两个module,一个是state.sls进行,一个是cmd.run。第一个run_state的意思跟手动针对minion运行state.sls test一样,第二个run_init表示针对minion运行cmd.run ‘echo initok‘ >> /tmp/cpis一样,下面我们来看下test这个sls文件,我这里只是一个简单的文件管理例子,大家在实际工作中应根据自己的需求去编写state sls文件:

    cat /srv/salt/test.sls
    /tmp/example:
      file.managed:
        - source: salt://example

      到这里,master端的reactor配置就算配置好了,下面我们需要重启master服务,这个时候可以新建一台minion.minion的ID,只要是以min字母开头即可,当minion服务启动后,minion会进行自动的初始配置了。

  • 相关阅读:
    11月30日总结数据显示代码
    11月25日总结
    11月26日总结生成数据前端代码
    11月27日总结生成数据字典后端servlet层
    11月23日后端
    11月28日总结生成数据字典dao层
    11月29日生成数据字典damain层
    今日总结
    ARouter 在多 module 项目中实战
    ARouter 拦截器之多 module 独立运行
  • 原文地址:https://www.cnblogs.com/zuoyang/p/9231746.html
Copyright © 2011-2022 走看看