【问题标题】:Creating resources dynamically in Chef在 Chef 中动态创建资源
【发布时间】:2014-04-01 13:17:21
【问题描述】:

我正在尝试创建一个厨师食谱,它将根据我的应用程序源代码从 git 存储库下载的 yaml 文件的内容动态创建资源。到目前为止我有这个:

git "/home/a_user/#{ node[:my_node][:application] }" do
  repository node[:my_node][:git_repository]
  revision node[:my_node][:git_branch]
  action :sync
  user "a_user"
  group "a_user"
end

require 'yaml'

ruby_block "load the process into the node" do
  block do
     yml = YAML::load(File.open("/home/a_user/#{node[:my_node][:application]}/processes.yml"))
     node.set[:my_node][:worker][:processes] = yml[:processes]
  end
  subscribes :create, "git[/home/a_user/#{ node[:my_node][:application] }]" :immediately
end



node[:my_node][:worker][:processes].each do | name, cmd |
   supervisor_service name do
     command "bash -c \"source /home/a_user/.profile && #{ cmd }\""
     action :enable
   end   
 end 

 service "supervisor" do
    action :restart
 end  

yaml文件格式为:

processes:
    process_a: python myscript.py --a
    process_b: python myscript.py --b

但是,当我执行它时,node[:my_node][:worker][:processes] 的值在编译阶段为空,因此在执行阶段不会执行主管资源。

有人可以给我一个关于如何完成这项工作的指导吗?我遗漏了一些明显的东西,还是我做错了?

【问题讨论】:

标签: chef-infra aws-opsworks


【解决方案1】:

在编译阶段填充属性:

git "/home/a_user/#{ node[:my_node][:application] }" do
  repository node[:my_node][:git_repository]
  revision node[:my_node][:git_branch]
  action :nothing
  user "a_user"
  group "a_user"
end.run_action(:sync)

ruby_block "load the process into the node" do
  block do
     yml = YAML::load(File.open("/home/a_user/#{node[:my_node][:application]}/processes.yml"))
     node.set[:my_node][:worker][:processes] = yml[:processes]
  end
  subscribes :create, "git[/home/a_user/#{ node[:my_node][:application] }]" :immediately
  action :nothing
end.run_action(:create)

【讨论】:

  • 不幸的是,这还需要在编译阶段运行大量其他资源,这开始变得非常混乱并且感觉不是特别“厨师”。
  • 您是否尝试过在ruby_block 上使用lazy?像block lazy { { yml = YAML::... } } 这样的东西。更多信息:docs.opscode.com/resource_common.html#lazy-attribute-evaluation
猜你喜欢
  • 1970-01-01
  • 2013-02-17
  • 2012-03-22
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-11
相关资源
最近更新 更多