使用案例: DevOps团队不久前推出了一个节点,我的团队想知道run_list中使用的一个/几个cookbook的版本是什么。 我们的DevOps团队正在进行消防,因此我们希望找到一种自给自足的方式。
已尝试的命令:
knife cookbook show COOKBOOK
给出所有可能的版本,但不指定使用哪个版本。
knife node show NODE
显示所有食谱,但没有附加版本信息。
问题: 是否有命令(类似于knife search
,ohai
)来查询chef-server上部署的版本节点?
答案 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"