厨师循环食谱和传递数据?
Chef Looping Recipes and Passing Data?
在 Chef Solo 中,我在一个名为 projects 的食谱中创建了多个虚拟主机。我有三个用于编译 1 个项目的配方:
- 食谱
- gunicorn::addsite
- nginx::addsite
- 主管::添加站点
他们只生成需要的模板。我在想:
- 如何 运行 循环中的所有三个配方来创建多个项目?
- 像下面这样包含食谱的方法是否正确?
projects/default.rb
django.each do |params|
include_recipe "gunicorn::addsite"
include_recipe "nginx::addsite"
include_recipe "supervisor::addsite"
end
那么在那个循环的食谱中,我可以像下面这样传递全局变量吗?
gunicorn/addsite.rb
template "/var/server/gunicorn/#{params['vhost']}.sh" do
..
..
end
我没有使用数据包,因为我使用的是 Vagrant 和 OpsWorks,这在 OpsWorks 中有点棘手。谢谢你的帮助。
您可以为每次迭代(每个应用程序)动态填充节点属性,这些属性基本上是全局变量。只需将其设置在主食谱中,然后在其他食谱中阅读即可。
例如:
projects/default.rb
django.each do |params|
node.default["my_app"]["virtual_host"] = params
include_recipe "gunicorn::addsite"
include_recipe "nginx::addsite"
include_recipe "supervisor::addsite"
end
gunicorn/addsite.rb
template "/var/server/gunicorn/#{node['my_app']['virtual_host']}.sh" do
..
..
end
__
此方法的替代方法是使嵌套食谱接收数组。并将数组创建到主配方中。使用这种方法,您的食谱可以根据传递的数组中的元素数量创建一个或多个模板。
projects/default.rb
node.default["my_app"]["virtual_hosts"] = django
include_recipe "gunicorn::addsite"
include_recipe "nginx::addsite"
include_recipe "supervisor::addsite"
gunicorn/addsite.rb
node['my_app']['virtual_hosts'].each do |host|
template "/var/server/gunicorn/#{host}.sh" do
..
..
end
end
在 Chef Solo 中,我在一个名为 projects 的食谱中创建了多个虚拟主机。我有三个用于编译 1 个项目的配方:
- 食谱
- gunicorn::addsite
- nginx::addsite
- 主管::添加站点
他们只生成需要的模板。我在想:
- 如何 运行 循环中的所有三个配方来创建多个项目?
- 像下面这样包含食谱的方法是否正确?
projects/default.rb
django.each do |params|
include_recipe "gunicorn::addsite"
include_recipe "nginx::addsite"
include_recipe "supervisor::addsite"
end
那么在那个循环的食谱中,我可以像下面这样传递全局变量吗?
gunicorn/addsite.rb
template "/var/server/gunicorn/#{params['vhost']}.sh" do
..
..
end
我没有使用数据包,因为我使用的是 Vagrant 和 OpsWorks,这在 OpsWorks 中有点棘手。谢谢你的帮助。
您可以为每次迭代(每个应用程序)动态填充节点属性,这些属性基本上是全局变量。只需将其设置在主食谱中,然后在其他食谱中阅读即可。
例如:
projects/default.rb
django.each do |params|
node.default["my_app"]["virtual_host"] = params
include_recipe "gunicorn::addsite"
include_recipe "nginx::addsite"
include_recipe "supervisor::addsite"
end
gunicorn/addsite.rb
template "/var/server/gunicorn/#{node['my_app']['virtual_host']}.sh" do
..
..
end
__
此方法的替代方法是使嵌套食谱接收数组。并将数组创建到主配方中。使用这种方法,您的食谱可以根据传递的数组中的元素数量创建一个或多个模板。
projects/default.rb
node.default["my_app"]["virtual_hosts"] = django
include_recipe "gunicorn::addsite"
include_recipe "nginx::addsite"
include_recipe "supervisor::addsite"
gunicorn/addsite.rb
node['my_app']['virtual_hosts'].each do |host|
template "/var/server/gunicorn/#{host}.sh" do
..
..
end
end