2015-11-26 119 views
0


我們有使用節點屬性配方:廚師 - 覆蓋節點屬性

python_pip 'request_proxy' do 
    virtualenv '/opt/proxy/.env' 
    version node.default['request-proxy']['version'] 
    Chef::Log.info('Auth request proxy #{version}') 
    action :install 
end 

屬性被設置在節點級,一切都OK,但用於測試目的,我要覆蓋它在我的地方(廚房/ vagrant)節點。作爲第一步我添加屬性到我的.kitchen.yml:

suites: 
    - name: default 
    run_list: 
    - recipe[proxy_install] 
    attributes: {request-proxy: {'version': '1.0.8'}} 

不幸的是,節點仍然使用「默認」版本。一切正常,沒有任何錯誤,並完全忽略我的屬性。
後來我試着把它添加到生產節點上的參數文件(chef-client -j params.json),結果是一樣的。

我錯過了什麼?我究竟做錯了什麼?

P.S. Chef::Log.info('Auth request proxy #{version}')也完全被忽略了??

+0

'廚師:: Log.info'將不是資源裏面進行解析,我甚至驚訝它不會引發錯誤作爲錯誤的屬性。將它設置爲'python_pip'資源,它應該在您用雙引號替換單引號以使其插值並將'#{version}'替換爲其值後運行。 (評論和不回答,因爲我不知道有關kitchen.yml問題。) – Tensibai

回答

1

你可以嘗試使用YAML嗎? kitchen.yml不是一個JSON文件,所以我不確定你的JSON嵌入在它裏面會起作用。

attributes: 
    request-proxy: 
    version: '1.0.8' 

而且,你可能不應該使用node.default,除非你想拿起默認值只(永不任何覆蓋)。如果你想使用廚師屬性優先級(默認情況下,正常的,覆蓋力),你應該做的:

node['request-proxy']['version'] 

最後,你也有一個可變的單引號的字符串。這將永遠不會工作就像你期望在Ruby中(你運行rubocop?它會抓住這一點)。用雙引號試試吧,從你的資源中刪除:

Chef::Log.info("Auth request proxy #{version}") 
+0

嗨, 謝謝你的回答。我會嘗試YAML/JSON(都正確https://docs.chef.io/config_yml_kitchen.html),這兩種類型的引用,沒有結果。 問題在於單詞「默認」,沒有它一切正常完美! P.S.廚師::日誌,仍然被忽略:) – parasit

+0

所有有效的JSON也是有效的YAML :) – coderanger

+0

這整個問題可能是一個dup http://stackoverflow.com/questions/23224384/adding-attributes-to-test-kitchen – lamont