如何使用不同的参数多次运行相同的厨师食谱

时间:2015-09-20 06:40:53

标签: vagrant chef

我有一个配方在文件系统上安装一个进程,然后一个runit服务来管理进程 - 最终通知命令将唯一配置复制到进程主目录并重新启动进程。这适用于单个进程 - 但是当我尝试多次运行时,即。当循环遍历属性时,我得到了与生命周期相关的奇怪副作用。

我得到错误的一个例子

Chef::Exceptions::EnclosingDirectoryDoesNotExist 

用于/ srv / second-process。然而,这个目录是我在提供者内部的通知块中创建的第一个目录 - 可能是主厨不是孤立的吗?我还看到第一个数组项的数据泄漏到另一个数组中。第一个进程尝试通知r_unit [second-process-id]

从广义上讲,(如果只有一个流程可行)

node["app"]["processes"].each do |key,value| 

    #step 3
    execute 'configure' do  

         command 'cp -r /srv/folder /srv/#{some_key} && sv restart #{some_key}'
         action :nothing

    end
    #step 2
    runit_service current_process_id do

      notifies :run, 'execute[configure]', :delayed

    end
    #step 1
    my_custom_hwrp current_process_id do

      notifying_block do

         new_resource.dirs_to_create.each do |dir_name|

         end

         install_path current_install_path
         notifies :enable,"runit_service[#{current_process_id}]"
      end
    end

end

my_custom_hwrp provider

class Provider < Chef::Provider
   def action_enable 
      deploy_revision current_process_id do 

          new_resource.updated_by_last_action(true)
      end
   end
end

有没有办法可以隔离每个过程的厨师运行?

1 个答案:

答案 0 :(得分:0)

Chef的工作方式最终会使用一个资源execute[configure],该资源将基于上一个key value

如果使用循环创建资源,请确保所有资源都具有唯一名称。

例如

execute "configure-#{key}-#{value}"

否则结果将无法预测。