Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.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需要这么多属性类型?_Chef Infra_Chef Recipe - Fatal编程技术网

Chef infra 为什么Chef需要这么多属性类型?

Chef infra 为什么Chef需要这么多属性类型?,chef-infra,chef-recipe,Chef Infra,Chef Recipe,根据(矿山)的重点: chef客户端使用六种类型的属性来确定 在chef客户端运行期间应用于节点的值 我有一些厨师的经验,但几年来,我从未遇到过需要不同属性类型的用例。 现在,一位同事在我提议的一项修改中留下了这一评论: 您确定此default覆盖了食谱的default? 对于这种情况,normal不是更好吗 我当然不确定。我很困惑 什么用例可以证明具有这种复杂性?为什么Chef需要这么多属性类型?总而言之,Chef不需要它,它允许它为方便起见 我建议不要使用normal,因为这种类型的属性永久

根据(矿山)的重点:

chef客户端使用六种类型的属性来确定 在chef客户端运行期间应用于节点的值

我有一些厨师的经验,但几年来,我从未遇到过需要不同属性类型的用例。 现在,一位同事在我提议的一项修改中留下了这一评论:

您确定此
default
覆盖了食谱的
default
? 对于这种情况,
normal
不是更好吗

我当然不确定。我很困惑


什么用例可以证明具有这种复杂性?为什么Chef需要这么多属性类型?

总而言之,Chef不需要它,它允许它为方便起见

我建议不要使用
normal
,因为这种类型的属性永久存储在node对象中,其中
default
覆盖始终在编译时计算。优先顺序很重要,一个
覆盖
将优先于
正常
,它将优先于
默认
。此方案在您链接到的中提供

由于有这么多不同类型的原因,它允许在一本烹饪书中定义默认值,然后在包装器烹饪书、角色、环境或食谱中取代它们,而无需更改烹饪书本身

示例案例:我希望在3个盒子上设置一个Apache服务器,我将从一本食谱开始,使用默认的
listen\u port
属性80进行apache2的最小安装

对于我的一般情况(3上的2个节点),我希望让Apache监听端口800而不是默认的80,并添加一些额外的配置。我将围绕apache安装做一个通用包装,将
listen\u port
属性更改为800,并进行额外的配置

对于第三个节点,我希望有相同的配置,但让它监听端口2053。为了解决这个问题,我可以在节点上、角色中或另一个包装器cookbook中设置属性

如果在任何时候我希望确保我设置的参数不会被包装器或角色取代,我可以通过在包装器cookbook的属性文件中使用
override
而不是
default
来获得它的级别,这表明我愿意覆盖此值,并且在包含时不会让它被取代


在一天结束时,对于99%的情况,坚持默认级别应该足够了,但其他级别在需要时可用,用于快速修复或调试等目的。

总而言之,Chef不需要它,它允许它是为了方便

我建议不要使用
normal
,因为这种类型的属性永久存储在node对象中,其中
default
覆盖始终在编译时计算。优先顺序很重要,一个
覆盖
将优先于
正常
,它将优先于
默认
。此方案在您链接到的中提供

由于有这么多不同类型的原因,它允许在一本烹饪书中定义默认值,然后在包装器烹饪书、角色、环境或食谱中取代它们,而无需更改烹饪书本身

示例案例:我希望在3个盒子上设置一个Apache服务器,我将从一本食谱开始,使用默认的
listen\u port
属性80进行apache2的最小安装

对于我的一般情况(3上的2个节点),我希望让Apache监听端口800而不是默认的80,并添加一些额外的配置。我将围绕apache安装做一个通用包装,将
listen\u port
属性更改为800,并进行额外的配置

对于第三个节点,我希望有相同的配置,但让它监听端口2053。为了解决这个问题,我可以在节点上、角色中或另一个包装器cookbook中设置属性

如果在任何时候我希望确保我设置的参数不会被包装器或角色取代,我可以通过在包装器cookbook的属性文件中使用
override
而不是
default
来获得它的级别,这表明我愿意覆盖此值,并且在包含时不会让它被取代


在一天结束时,对于99%的情况,坚持默认的
级别应该足够了,但是其他级别在需要时可用,用于快速修复或调试等目的。

请参阅我对上一个问题的回答的最后一部分:

复制于此:

厨师属性的问题在于,它们已经有机地成长起来,并涌现出许多选项,试图帮助那些把自己画进角落的用户。一般来说,您永远不需要触摸属性的自动、正常、强制默认或强制覆盖级别。您还应该避免在配方代码中设置属性。您应该将配方中的设置属性移动到属性文件中。剩下的是设置属性的位置:

在初始-j参数中(设置普通属性,您应该限制使用它来设置run_状态,过度使用它通常是错误的) 在角色文件中作为默认或覆盖优先级别(但要小心,因为角色没有版本控制,如果经常接触这些属性,将导致生产问题) 在cookbook属性文件中设置为默认或覆盖优先级(这是设置大多数属性的位置) 在环境文件中作为默认或覆盖优先级别(对于数据中心中的DNS服务器等设置可能很有用,不过您也可以使用角色和/或食谱) 您还可以在recipes中设置属性,但当您这样做时,您总是会在运行的两阶段编译收敛解析器中获得下一课