saltstack(十三)Reactor

來源:互聯網
上載者:User

標籤:介面   通訊   開發   events   2014   

一晃,研究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/newData:{‘_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: lixcData:{‘_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]ter:~# /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了,哈哈!

本文出自 “西風” 部落格,請務必保留此出處http://lixcto.blog.51cto.com/4834175/1431162

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.