標籤:介面 通訊 開發 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