我的问题的要点在这里:
https://gist.github.com/tsabat/a8f27ae6ac7d1fd3b6f7
高级问题是 chef-solo 似乎没有选择我在我的attriutes/default.rb
文件中为食谱设置的属性。
我最近从 10 位厨师转到了 11 位厨师,我认为一些重大变化让我大吃一惊。
请帮忙。
我的问题的要点在这里:
https://gist.github.com/tsabat/a8f27ae6ac7d1fd3b6f7
高级问题是 chef-solo 似乎没有选择我在我的attriutes/default.rb
文件中为食谱设置的属性。
我最近从 10 位厨师转到了 11 位厨师,我认为一些重大变化让我大吃一惊。
请帮忙。
您需要覆盖其他变量:prefix
、url
和:sbin_path
default_configure_flags
set['nginx']['version'] = "1.5.3"
set['nginx']['source']['version'] = "1.5.3"
# The Chef checksum of a binary is determined by: shasum -a 256 FILE_NAME
set['nginx']['source']['checksum'] = "edcdf2030750b4eb1ba8cd79365c16a3e33e6136b7fdd8a1a7b4082397f4e92b"
set['nginx']['source']['prefix'] = "/opt/nginx-#{node['nginx']['source']['version']}"
set['nginx']['source']['url'] = "http://nginx.org/download/nginx-#{node['nginx']['source']['version']}.tar.gz"
set['nginx']['source']['sbin_path'] = "#{node['nginx']['source']['prefix']}/sbin/nginx"
set['nginx']['source']['default_configure_flags'] = [
"--prefix=#{node['nginx']['source']['prefix']}",
"--conf-path=#{node['nginx']['dir']}/nginx.conf",
"--sbin-path=#{node['nginx']['source']['sbin_path']}"
]
这是因为这些变量嵌入了其他变量,并且它们是使用尚未被您的值覆盖的值设置的。
通过在包装说明书中指定这些附加变量,您可以确保它们使用您期望的所有更新值。
此外,因为default
值已经在 nginx 食谱中设置,所以最好使用类似set
(a alias for normal
) 的东西,因为它更准确地描述了你在做什么并且具有更高的属性优先级。
所以,我不知道为什么厨师在食谱中对待变量的方式不同,但这是我的解决方法。
从食谱中获取属性的方式发生了一些变化,这让我很烦恼。因为我使用的是 Chef Solo 并且它不支持角色,所以我只是创建了一个角色,覆盖了那里的属性,然后调用了我的基本食谱。
当我在服务器上工作时,这个模型与我对 Chef 的概念化更紧密地结合在一起,所以它对我来说是一个有效的解决方案。我做了以下事情:
创建一个名为 Base 的角色
name "base"
description "The base role"
run_list "recipe[base]"
override_attributes "nginx" =>
{
'install_method' => 'source',
'source' => {'version' => '1.5.3'}
}
通过 Vagrantfile 将角色添加到运行列表
config.vm.provision "chef_solo" do |chef|
chef.cookbooks_path = "vendor/cookbooks"
chef.roles_path = "roles"
chef.data_bags_path = "data_bags"
chef.add_role "base"
end
回答你的要点。
您需要另一个默认属性 "default['nginx']['version'] = 1.5.3" 否则它将覆盖您的编译标志--prefix
。