2016-11-28 80 views
0

我繼承了一本食譜,它按照常規在./attributes/default.rb文件中設置了一些屬性。我可以在Chef屬性聲明中使用雙引號嗎?

但是,我們有一個問題與線中的一條,那就是:

default["obscured"]["mysql"] = "#{node['jboss']['jboss_home']}/modules/com/mysql/jdbc/main" 

運行時,將其寫入到這個節點爲:

{}/com/mysql/jdbc/main 

我可以證實,節點['jboss'] ['jboss_home']屬性存在且具有正確的值。

所以,我不能看到上述任何問題,只是在我們的食譜中這種類型的每個其他聲明都對要設置的屬性(即左側)使用單引號,而不是雙引號。我從來沒有聽說過這是一個問題,但我對廚師很新穎。

有沒有規定說他們必須是單引號?

回答

0

答案是沒有規則。

在像這樣使用雙引號是完全沒問題:

default["obscured"]["mysql"] = blah blah 

我知道的原因是,我剛剛發現一個是一套,用雙引號,實際工作。 :-)

0

你在那裏有什麼好的,你如何確認node['jboss']['jboss_home']的價值,以及你如何在模板中使用它?

在Ruby中,單引號和雙引號文字都成爲String s,但單引號相對文字,而雙引號允許反斜槓轉義和#{}插值。

0

你最有可能擊中派生屬性問題:

https://coderanger.net/derived-attributes/

被設置jboss_home屬性之前在你的食譜屬性代碼得到解析。不管怎樣,解決方案是將插值移動到配方代碼中。

您可以使用普通的舊ruby變量而不是您嘗試構建的屬性 - 特別是如果系統中沒有其他設置設置該屬性。

你也應該能夠從您的屬性文件中刪除聲明,並在配方代碼中使用此還有:雖然你需要提前放置該聲明在run_list

node.default_unless["obscured"]["mysql"] = 
    "#{node['jboss']['jboss_home']}/modules/com/mysql/jdbc/main" 

,您曾經使用node["obscured"]["mysql"]前作爲任何資源的參數。

相關問題