我對廚師角色的理解是,在角色中,所有內容都是靜態的,因爲角色內容被加載並解析爲json。不會進行替換等。 但是,可以是json或rb文件的環境內容呢?環境 - 使用對其他屬性的引用在override_attributes中分配屬性
問題的原因是因爲我希望能夠通過在第二個配方中引用它們來重用一個配方中指定的環境文件中的值。
爲了更好地解釋我的問題,想象下面的代碼中,兩個第一個配方http_service和mysql_service「擁有」它們的值名稱,ip和端口。 在監視器配方中,可以聲明多個監視器端點。但配方不知道實際的食譜 - http_service和mysql_service在這裏 - 它只需要名稱,IP和端口。 這是我想避免在分配監視器中的值時重複ip,也沒有監視器配方知道其他配方 - 在這種情況下它需要保持通用。 我知道使用的語法是錯誤的,但我希望它傳達的意圖。 這可以以某種方式完成嗎? 我更喜歡「聲明一次,引用其他地方」的想法。 :)
"override_attributes": {
"http_service":{
"name": "Service_1",
"ip": "10.10.10.1",
"port": "8080"
},
"mysql_service":{
"name": "Service_2",
"ip": "10.10.10.2",
"port": "3306"
},
"monitor":{
"monitor_endpoints":
[
{
"servicename": node[:http_service][:name],
"ip": node[:http_service][:ip],
"port": node[:http_service][:port]
},
{
"servicename": node[:mysql_service][:name],
"ip": node[:mysql_service][:ip],
"port": node[:mysql_service][:port]
}
]
}
}
爲什麼要在配方中使用'node [:xenserver] [:ip]',如果您可以輕鬆使用'node [:infrastructure] [:network] [:gateway]'而不引入任何新的屬性/變量? –