首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过小刀搜索和主厨单独搜索,即搜索(:node,"role:some_role")找到节点?

如何通过小刀搜索和主厨单独搜索,即搜索(:node,"role:some_role")找到节点?
EN

Stack Overflow用户
提问于 2014-01-14 15:36:52
回答 2查看 3.8K关注 0票数 1

我正在尝试用刀单建立几个服务器,我需要在菜谱中使用基本搜索,这样我就可以知道哪些服务器正在实现特定的角色。这似乎是使用搜索最基本的目的。

我正在使用厨师-单独搜索,但我无法找到节点的角色(它似乎是)在文档中描述的;我完全困惑。我可以破解一个解决方案,但我似乎做错了什么。我建立了一个简化的例子来演示我的问题。

这不管用..。

我创建了一个虚拟角色roles/test_role.json

代码语言:javascript
复制
{
   "name": "test_role",
   "default_attributes": {},
   "json_class": "Chef::Role",
   "run_list": [],
   "description": "",
   "override_attributes": {}
}

我测试使用"test_role“角色搜索节点的基本方法:test_role

代码语言:javascript
复制
# required for search with knife-solo
include_recipe "chef-solo-search"

# this is now the test code for chef-solo-search shows to search for nodes that implement a role.
# see https://github.com/edelight/chef-solo-search/blob/master/tests/test_search.rb ~ line 208
nodes = search(:node, "role:test_role")

# This creates a line for each node found in the search...
search_content = nodes.map {|node| "id: #{node['id']}  run_list: #{node['run_list']}\n"}.join

# And writes it to a file
file "/var/test_role_nodes.txt" do
  content search_content
  action :create
end

我创建了两个节点:

nodes/node1.json

代码语言:javascript
复制
{
  "id": "node1",
  "run_list": ["recipe[nodesearch]"]
}

nodes/node2.json

代码语言:javascript
复制
{
  "id": "node2",
  "run_list": ["role[test_role]"]
}

当我“烹饪”node1 (运行nodesearch食谱)时,我期望搜索(:node,"role:test_role")搜索找到node2,但它什么也不返回。我尝试将节点定义移到data_bags目录中,因为文档(在某些地方)似乎意味着这是必要的,而且我尝试过各种带有solo.rb设置的恶作剧,等等。我相信我已经按照文档中的说明设置了厨师单独搜索,而且我没有发现任何错误来指出其他错误。毫无创意。

但这起作用..。

我所做的唯一起作用的事情是:从以下位置重写搜索配方:

代码语言:javascript
复制
nodes = search(:node, "role:test_role")

对此:

代码语言:javascript
复制
nodes = search(:node, "run_list:*role\\[test_role\\]*")

第二种形式实际上给了我想要的结果。这是一个可以接受的解决办法,但似乎有点麻烦,让我纳闷.要么是我做错了什么,要么是所有的刀独行侠和厨师单刀搜索的医生都错了(这似乎是不太可能的!)

有人能帮我解释一下为什么我不能使用搜索(:node,"role:test_role")获得任何搜索结果吗?

(出于许多仔细考虑的原因,我们明确选择不使用厨师服务器解决方案。)

EN

回答 2

Stack Overflow用户

发布于 2014-01-14 20:28:53

主厨Solo不支持搜索:

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

  • 节点数据存储
  • 搜索索引 <-
  • 食谱的集中分发
  • 与基础设施组件交互和集成的集中式API
  • 认证或授权
  • 持久属性

来源:solo.html

票数 0
EN

Stack Overflow用户

发布于 2014-02-11 17:52:45

它不起作用,因为您需要在节点的json文件中指定主厨-单人搜索,才能将其视为真正的节点对象,而不是普通的Hash

代码语言:javascript
复制
"json_class": "Chef::Node"

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

代码语言:javascript
复制
{
  "id": "node2",
  "run_list": ["role[test_role]"]
  "json_class": "Chef::Node"
}

我已经注意到这一点,通过检查厨师的测试-单独搜索,你在第一个答案的最后评论链接。角色搜索测试只在alphabeta节点上运行,而不是在without_json_class节点上运行,我发现了不同之处,即后一个类断言到Hash 这里而不是Chef::Node

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21117479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档