如何查询节点上的cookbook版本?

问题描述 投票:16回答:7

用例:DevOps团队不久前推出了一个节点,我的团队想知道run_list中使用的一个/几个cookbook的版本是什么。我们的DevOps团队正在进行消防,因此我们希望找到一种自给自足的方法。

已尝试的命令:knife cookbook show COOKBOOK提供所有可能的版本,但未指定使用哪个版本。

knife node show NODE显示所有烹饪书,但没有附加版本信息。

问题:是否有命令(类似于knife searchohai)查询chef-server以查找节点上部署的版本?

chef chef-recipe knife cookbook
7个回答
12
投票

如果你可以在框中搜索,你可以在/var/chef/cache/cookbooks/<cookbook name>/metadata.json下查找版本。

此外,你可以通过查看@run_context.cookbook_collection在厨师运行期间访问它,但这可能没有帮助。

通常,cookbook版本是由环境定义的,但是由于环境会随着时间的推移而发生变化,因此您无法真正相信这个节点与此节点最后一次融合时使用的集合(特别是如果它已经有一段时间了)。

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


5
投票

在我们的组织中,我们使用基本食谱在节点上使用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

5
投票

如果你正在使用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

0
投票

我可以想到两个步骤的解决方案。

第1步:刀节点显示<%node-name%>。输出应包括节点上使用的环境。

第2步:刀环境显示<%environment-name%>。此输出应详细说明在节点上部署的所有烹饪书及其版本


0
投票

我不确定通过刀具的方式,但您可以登录https://manage.chef.io的管理主厨并导航到您组织的节点部分。单击有问题的节点名称,在右下角的Run List下,单击Expand All链接。这将显示每个食谱运行的菜谱版本。


0
投票

遇到这篇文章并最终制定了一个grep命令来执行此操作。

sudo grep -o -e '\"version\"\:\"[a-zA-Z0-9.]*\"' -e '\"version\"\: \"[a-zA-Z0-9.]*\"' /var/chef/cache/cookbooks/*/metadata.json

0
投票

我正在为Windows客户端使用此(和版本)

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

0
投票

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

knife search -i node "cookbooks:<cookbook-name> AND cookbooks_<cookbook-name>_version:100.1.0"
© www.soinside.com 2019 - 2024. All rights reserved.