2017-06-02 95 views
0

我正面臨解決一個新手發現5分鐘與廚師開始的問題。廚師:做一些服務開始時

較具體來說:

  1. 我希望有一個服務啓動。
  2. 當開始做一些事情(執行命令,創建一個文件,...)

目前,我解決了使用此:

service 'mongod' do 
    action :start 
end 

execute "Add Mongo Users" do 
    command "mongo #{host}:#{port} /tmp/mongo.setup.users.js" 
    retries 5 #times 
    retry_delay 10 #seconds 
end 

這不是一種優雅的方式讓它工作我相信。

我的問題是:有什麼辦法來解決它使用通知和訂閱。我已經看過文檔,但我不知道如何獲取它。

+0

你的JS腳本是冪等的嗎?即如果運行兩次,它會做正確的事情嗎? – coderanger

回答

0

它是那麼容易,因爲:

execute 'foo' do 
    cmd 'bar' 
    subscribes :run, 'service[mongod]', :immediate # or :delayed 
end 

一般情況下,這樣notifiessubscribes是:

subscribes|notify, 'resource_type[resource_name]', :timer 

而且,@coderanger說,我會很小心的JavaScript不是冪等的(這意味着它在這種情況下反覆創建用戶,即使它們已經存在)。

我個人認爲,這將是這更優雅的寫作your own library,有一個MongoDB driver for Ruby,你可以用它來創建/刪除/編輯用戶,索引文件......同時保持這一切保持乾淨你的Ruby裏面的廚師代碼,(在我看來)是更類似於「基礎結構作爲代碼」的概念。

+0

謝謝@Navarro。我試過你的方法,我認爲我做的事情很錯。我編輯了這篇文章。我真的做錯了嗎? – Jordi

+0

我剛剛用一個新的帖子替換了這個帖子版本在stackoverflow [這裏](https://stackoverflow.com/questions/44365961/chef-mmake-sure-a-service-is-listennig-on-network) – Jordi