我对厨师角色的理解是,在角色中,所有内容都是静态的,因为角色内容被加载并解析为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]'而不引入任何新的属性/变量? –