需要一些专业知识的帮助,
我正在尝试查看是否有办法从执行 chef 客户端运行的数组中随机选择一个属性。
例 我有这个属性
default['collectors_a'] = { a, b, c, d, e}
和 在配方中,我想从数组中随机选择此元素之一。
有谁知道如何去做?
非常感谢您的帮助!!!
所以有几个问题,{...}
是针对哈希的,而不是数组。在Ruby中,数组文字看起来像[...]
,像[1, 2, 3]
或["a", "b", "c"]
。话虽如此,Array 对象上有一个方法可以帮助解决这个问题,Array#sample
将从数组中返回一个随机对象。所以你可能想要类似的东西["a", "b", "c"].sample
.但是请记住,每次 Chef 运行时都会重新滚动选择,这几乎不是您想要的。如果你想要每个服务器随机但一致的内容,你可以这样做:
vals = ["a", "b", "c"]
default["whatever"] = vals[node["shard_seed"] % vals.length]
shard_seed
属性来自 Ohai,是基于许多输入(如 CPU ID 和计算机 UUID(的一致哈希。