所以我使用这个Node模块从我的API连接到chef。
https://github.com/normanjoyner/chef-api
同样包含一个名为" partialSearch"的方法。它将获取与给定条件匹配的所有节点的确定数据。我所遇到的问题是我们的环境附加了1386个节点,但似乎模块最多只返回1000个。
似乎没有任何方法可以"抵消"结果。这个模块工作得很好,很遗憾这个功能没有实现,因为它缺乏真正打破了这种功能。
这是我的代码摘录:
chef.config(SetOptions(environment));
console.log("About to search for any servers ...");
chef.partialSearch('node',
{
q: "name:*"
},
{
name: ['name'] ,
'ipaddress': ['ipaddress'] ,
'chef_environment': ['chef_environment'] ,
'ip6address': ['ip6address'],
'run_list': ['run_list'],
'chef_client': ['chef_client'],
'ohai_time': ['ohai_time']
}
, function(err, chefRes) {
问候!
答案 0 :(得分:0)
我们遇到了与Chef库类似的问题。如果您有一些节点属性可用于将所有节点分割为小于1000的较小组,则可能会发现一个有用的解决方法。
如果您还没有这样的自然分割友好,一个简单的实现就是创建一个名为segment的新属性,并在您的厨师运行期间将属性的值随机设置为1到5之间的数字。
现在你可以执行5个查询(每个查询只搜索一个段),你应该找到所有节点,如果随机性正常,每个组的大小将大约为275(1386/5)。
随着节点数量的增长,您需要不断增加细分数量,以确保细分受众群数量小于1000.
答案 1 :(得分:0)
每页最多1000个结果,您仍然可以按顺序请求页面。 Chef API没有用于分页的正式游标系统,因此它只是具有不同start
值的单独请求,这有时会导致轻微的异步(因为在一个页面末尾的项目可能会在排序中发生变化)并且还显示在下一页的开头)所以只要确保你处理它。也就是说,您链接的客户端库中的奇特API似乎没有公开该选项,因此您必须添加它或以其他方式解决问题。查看https://github.com/sethvargo/chef-api/blob/master/lib/chef-api/resources/partial_search.rb#L34以获取处理它的Ruby实现。