chef-infra - 如何对 Chef 搜索中的节点进行排序?

标签 chef-infra chef-recipe

我有一个从 chef 搜索返回的节点列表,它将用于创建配置文件。这些节点需要排序,因为

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

最佳答案

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

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

要返回仅包含这些属性的列表,可以扩展为:

nodes.map!{ |n| n[:fqdn] }

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

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

关于chef-infra - 如何对 Chef 搜索中的节点进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19054904/

相关文章:

chef-infra - 如何在跳转框后面引导 Chef 节点

linux - Chef 推荐的执行命令的方式

git - 使用 Berkshelf 解决递归 git cookbook 依赖关系

chef-infra - Chef - 在资源之前通知执行

ruby - 如何为 Chef 处理程序安装依赖项?

ruby - Chef-solo 无法找到 Chef::Resource::PythonPip

ruby - Chef ruby​​_block 执行导致错误

chef-infra - 菜谱中的cookbook_name - TypeError : no implicit conversion of Symbol into String

chef-infra - 如何在 Chef 中定义和调用数组?

chef-infra - 如何查看 Chef Recipe 的所有版本?