2013-07-31 95 views
4

不拿起我的問題的要點所在位置:廚師獨奏nginx的配方在我的屬性

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

高層次的問題是,廚師獨奏似乎沒有拿起屬性我在我的attriutes/default.rb文件中設置了一個配方。

我最近從10號轉向11號廚師,我認爲一些突破性的變化讓我有一個桶。

請幫忙。

+1

看看[這裏](http://stackoverflow.com/questions/17679898/how-to-update-nginx-via-chef/17710858?noredirect=1#comment25813333_17710858)。你的問題似乎與那個有關。 – cassianoleal

+0

你是對的,它與此有關。我真的通過不依賴食譜中的屬性來解決這個問題,相反,我忽略了角色中的屬性。 – timsabat

+0

Oi。我一直在使用廚師獨奏進入這個相同的問題。感謝您提出這個問題。 –

回答

0

回覆了你的要點。

您需要另一個默認屬性「default ['nginx'] ['version'] = 1.5.3」,否則它將覆蓋您的編譯標記--prefix

+0

即使定義了該屬性,我仍然收到了錯誤的前綴。查看要點。 – timsabat

+0

這實際上與融合和廚師11的順序有關,因爲當我將屬性移動到某個角色時,事情就開始正常工作。 – timsabat

0

所以,我沒有回答爲什麼廚師在食譜中對待變量的原因,但這裏是我的修復。

從食譜中挑選屬性的方式發生了一些變化,讓我很煩惱。因爲我使用Chef Solo,並且不支持角色,所以我創建了一個角色,覆蓋了其中的屬性,然後調用了我的基本食譜。

這個模型與我在服務器上工作時概念化廚師的方式密切相關,所以對我來說這是一個有效的解決方案。我做了以下內容:

創建一個名爲基地

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 
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']}" 
] 

這是因爲這些變量嵌入了其他變量,並且它們使用值尚未被覆蓋的值進行設置。

通過在包裝食譜中指定這些附加變量,確保它們正在使用所期望的所有更新值。

而且,因爲default值在nginx的食譜已經設置,最好使用像set(爲normal的別名)爲更加準確地描述你在做什麼,並具有較高的attribute precedence

+0

當然,我可以做到這一點。但是,似乎過度。我想知道爲什麼派生的變量無法識別我重寫了它們派生自的變量。 – timsabat