Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Chef infra 按角色中的环境重写属性_Chef Infra - Fatal编程技术网

Chef infra 按角色中的环境重写属性

Chef infra 按角色中的环境重写属性,chef-infra,Chef Infra,我希望基于环境覆盖角色的属性,就像我可以使用env_run_列表基于环境覆盖角色的run_列表一样 在我的情况下,这是为Nagios支票。我需要一个默认检查,但我也希望不同类型的机器(使用角色)具有不同的检查级别,另外,我希望根据角色对不同的环境具有不同的检查级别 理想情况下,我希望在机器类型的角色中使用类似的内容(在web服务器角色中使用假设的“env_attributes”指令: name "webserver" description "A machine that serves webs

我希望基于环境覆盖角色的属性,就像我可以使用env_run_列表基于环境覆盖角色的run_列表一样

在我的情况下,这是为Nagios支票。我需要一个默认检查,但我也希望不同类型的机器(使用角色)具有不同的检查级别,另外,我希望根据角色对不同的环境具有不同的检查级别

理想情况下,我希望在机器类型的角色中使用类似的内容(在web服务器角色中使用假设的“env_attributes”指令:

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的链接,他们拒绝了一个类似的想法,理由是它应该包含在单独的烹饪书中:

为什么不把属性放在环境中……这些属性实际上是角色级属性,但我想做角色+环境。如果我在环境级这样做,我不会我不能使用每个角色的属性…是吗?但是角色只是数据…我不太明白这一点