从数组中随机选择一个键值



需要一些专业知识的帮助,

我正在尝试查看是否有办法从执行 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(的一致哈希。

最新更新