saltstack(十三)Reactor

一晃,研究saltstack有一个多礼拜了。坑爹的公司,试用期要6个月,最坑爹的是这6个月啥权限都没有,对于一个运维来说,没权限不等于无米之炊啊。楼主闲着无聊,也只有捣腾捣腾理论,自己搞搞小测试了。

牢骚发完了,继续研究Reactor

说起Reactor,就要从salt的events说起了。那个events是个什么呢?

说起events就要从salt的通信机制说起了,salt采用zeromq通信的,这个zeromq通信有一种模式,叫

Pub/Sub模式,

显而易见pub就是publish,意思就是发布

sub就是subscription,意思就是订阅的意思。

OK,看到这里,大概就知道了,就是一个发一个收嘛。

大概知道这么多就OK了,楼主刚毕业的时候干过大半年的售后维护,接着干了半年运维,没干过开发,太深的东西就不搞了。

OK,events系统就是,一个本地的ZeroMQ的PUB接口,这样events系统就可以产生event了,那么event长啥样的呢?大概就长下面这个样子。

Event fired at Thu Jun 26 10:43:08 2014
*************************
Tag: salt/job/20140626104308591305/new
Data:
{‘_stamp‘: ‘2014-06-26T10:43:08.591696‘,
 ‘arg‘: [‘/bin/ls /home‘],
 ‘fun‘: ‘cmd.run‘,
 ‘jid‘: ‘20140626104308591305‘,
 ‘minions‘: [‘salt-minion‘],
 ‘tgt‘: ‘*‘,
 ‘tgt_type‘: ‘glob‘,
 ‘user‘: ‘root‘}}

每个event都有一个tag,就是标签,有了这个标签,别人就可以认识你了。知道你是干什么的。

当然我们也可以根据标签,来过滤或者说选取我们需要的event。。。。然后tag后面,跟着的就是具体的数据了,这些数据是一个字典结构,这个字典的名字叫Data,内容就是后面的那些个内容了。

OK,以上差不多就是events系统的一个简要描述了。

那啥是Reactor呢?

其实Reactor就是匹配event的tag,如果发现有和我定义相匹配的tag,那么我就可以触发相应的操作。

这玩意和咱们数据库里面的触发器,原理上面有点类似。。

OK,Reactor系统的原理,现在咱们知道了。。。下面来看看怎么去实现吧

首先,修改master的配置。

[email protected]:~# cat >>/etc/salt/master.d/reactor.conf <<EOF
> reactor:
>   - ‘lixc‘:
>     - /srv/reactor/lixc.sls
> EOF
[email protected]:~#

好,reactor这个是我们reactor配置的起始标志,‘lixc‘是我们要匹配的tag,/srv/reactor/lixc.sls就是如果有匹配的标签的话,触发的操作。   这个文件的编写规则和state差不多。

看一下/srv/reactor/lixc.sls

[email protected]:~# cat >>/srv/reactor/lixc.sls <<EOF
> clean_tmp:
>   cmd.cmd.run:
>     - tgt: ‘os:Debian‘
>     - expr_form: grain
>     - arg:
>       - echo "hello liss" >>/tmp/test.log
> EOF

这个sls文件是个啥意思呢。第1行,随便起个名字,第2行cmd.cmd.run是啥意思呢?

意思是使用salt的command的API,执行cmd模块的run函数。啥叫command API呢? 就是说我们在命令行执行的那些个东西,用这个API都可以在这个sls里面用。

这个lixc.sls如果换成在命令行上执行。这么弄也可以。

salt -G ‘os:Debian‘ cmd.run ‘echo "hello liss >>/tmp/test.log"‘

OK,3,4两行就是作用的目标和匹配方式了,5,6两行就是cmd.run这个函数要传进来的参数了。

OK,咱们来测试一下。

我们修改了master的配置文件,首先要重启一下啊master

[email protected]:~# /etc/init.d/salt-master restart
[ ok ] Restarting salt master control daemon: salt-master.

在minion上手动产生一个event,

[email protected]:~# salt ‘*‘ cmd.run "salt-call event.fire_master ‘{"lixc": "lixc"}‘ ‘lixc‘"
salt-minion:
    local:
        True
[email protected]:~#

看一下这个event的详细内容

Event fired at Thu Jun 26 12:30:03 2014
*************************
Tag: lixc
Data:
{‘_stamp‘: ‘2014-06-26T12:30:03.826420‘,
 ‘cmd‘: ‘_minion_event‘,
 ‘data‘: {‘lixc‘: ‘lixc‘},
 ‘id‘: ‘salt-minion‘,
 ‘pretag‘: None,
 ‘tag‘: ‘lixc‘}
Event fired at Thu Jun 26 12:30:03 201

看一下,lixc.sls执行了没?

[email protected]:~# salt ‘*‘ cmd.run ‘cat /tmp/test.log‘
salt-minion:
    Hello liss

OK,Reactor除了可以使用command API也可以使用runner

好,咱们看看。修改/etc/salt/master.d/reactor.conf

