Chef infra 如何使用刀索洛和厨师索洛搜索按角色查找节点,即搜索(:节点,“角色:某些角色”)?

Chef infra 如何使用刀索洛和厨师索洛搜索按角色查找节点,即搜索(:节点,“角色:某些角色”)?,chef-infra,chef-solo,knife-solo,Chef Infra,Chef Solo,Knife Solo,我正在尝试使用knife solo设置几个服务器,我需要在菜谱中使用基本搜索,以便知道哪些服务器正在实现特定的角色。这似乎是使用搜索的最基本目的 我正在使用chef solo搜索,但是我无法按角色查找节点,正如文档中所描述的那样;我完全被难住了。我可以找到一个解决方案,但似乎我做错了什么。我构建了一个简化的示例来演示我的问题 这不管用。。。 我创建了一个虚拟角色roles/test_role.json { 名称:test_角色, 默认_属性:{}, json_类:Chef::Role, 运行列表

我正在尝试使用knife solo设置几个服务器,我需要在菜谱中使用基本搜索,以便知道哪些服务器正在实现特定的角色。这似乎是使用搜索的最基本目的

我正在使用chef solo搜索,但是我无法按角色查找节点,正如文档中所描述的那样;我完全被难住了。我可以找到一个解决方案,但似乎我做错了什么。我构建了一个简化的示例来演示我的问题

这不管用。。。 我创建了一个虚拟角色roles/test_role.json

{ 名称:test_角色, 默认_属性:{}, json_类:Chef::Role, 运行列表:[], 说明:, 覆盖_属性:{} } 使用test_角色测试搜索节点的基本方法: 网站cookbooks/nodesearch/recipes/default.rb

需要用刀搜索 包括厨师长个人搜索 这是chef solo search shows搜索实现角色的节点的测试代码。 看见https://github.com/edelight/chef-solo-search/blob/master/tests/test_search.rb ~208行 节点=搜索:节点,角色:测试\角色 这将为搜索中找到的每个节点创建一行。。。 search_content=nodes.map{| node | id:{node['id']}run_list:{node['run_list']}\n}.join 并将其写入文件 文件/var/test\u role\u nodes.txt do 内容搜索 行动:创建 终止 我创建了两个节点:

nodes/node1.json

{ id:node1, 运行列表:[配方[nodesearch]] } nodes/node2.json

{ id:node2, 运行\u列表:[角色[测试\u角色]] } 当我烹饪运行nodesearch配方的node1时,我希望search:node,role:test\u role search找到node2,但它什么也不返回。我已尝试将节点定义移动到data\u bags目录 因为有些地方的文件似乎暗示这是必要的,我已经尝试了各种各样的方法 使用solo.rb设置的恶作剧,等等。我相信我已经按照文档说明设置了chef solo search,我没有发现任何错误。没有创意

但这是有效的。。。 我所做的唯一有效的事情是:从以下内容重写搜索配方:

节点=搜索:节点,角色:测试\角色 为此:

节点=搜索:节点,运行\列表:*角色\\[测试\角色\\]* 第二种形式实际上得到了我想要的结果。这是一个可以接受的解决办法,但它似乎有点像黑客,它让我想知道。。。 要么我一定是做错了什么,要么刀子索洛和厨师索洛搜索的所有文件都是错误的 这似乎不太可能

有人能解释一下为什么我不能使用search:node,role:test\u role获得任何搜索结果吗


出于一些经过仔细考虑的原因,我们明确选择不使用chef服务器解决方案。

chef Solo不支持搜索:

chef solo是chef客户端的一个开源版本,它允许使用带有节点的Cookbook,而无需访问服务器。chef solo在本地运行,并要求cookbook及其任何依赖项与节点位于同一物理磁盘上。chef solo是chef客户端的有限功能版本,不支持以下功能:

节点数据存储
搜索索引它不起作用,因为您需要在节点的JSON文件中为CHEF SOLO搜索指定它,以将其视为真正的节点对象,而不是普通散列:

在此之后,将按角色进行搜索。因此,您的示例node2基本上应该如下所示:

{
  "id": "node2",
  "run_list": ["role[test_role]"]
  "json_class": "Chef::Node"
}

我注意到了这一点,通过检查厨师独奏搜索的测试,您在第一个答案的最后一条评论中链接了这些测试。角色搜索测试只在alpha和beta节点上运行,而不在没有类节点的情况下运行,我发现了区别,即后一个类断言为哈希,而不是Chef::node。

是的,这就是为什么我也使用Chef solo search。。。我可能没有正确地使用它,但它确实适用于各种搜索,只是不适用于节点/角色搜索。我认为chef solo search不支持高级用例,如搜索角色或在节点上运行列表。不知道术语方面是否有一些困难。例如,这是:search:node,role:test\u role索引搜索,而这个search:node,run\u list:*role\[test\u role\]*不是?或者我可能在节点vrs数据包/节点/刀索洛和厨师索洛搜索之间的不匹配中迷路了吗?sethvargo,谢谢,我根据我引用的测试代码假设它迷路了:~第208行,但不受支持可能是我无法让它工作的最简单解释-至少在我的装备上,当前版本不会以这种方式工作。将json_class:Chef::Node元素添加到节点会导致将id值设置为nil,从而导致访问数据包_项(即节点)时出错。
{
  "id": "node2",
  "run_list": ["role[test_role]"]
  "json_class": "Chef::Node"
}