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

 salt/event/new_client {

     "_stamp": "2016-04-20T02:37:17.643259"

 }

 20160420103717664109 {

     "_stamp": "2016-04-20T02:37:17.665541", 

     "minions": [

         "minion1"

     ]

 }

 salt/job/20160420103717664109/new {

     "_stamp": "2016-04-20T02:37:17.666289", 

     "arg": [], 

     "fun": "test.ping", 

     "jid": "", 

     "minions": [

         "minion1"

     ], 

     "tgt": "minion1", 

     "tgt_type": "glob", 

     "user": "root"

 }

 salt/job/20160420103717664109/ret/minion1 {

     "_stamp": "2016-04-20T02:37:17.836600", 

     "cmd": "_return", 

     "fun": "test.ping", 

     "fun_args": [], 

     "id": "minion1", 

     "jid": "", 

     "retcode": 0, 

     "return": true, 

     "success": true

 }

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

2、在master上配置Reactor

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

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

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

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

 cat /srv/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 %}

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

 run_state:
local.state.sls:
- tgt: {{data[‘id‘]}}
- arg:
- test
run_init:
local.cmd.run:
- tgt: {{data[‘id‘]}}
- arg:
- echo initsok >> /tmp/cpis

  这个文件运行了两个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会进行自动的初始配置了。

《SaltStack技术入门与实践》—— Event和Reactor系统的更多相关文章

  1. 《SaltStack技术入门与实践》—— 实践案例 <中小型Web架构>3 Memcached配置管理

    实践案例 <中小型Web架构>3 Memcached配置管理 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 Memcached介绍 Me ...

  2. 《SaltStack技术入门与实践》——执行结果处理

    执行结果处理 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 Return组件可以理解为SaltStack系统对执行Minion返回后的数据进行存储或 ...

  3. 《SaltStack技术入门与实践》—— Grains

    Grains 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 前几章我们已经了解SaltStack各个组件以及通过一个案例去熟悉它的各种应用,从这章开 ...

  4. 《SaltStack技术入门与实践》—— Peer

    Peer 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 Peer组件是SaltStack中Minion向Master发布任务的一个组件,使用Peer ...

  5. 《SaltStack技术入门与实践》—— Mine

    Mine 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 Mine是SaltStack收集Minion数据存储到Master的一个组件,它的功能与Gr ...

  6. 《SaltStack技术入门与实践》—— Renderer组件

    Renderer组件 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 前面我们已经提过使用Python语言编写state.sls文件.在SaltSta ...

  7. 《SaltStack技术入门与实践》—— Job管理

    Job管理 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 在SaltStack里面执行任何一个操作都会在Master上产生一个jid号.Minion ...

  8. saltstack技术入门与实践

    基本原理 SaltStack 采用`C/S`模式,server端就是salt的master,client端就是minion,minion与master之间通过`ZeroMQ`消息队列通信. minio ...

  9. 读书笔记---《Docker 技术入门与实践》---为镜像添加SSH服务

    之前说到可以通过attach和exec两个命令登陆容器,但是如果遇到需要远程通过ssh登陆容器的场景,就需要手动添加ssh服务. 下面介绍两种方法创建带有ssh服务的镜像,commit命令创建和通过D ...

随机推荐

  1. hashMap与 hashTable , ArrayList与linkedList 的区别(详细)

    ArrayList 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入删除时非常麻烦LinkedList 采用的将对象存放在独立的空间中,而且在每个空间中还保存下一个 ...

  2. centos官网镜像下载方法

    1.CentoS简介 CentOS(Community Enterprise Operating System,社区企业操作系统)是一个基于Red Hat Linux 提供的可自由使用源代码的企业级L ...

  3. 【ABAP系列】SAP Web Dynpro 技术简介

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP Web Dynpro 技 ...

  4. java中线程同步的理解(非常通俗易懂)

    转载至:https://blog.csdn.net/u012179540/article/details/40685207 Java中线程同步的理解 我们可以在计算机上运行各种计算机软件程序.每一个运 ...

  5. Golang基本类型整理

    总是用的用的就模糊了,不知道基本的类型有哪些,看来要反反复复弄几次. Golang基本类型整理 基本类型以及定义变量需要注意的 对于基本类型的介绍,感觉这个博客讲的比较透彻,基本上都是从源码的角度来入 ...

  6. echars 柱状图正常状态 --》二次封装

    <template> <!-- 柱状图 正常 1. 调用页面引入 import EcharsColumnNormal from '@/components/echarsColumnN ...

  7. centos7 VM虚拟机在主机关机重启后,无法ping通

    解决办法 1.虚拟机的某些网络相关的服务没有启动,打开电脑的服务启动相关服务 2.打开虚拟机的虚拟网络设置,恢复默认设置即可 3.判定虚拟网卡的网关和centos的网关是否一致,如果不一致,改成一致, ...

  8. Mysql-使用xtrabackup添加Slave

    1.备份主库数据(主库操作) (1)安装innobackupex # yum -y install http://www.percona.com/downloads/percona-release/r ...

  9. C/C++ 防止头文件重复包含 #pragma once 与 #ifndef 的区别

    为了避免同一个头文件被多重包含/重复包含,有两种方式: 方式一: #ifndef XXX #define XXX ... ...  //声明语句 #endif  //XXX 方式二: #pragma ...

  10. 【转】sql server数据收集和监控

    转自:https://www.cnblogs.com/zhijianliutang/p/4476403.html 相关系列: https://www.cnblogs.com/zhijianliutan ...