[email protected]:~# cat /etc/salt/master.d/reactor.conf 
reactor:
  - ‘lixc‘:
    - /srv/reactor/lixc.sls
    - /srv/reactor/liss.sls
[email protected]:~#

看一下/srv/reactor/liss.sls。注意- env: /home是传递给lsdir.lsdir这个函数的参数。lsdir就是楼主上一篇写的一个runner

[email protected]:~# cat /srv/reactor/liss.sls 
test_runner:
  runner.lsdir.lsdir:
    - env: /home
[email protected]:~#

重启下master,并手动触发一个event

[email protected]:~# /etc/init.d/salt-master restart
[ ok ] Restarting salt master control daemon: salt-master.
[email protected]:~# salt ‘*‘ cmd.run "salt-call event.fire_master ‘{"lixc": "lixc"}‘ ‘lixc‘"
salt-minion:
    local:
        True

看一下,runner执行的结果。

[email protected]:~# cat /tmp/test.log 
salt-minion
  lixc
  lost+found
  salt-develop
  salt-develop.zip

OK,这些是最简单的基本功能了。

saltstack先搞了这里了,经过这一个多礼拜的学习,常用功能基本学习了。因为功能太多了,也没有实际需求和实战,不打算继往下深入看了。还有一个salt API有空总结一下。。

接下来开始转战ansible了,哈哈!

saltstack(十三)Reactor,布布扣,bubuko.com

时间: 2024-10-12 17:28:15

saltstack(十三)Reactor的相关文章

SaltStack的Reactor System

Salt从0.11.0版本开始引入Reactor System. Event System The event system is a local ZeroMQ PUB interface which fires salt events. This event bus is an open system used for sending information notifying Salt and other systems about operations. Reactor SLS files

reactor学习

最近在学习saltstack的reactor模块,由于在业务上没有有关reactor的需求.这里只是举个例子,方便将来参考使用. 原理:reactor分为两部分:tag和sls.reactor去匹配这个tag(event的tag),匹配到则执行对应的sls文件.这个需要结合event.其实这个类似于zabbix的triggers. 在配置文件目录创建master.d/reactor.conf reactor: - 'salt/job/*/ret/*': - /srv/reactor/start.

saltstack集合

saltstack集合 saltstack(一):   saltstack简介 saltstack(二):   saltstack安装及配置 saltstack(三):   saltstack远程执行 saltstack(四):   saltstack配置管理-常用模块介绍 saltstack(五):   saltstack配置管理-minion端安装apache简单样例 saltstack(六):   saltstack配置管理-高级状态top.sls saltstack(七):   salt

saltstack学习笔记10-Event和Reactor系统

Event是saltstack里面的对每个事件的一个记录,它相比job更加底层,event能记录更加详细的saltstack事件,比如minion服务启动后请求master签发证书或者证书校验的过程,都能通过event事件来查看整个过程 event也为扩展saltstack提供了更加友好的接口 官方列出一些event事件,包括认证,minion连接master,key认证,job等 查看event事件 可以通过以下命令查看event事件,然后再打开一个终端执行任务 salt-run state.

Saltstack异步执行命令(十三)

Saltstack异步执行命令 salt执行命令有时候会有超时的问题,就是命令下发下去了,部分主机没有返回信息,这时候就很难判断命令或任务是否执行成功.因此,salt提供异步执行的功能,发出命令后立即返回一个jid.然后我们就可以根据这个jid来查询任务是否执行成功. 命令行实现异步 参数--async,返回job ID,根据job ID我们可以查询执行结果. salt --async '*' test.ping salt-run jobs.lookup_jid 2016111716315335

saltstack 全面介绍

一.关于salt简介,安装和基本配置 转载自: 来自:http://tech.mainwise.cn/?p=438 说明:salt是一个异构平台基础设置管理工具(虽然我们通常只用在Linux上),使用轻量级的通讯器ZMQ,用Python写成的批量管理工具,完全开源,遵守Apache2协议,与Puppet,Chef功能类似,有一个强大的远程执行命令引擎,也有一个强大的配置管理系统,通常叫做Salt State System. 基本原理: SaltStack 采用 C/S模式,server端就是sa

系统自动化配置和管理工具:SaltStack

http://os.51cto.com/art/201308/409041.htm SaltStack                2 Salt,,一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯. salt底层采用动态的连接总线, 使其可以用于编配, 远程执行, 配置管理等等. 参见 其他文档 下载Salt文档的副本: · PDF · ePub 查看之前的Salt版本文档请访问 http://salt.readthed

salt reactor 自动完成Minion的证书签发和根据不同的业务完成不同states配置

cat /etc/salt/master file_roots:   base:     - /srv/salt/base   prod:     - /srv/salt/prod interface: 192.168.1.100 reactor:     - 'salt/auth':         - /srv/reactor/Minion.sls     - 'salt/minion/Minion/start':         - /srv/reactor/auto.sls auto.s

自动化运维工具SaltStack详细部署

==========================================================================================一.基础介绍==========================================================================================1.简介SaltStack是一个服务器基础架构集中化管理平台,具备配置管理.远程执行.监控等功能,一般可以理解为简化版的pupp