我正在使用下載,安裝,配置SDK的廚師社區食譜。 (我們稱之爲blah-sdk)。你只需要include_recipe'blah-sdk'和viola,它已經安裝了。它有一個屬性指定它將安裝的blah-sdk的版本。這個版本屬性反過來被用來形成相應的'download_url'屬性的值。理論上,我應該能夠將版本屬性的值設置爲食譜中的其他內容,其中包括blah-sdk。但有一個問題。在我的覆蓋版本屬性之前,download_url屬性被設置(使用在blah-sdk食譜中指定的默認版本)。所以錯誤的url被用來檢索默認版本,而不是我想要的版本。我也可以在我的食譜中設置download_url,但這打破了'blah-sdk'食譜的封裝。在開始工作之前,我最終可能會用一些長長的屬性進行實驗性的捶打。有一個更好的方法。它是什麼?廚師的屬性解析
食譜/嗒嗒-SDK /屬性/ default.rb:
default['blah']['version'] = '24.4'
default['blah']['download_url'] = "http://dl.company.com/blah/blah-sdk_r#{node['blah']['version']}-linux.tgz"
食譜/嗒嗒-SDK /食譜/ default.rb:
...
print("blah version: #{node['blah']['version']}")
print("blah download_url: #{node['blah']['download_url']}")
...
食譜/ my_cookbook /屬性/默認值。 RB:
normal['blah']['version'] = '24.4.1'
(。我一直在使用默認情況下,force_default,覆蓋和force_override也試過沒有什麼區別)
食譜/ my_cookbook /食譜/ default.rb
...
include_recipe 'blah-sdk'
...
輸出:
==>默認:嗒嗒版本:24.4.1
==>默認:嗒嗒DOWNLOAD_URL :http://dl.company.com/blah/blah-sdk_r24.4-linux.tgz
代碼演示問題和coderanger的建議的解決方案(如果你可以修復第三方食譜): https://github.com/marc-swingler/stackoverflow_question
不是最好的解決方案,但由於加載屬性的順序,將版本放到角色或環境中也可以。 https://christinemdraper.wordpress.com/2014/10/06/avoiding-the-possible-pitfalls-of-derived-attributes/
使用普通優先級屬性是包裝食譜並覆蓋了源食譜默認值。看例子:http://stackoverflow.com/questions/28775225/how-to-use-chef-to-update-alternatives-for-java-using-execute/28775684#28775684 –
試過。我也試過了force_default,override和force_override。同樣的結果。 download_url屬性使用blah-sdk cookbook中定義的版本屬性來解析,而不是在我的包裝器中定義的版本屬性。 (順便說一下,我編輯了這個問題來反映你的建議,希望能讓它更清楚一點。) –