如何从Chef搜索中对节点进行排序?

bor*_*ing 2 chef-infra chef-recipe

我有一个从厨师搜索返回的节点列表,它将用于创建配置文件.这些节点需要订购,因为

  1. 配置文件所用的软件需要这些节点按顺序排列
  2. Chef并不总是以相同的顺序返回节点,因此即使配置保持不变,每次Chef运行时都会重写该文件.

bor*_*ing 6

要创建按属性排序的节点列表,您可以执行以下操作:按节点名称对节点进行排序:

nodes = search(:node, "fqdn:*")
nodes.sort_by!{ |n| n[:fqdn] }
Run Code Online (Sandbox Code Playgroud)

要返回仅包含这些属性的列表,可以使用以下命令进行扩展:

nodes.map!{ |n| n[:fqdn] }
Run Code Online (Sandbox Code Playgroud)

在更新版本的Chef上,:filter_result可用于仅获取将使用的节点属性:

nodes = search(:node, "fqdn:*", filter_result: { fqdn: [:fqdn] })
nodes.map! { |node| node[:fqdn] }
nodes.sort!
Run Code Online (Sandbox Code Playgroud)