Chef infra 按角色中的环境重写属性
我希望基于环境覆盖角色的属性,就像我可以使用env_run_列表基于环境覆盖角色的run_列表一样 在我的情况下,这是为Nagios支票。我需要一个默认检查,但我也希望不同类型的机器(使用角色)具有不同的检查级别,另外,我希望根据角色对不同的环境具有不同的检查级别 理想情况下,我希望在机器类型的角色中使用类似的内容(在web服务器角色中使用假设的“env_attributes”指令:Chef infra 按角色中的环境重写属性,chef-infra,Chef Infra,我希望基于环境覆盖角色的属性,就像我可以使用env_run_列表基于环境覆盖角色的run_列表一样 在我的情况下,这是为Nagios支票。我需要一个默认检查,但我也希望不同类型的机器(使用角色)具有不同的检查级别,另外,我希望根据角色对不同的环境具有不同的检查级别 理想情况下,我希望在机器类型的角色中使用类似的内容(在web服务器角色中使用假设的“env_attributes”指令: name "webserver" description "A machine that serves webs
name "webserver"
description "A machine that serves webs"
env_attributes (
"_default" => [
"nagios" => [
"check_interval" => "60"
"retry_interval" => "3
]
],
"CompanyStackA" => [
"nagios" => [
"check_interval" => "10"
"retry_interval" => "2
]
],
"CompanyStackB" => [
"nagios" => [
"check_interval" => "50"
"retry_interval" => "1
]
]
)
我不想做的是为每种机器类型编写属性,拥有默认值是必不可少的,所以我不希望为实际环境中的所有角色设置大量属性。最简单的方法是什么?似乎无法通过角色+环境覆盖属性,如果可以的话,对于运行列表来说,这似乎是一个疏忽。代码建议的实现方法是在单独的烹饪书中完成。他们的理由是,它将所有逻辑都包含在烹饪书中,而不是分散在角色、烹饪书和环境中 您可以专门创建一本食谱来覆盖您试图设置的属性。使用此模型,食谱的default.rb可能包含以下内容:
if node.run_list.roles.include?('webserver')
if node.environment == 'CompanyStackA'
node.override['nagios']['check_interval'] = "10"
node.override['nagios']['retry_interval'] = "2"
else if node.environment == 'CompanyStackB'
node.override['nagios']['check_interval'] = "50"
node.override['nagios']['retry_interval'] = "1"
else
node.override['nagios']['check_interval'] = "60"
node.override['nagios']['retry_interval'] = "3"
end
end
这里有一个指向Opscode的链接,他们拒绝了一个类似的想法,理由是它应该包含在单独的烹饪书中:为什么不把属性放在环境中……这些属性实际上是角色级属性,但我想做角色+环境。如果我在环境级这样做,我不会我不能使用每个角色的属性…是吗?但是角色只是数据…我不太明白这一点