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

时间:2017-06-29 18:43:40

标签: chef chef-recipe

需要一些专业知识帮助,

我正在尝试查看是否有办法从执行厨师客户端运行的数组中随机选择一个属性。

实施例, 我有这个属性

default['collectors_a'] = { a, b, c, d, e}

并在配方中我想从数组中随机选择一个元素。

有谁知道如何去做?

非常感谢你帮忙!!!!

1 个答案:

答案 0 :(得分:1)

所以有一些问题,{...}用于哈希,而不是数组。在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等输入的一致哈希值。