gpt4 book ai didi

chef-infra - 如何查看节点上安装的软件包版本?

转载 作者:行者123 更新时间:2023-12-04 23:51:39 26 4
gpt4 key购买 nike

我正在改编 Apache Recipe 以与 2.4 Apache 一起使用。 Opscode 说明书当前失败,因为它生成的 conf 文件包含从 Apache 2.4 关键字列表中排除的 LockFile 关键字。

我想制定一个通用的解决方案,并根据软件版本填充我的 conf 文件。为此,我必须找出已安装软件的版本。同样的问题已经困扰我一段时间了,但我一直在设法避免它。由于我一遍又一遍地讨论它,我想问:

如何找出已安装软件包/软件的版本,如果 Recipe 没有指定它,即安装最新的可用版本?

注意:请不要告诉我将命令传递给底层 shell。我想知道是否有更好的,更多的……Chefy 方式?也许与奥海有关?

编辑:似乎我被误解了。我想知道是否有一种解决方案可以抽象平台层(就像 Ohai 所做的那样),我会在其中说类似 gimme_version('apache') 的内容。并获取已安装的 apache 版本。我想避免写 case node['platform_family'] when... when... when里面有平台特定的代码。

最佳答案

我创建了 Ohai 插件,为我解决了这个问题。将以下代码放入.rb文件中,并将文件放入ohai/plugin/linux文件夹。 (不能提供绝对路径,因为它因平台和安装类型而异)

Ohai.plugin(:PackageVersion) do
provides "package_version"

depends "platform_family"

collect_data do
pckg_list = Hash.new
case platform_family
when 'debian'
pckg_list = eval '{'+`dpkg-query -W -f='"${Package}"=> "${Version}", '`+'}'
when 'rhel' || 'fedora'
pckg_list = eval '{'+`rpm -qa --queryformat '"%{NAME}"=> "%{VERSION}", '`+'}'
when 'arch'
pckg_list = eval '{'+`package-query -Q -f '"%n"=> "%v", '`+'}'
when 'gentoo'
pckg_list = eval '{'+`equery list --format='"$name" => "$version", ' '*'`+'}'
end
package_version Mash.new pckg_list
end
end

下次运行 Chef 时,包版本信息将在 node["package_version"]["<package_name>"]例如 node["package_version"]["glibc"] .我让它适用于 5 个平台系列,但对于 Arch,你必须确保你有 package-query安装。

重要提示 :在执行 Chef 配方之前加载/填充 Ohai。此解决方案将 不是 自动更新 Ohai,因此如果您想访问新安装/升级包的数据,在当前 Chef 运行期间,您必须手动重新加载 Ohai。为此,请将以下块放置在包安装/升级块下的配方中,如下所示:
#example package instalation
package "whatever"

ohai "reload_ohai" do
action :reload
end

感谢@markoconnor。该解决方案基于他指出的社区插件。那些不再在线。我调整了它们以与 Chef 11.0+ 一起使用,它们就在这里。

关于chef-infra - 如何查看节点上安装的软件包版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22179193/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com