chef-api模块/包装器限制1000行

时间:2017-10-24 18:58:48

标签: node.js chef

所以我使用这个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) {

问候!

2 个答案:

答案 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实现。