《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
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系统的更多相关文章
- 《SaltStack技术入门与实践》—— 实践案例 <中小型Web架构>3 Memcached配置管理
实践案例 <中小型Web架构>3 Memcached配置管理 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 Memcached介绍 Me ...
- 《SaltStack技术入门与实践》——执行结果处理
执行结果处理 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 Return组件可以理解为SaltStack系统对执行Minion返回后的数据进行存储或 ...
- 《SaltStack技术入门与实践》—— Grains
Grains 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 前几章我们已经了解SaltStack各个组件以及通过一个案例去熟悉它的各种应用,从这章开 ...
- 《SaltStack技术入门与实践》—— Peer
Peer 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 Peer组件是SaltStack中Minion向Master发布任务的一个组件,使用Peer ...
- 《SaltStack技术入门与实践》—— Mine
Mine 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 Mine是SaltStack收集Minion数据存储到Master的一个组件,它的功能与Gr ...
- 《SaltStack技术入门与实践》—— Renderer组件
Renderer组件 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 前面我们已经提过使用Python语言编写state.sls文件.在SaltSta ...
- 《SaltStack技术入门与实践》—— Job管理
Job管理 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 在SaltStack里面执行任何一个操作都会在Master上产生一个jid号.Minion ...
- saltstack技术入门与实践
基本原理 SaltStack 采用`C/S`模式,server端就是salt的master,client端就是minion,minion与master之间通过`ZeroMQ`消息队列通信. minio ...
- 读书笔记---《Docker 技术入门与实践》---为镜像添加SSH服务
之前说到可以通过attach和exec两个命令登陆容器,但是如果遇到需要远程通过ssh登陆容器的场景,就需要手动添加ssh服务. 下面介绍两种方法创建带有ssh服务的镜像,commit命令创建和通过D ...
随机推荐
- Failed building wheel for netifaces
目录 文章目录 目录 问题 解决 问题 安装 OpenStackClient 的时候发现问题: Failed building wheel for netifaces Running setup.py ...
- Delphi 快速检测是否联网 判断网线是否拔开。 但是不能判断是否能上网
https://blog.csdn.net/chelen_jak/article/details/50204145 Delphi 快速检测是否联网 2015年12月07日 12:01:26 chele ...
- 【Linux 应用编程】进程管理 - 进程、线程和程序
基本概念 程序和进程的区别 程序是平台相关的二进制文件,只占用磁盘空间.编写完程序代码后,编译为可执行的二进制文件即可. 进程是运行中的程序,占用 CPU.内存等系统资源. 通过 Shell 命令,可 ...
- elementUI 分页bug解决
在使用elementui的分页组件时,我发现当对表格数据进行删除时,而且是删除到该页最后一条数据时,当前页面currentPage并不能自动减1,也就是说,当前页currentPage只有你点击页码时 ...
- xmake从入门到精通10:多个子工程目标的依赖配置
xmake是一个基于Lua的轻量级现代化c/c++的项目构建工具,主要特点是:语法简单易上手,提供更加可读的项目维护,实现跨平台行为一致的构建体验. 本文主要详细讲解下,如果在一个项目中维护和生成多个 ...
- APIView的流程分析
APIView的流程分析 1.入口,因为视图类的继承APIView()的 as_view()是一个绑定类的方法 2.进入as_view(),正好这个as_view()有个返回值 返回的是dispat ...
- QT linux下显示中文的问题
如果中文显示为乱码,那么是字符集不对. 应该设置字符集: QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK") ...
- 洛谷 P5663 加工零件 & [NOIP2019普及组] (奇偶最短路)
传送门 解题思路 很容易想到用最短路来解决这一道问题(题解法),因为两个点之间可以互相无限走,所以如果到某个点的最短路是x,那么x+2,x+4也一定能够达到. 但是如何保证这是正确的呢?比如说到某个点 ...
- tensorflow学习笔记六----------神经网络
使用mnist数据集进行神经网络的构建 import numpy as np import tensorflow as tf import matplotlib.pyplot as plt from ...
- 小白学Python——用 百度翻译API 实现 翻译功能
本人英语不好,很多词组不认识,只能借助工具:百度翻译和谷歌翻译都不错,近期自学Python,就想能否自己设计一个百度翻译软件呢? 百度翻译开放平台: http://api.fanyi.baidu.co ...