Chef infra 如何在节点上查询cookbook版本?

Chef infra 如何在节点上查询cookbook版本?,chef-infra,chef-recipe,knife,cookbook,Chef Infra,Chef Recipe,Knife,Cookbook,用例: DevOps团队在不久前启动了一个节点,我的团队想知道run_列表中使用的一本或多本食谱的版本是什么。 我们的DevOps团队正在进行消防工作,因此我们希望找到一种自给自足的方式 已尝试命令: 刀烹饪书展示烹饪书给出所有可能的版本,但未指定使用哪一个版本 刀节点show节点显示所有烹饪书,但没有附加版本信息 问题:是否有命令(类似于刀搜索,ohai)来查询chef服务器上部署在节点上的版本 如果您可以使用ssh连接到该框中,您可以在/var/chef/cache/cookbooks//m

用例: DevOps团队在不久前启动了一个节点,我的团队想知道run_列表中使用的一本或多本食谱的版本是什么。 我们的DevOps团队正在进行消防工作,因此我们希望找到一种自给自足的方式

已尝试命令:
刀烹饪书展示烹饪书
给出所有可能的版本,但未指定使用哪一个版本

刀节点show节点
显示所有烹饪书,但没有附加版本信息


问题:是否有命令(类似于
刀搜索
ohai
)来查询chef服务器上部署在节点上的版本

如果您可以使用ssh连接到该框中,您可以在
/var/chef/cache/cookbooks//metadata.json
下查找版本

此外,在厨师运行期间,您可以通过查看
@run\u context.cookbook\u collection
,但这可能没有帮助

通常,cookbook版本是由环境定义的,但由于环境会随着时间的推移而变化,因此您不能真正相信它与上次聚合此节点时使用的集是相同的(特别是如果已经有一段时间了)


到目前为止,您最安全的选择是查看厨师缓存。

我可以想出一个两步解决方案

步骤1:刀节点显示。输出应包括节点上使用的环境


第二步:刀具环境展示。此输出应详细说明节点上部署的所有cookbook及其版本。在我们的组织中,我们使用基本cookbook在节点上设置具有cookbook版本的属性

run_context.cookbook_collection.each do |key, cookbook|
  node.set['base_cookbook']['cookbook_versions'][cookbook.name] = cookbook.version
end
然后,我们可以使用

knife node show <node-name> -a base_cookbook.cookbook_versions
刀节点显示-基本\u cookbook.cookbook\u版本

我不确定通过刀子的方法,但您可以登录到您的托管厨师,并导航到组织的节点部分。单击相关节点名称,并在右下角的
运行列表
下,单击
展开所有
链接。这将向您展示每个菜谱运行时的菜谱版本。

在这篇文章中遇到了这个问题,并最终制定了一个grep命令来完成这项工作

sudo grep -o -e '\"version\"\:\"[a-zA-Z0-9.]*\"' -e '\"version\"\: \"[a-zA-Z0-9.]*\"' /var/chef/cache/cookbooks/*/metadata.json
如果您正在使用ohai(可能是),您可以执行以下操作:

knife search -i 'cookbooks:your-cookbook' -a cookbooks.your-cookbook.version
这将为您提供显示主机名和cookbook版本的输出:

1 items found

server.name.example:
  cookbooks.cs-redis.version: 0.3.2
我正在为Windows客户端使用此(和的版本)

Invoke-Command -ComputerName $nodename -ScriptBlock { gci "c:\chef\cache\cookbooks\*\metadata.rb"  | % { select-string $_ -pattern '^version.*$' } | % { $_.Path.replace('\metadata.rb','') } } -Credential $creds

我有一个类似的需求,我发布了一个新版本的cookbook,并希望找到哪些节点正在使用我的cookbook的最新版本。下面的刀命令对我有用

knife search -i node "cookbooks:<cookbook-name> AND cookbooks_<cookbook-name>_version:100.1.0"
刀搜索-i节点“cookbooks:和cookbooks\u版本:100.1.0”

这将隐藏作为依赖项包含的所有cookbook。只有在明确设置cookbook约束的情况下,环境才能工作。这是一个常见的问题,给我带来了无尽的痛苦。另请参见唯一的限制:所需的根访问:(
-rw------1 root root 590 Jul 20 22:00 metadata.rb
如果您有,可以执行
find/var/chef/cache/cookbooks-type f-name'metadata.json'-exec bash-c“cat{}jshon e name-u-p-e version-u|paste-s-d=”\| sort
我在
metadata.rb
下找到了它,而不是JSON。不过,这可能是Chef 11的事情吗?这将显示食谱,以及嵌套在角色下的食谱,但不会扩展以显示依赖关系。为了完整性,我想知道:这个答案的当前版本是否会保留不再在运行列表中的食谱?它会变成超市里有一本烹饪书实现了同样的技术:我相信你现在可以不用
run\u context
base烹饪书直接做这件事了。也许内置于chef 12中。
刀节点显示-一本烹饪书
适合我。谢谢Beel,当我在tr1,attrib2,etcOr您可以简单地查询您感兴趣的节点,例如:
刀节点显示-cookbooks
谢谢您!我们遇到了一个问题,需要将属性覆盖向后移植到内部cookbook的旧版本,这在查找固定到cookbo旧版本的节点时非常有帮助范围是ok。