厨师:启动服务时执行某些操作

时间:2017-06-02 07:41:46

标签: chef

我正面临着解决一个典型的问题,一个新手发现5分钟开始与厨师。

较具体来说:

  1. 我想要一个服务开始。
  2. 启动时执行某些操作(执行命令,创建文件,......)
  3. 目前,我正在解决这个问题:

    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
    

    这不是一种优雅的方式让我相信它。

    我的问题是:有没有办法使用通知和订阅来解决它。我已经看过文档,但我还没弄清楚如何获得它。

1 个答案:

答案 0 :(得分: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 Chef代码中清理和维护,(在我看来)更像是"基础设施作为代码的概念"。