chef-solo nginx食谱没有汲取我的属性

时间:2013-07-31 23:11:55

标签: chef vagrant chef-solo

我的问题的要点就在这里:

https://gist.github.com/tsabat/a8f27ae6ac7d1fd3b6f7

高级别的问题是,Chef-solo似乎没有接受我在attriutes/default.rb文件中为食谱设置的属性。

我最近从10岁开始转向厨师11,我认为一些突破性的变化使我超过一桶。

请帮忙。

3 个答案:

答案 0 :(得分:3)

您需要覆盖其他变量:prefixurlsbin_pathdefault_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']}"
]

这是因为这些变量嵌入了其他变量,并且它们是使用尚未被您的值覆盖的值设置的。

通过在包装器手册中指定这些附加变量,可以确保它们使用了您期望的所有更新值。

另外,因为已经在nginx食谱中设置了default值,所以最好使用setnormal的别名)这样的内容更准确描述您正在做什么并且attribute precedence更高。

答案 1 :(得分:0)

回复你的要点。

您需要另一个默认属性“default ['nginx'] ['version'] = 1.5.3”,否则它将覆盖您的编译标记--prefix

答案 2 :(得分:0)

所以,我没有回答为什么厨师在食谱中对变量的处理方式不同,但这是我的修复。

从菜谱中获取属性的方式发生了一些变化让我感到烦恼。由于我使用的是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