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

时间:2015-06-22 18:52:00

标签: chef chef-recipe knife cookbook

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

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

knife node show NODE显示所有食谱,但没有附加版本信息。

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

8 个答案:

答案 0 :(得分:12)

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

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

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

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

答案 1 :(得分: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

答案 2 :(得分: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

答案 3 :(得分:0)

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

步骤1:刀节点显示&lt;%node-name%&gt;。输出应包括节点上使用的环境。

步骤2:刀具环境显示&lt;%environment-name%&gt;。此输出应详细说明节点上部署的所有烹饪书及其版本

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

我正在Windows客户端上使用此版本(及其版本)

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

答案 7 :(得分:0)

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

knife search -i node "cookbooks:<cookbook-name> AND cookbooks_<cookbook-name>_version:100.1.0"