如何查询节点上的食谱版本?
How to query cookbook versions on a node?
用例:
DevOps 团队前段时间启动了一个节点,我的团队想知道 run_list 中使用的 one/several 食谱的版本是什么。
我们的 DevOps 团队正在救火,所以我们想找到一种自给自足的方法。
尝试的命令:
knife cookbook show COOKBOOK
给出了所有可能的版本,但没有指定使用的是哪一个。
knife node show NODE
显示所有食谱,但没有附加版本信息。
问题:是否有命令(类似knife search
、ohai
的东西)查询节点上部署的版本的厨师服务器?
如果您可以通过 ssh 进入该框,您可以在 /var/chef/cache/cookbooks/<cookbook name>/metadata.json
下查找版本。
此外,您可以在主厨 运行 期间访问它,方法是查看
@run_context.cookbook_collection
,但这可能无济于事。
通常,说明书版本由环境定义,但由于环境随时间而变化,您不能真正相信它与此节点上次收敛时使用的是同一组(尤其是已经有一段时间了) .
到目前为止,最安全的选择是查看 chef 缓存。
我可以想到一个两步解决方案。
第 1 步:knife 节点显示 <%node-name%>。输出应包括节点上正在使用的环境。
第 2 步:knife 环境显示 <%environment-name%>。此输出应详细说明正在节点上部署的所有说明书及其版本
在我们的组织中,我们使用基本说明书在具有说明书版本的节点上设置属性。
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
我不确定通过 knife 的方式,但您可以在 https://manage.chef.io 登录您的 Managed Chef,然后导航到您组织的节点部分。单击有问题的节点名称,然后在右下角 Run List
下单击 Expand All
link。这将向您显示每个食谱的食谱版本 运行 as.
遇到这个 post 并最终制定了一个 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
这将为您提供显示主机名和说明书版本的输出:
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
我有一个类似的要求,我发布了一个新版本的说明书,并想找到哪些节点正在使用我的最新版本的说明书。下面的刀命令对我有用。
knife search -i node "cookbooks:<cookbook-name> AND cookbooks_<cookbook-name>_version:100.1.0"
用例: DevOps 团队前段时间启动了一个节点,我的团队想知道 run_list 中使用的 one/several 食谱的版本是什么。 我们的 DevOps 团队正在救火,所以我们想找到一种自给自足的方法。
尝试的命令:
knife cookbook show COOKBOOK
给出了所有可能的版本,但没有指定使用的是哪一个。
knife node show NODE
显示所有食谱,但没有附加版本信息。
问题:是否有命令(类似knife search
、ohai
的东西)查询节点上部署的版本的厨师服务器?
如果您可以通过 ssh 进入该框,您可以在 /var/chef/cache/cookbooks/<cookbook name>/metadata.json
下查找版本。
此外,您可以在主厨 运行 期间访问它,方法是查看
@run_context.cookbook_collection
,但这可能无济于事。
通常,说明书版本由环境定义,但由于环境随时间而变化,您不能真正相信它与此节点上次收敛时使用的是同一组(尤其是已经有一段时间了) .
到目前为止,最安全的选择是查看 chef 缓存。
我可以想到一个两步解决方案。
第 1 步:knife 节点显示 <%node-name%>。输出应包括节点上正在使用的环境。
第 2 步:knife 环境显示 <%environment-name%>。此输出应详细说明正在节点上部署的所有说明书及其版本
在我们的组织中,我们使用基本说明书在具有说明书版本的节点上设置属性。
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
我不确定通过 knife 的方式,但您可以在 https://manage.chef.io 登录您的 Managed Chef,然后导航到您组织的节点部分。单击有问题的节点名称,然后在右下角 Run List
下单击 Expand All
link。这将向您显示每个食谱的食谱版本 运行 as.
遇到这个 post 并最终制定了一个 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
这将为您提供显示主机名和说明书版本的输出:
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
我有一个类似的要求,我发布了一个新版本的说明书,并想找到哪些节点正在使用我的最新版本的说明书。下面的刀命令对我有用。
knife search -i node "cookbooks:<cookbook-name> AND cookbooks_<cookbook-name>_version:100.1.0"