【发布时间】:2014-06-25 08:14:17
【问题描述】:
默认属性的典型用例
配方属性:
default['human']['jack']['arms'] = 2
default['human']['jack']['legs'] = 2
default['human']['jack']['heads'] = 1
在节点/角色中:
override['human']['jack']['legs'] = 1
配方中也有:
node.override['human']['jack']['legs'] = 1
我的动态集合用例
如果我的配方不知道 Jack 将存在某个节点/角色并且我想要一个用于大量条目的动态集合怎么办。定义或合并默认值的好策略是什么?
我不想建议一个解决方案,所以我将在我的示例中使用 组成的通配符,其中 Jack 和 Jill 不同但我不必定义默认值(比如两个手臂和一个头)每次我定义一个新实例时。
配方属性:
default['human'][*] = {
"arms" => 2,
"legs" => 2,
"heads" => 1
}
在节点/角色中:
default['human']['jack'] = {
"legs" => "1"
}
default['human']['jill'] = {
"superpower" => "flying"
}
【问题讨论】:
-
顺便说一句,我选择示例是因为我无法轻松描述这个问题。这是第三方解决了如何使用自定义merge_attribute_tree“为多元素属性树提供默认值”的方法。 Chef/ruby 肯定有一个干净的内置解决方案
-
您最好为此使用数据包。如果做不到这一点,您可能会考虑创建一个默认哈希,因为缺少更好的短语,您可以在配方本身中复制模板。
-
是的,我们确实使用了数据包,但我看不出它们如何帮助逻辑在未为实例定义时合并默认值......你是如何解决这个问题的?
标签: ruby attributes chef-recipe chef-infra