如何查看节点安装的软件包版本?

2023-11-24

我正在调整 Apache 食谱以与 2.4 Apache 一起使用。 Opscode Cookbook 目前失败,因为它正在生成带有 LockFile 关键字的 conf 文件,该关键字被排除在 Apache 2.4 关键字列表之外。

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

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

注意:请不要告诉我将命令传递给底层 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>"] e.g. node["package_version"]["glibc"]。我让它适用于 5 个平台系列,但对于 Arch,你必须确保你有package-query安装。

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

#example package instalation
package "whatever"

ohai "reload_ohai" do
  action :reload
end

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何查看节点安装的软件包版本? 的相关文章

随机推荐

  • cordova windows 错误:找不到“cordova/windows8/commandProxy”

    我构建了一个基于 Cordova 的 Windows 应用程序 一旦我添加任何插件 应用程序就会开始崩溃 但出现异常cordova windows8 commandProxy not found 科尔多瓦版本 4 3 0 看起来cordov
  • 如何比较不同 Keras 模型的权重?

    我已经以 h5 格式保存了许多模型 我想比较他们的特征 例如重量 我不知道如何以表格和数字的形式适当地比较它们 提前致谢 体重内省是一项相当高级的工作 需要针对特定 模型的处理 可视化权重在很大程度上是一项技术挑战 但如何处理这些信息则是另
  • Julia:将元素附加到自定义类型数组

    在 Julia 中将元素附加到数组的工作方式如下 v Array Int32 1 0 append v 1 append v 2 println v prints Int32 1 2 当我尝试使用自定义类型时 type Node label
  • JsonProperty - 使用不同的名称进行反序列化,但使用原始名称进行序列化?

    我正在从 API 检索 JSON 我正在使用 newtonsoft 这是 json net 对吗 将其反序列化为对象列表 有用 不幸的是 我还需要将其作为 JSON 传递给其他人 他们不能直接调用 API 只有我有权访问它 我说不幸的是 因
  • 是否可以从 Groovy 脚本测试步骤运行其他测试用例中的特定测试步骤

    是否可以从 Groovy 脚本测试步骤运行其他测试用例中的特定测试步骤 不知道该怎么做 谢谢 对的 这是可能的 从 groovy 步骤中 您可以访问 testRunner 您可以使用它来访问soapUI 中的其他所有内容 并且可以在另一个测
  • 如何在 .Net Core 3.1 中禁用 OpenId 连接时的 ssl 证书验证?

    我正在尝试在开发环境中使用其 IP 地址连接到开放 ID 机构 显然 在这种情况下 ssl 验证将失败 我想绕过它 到目前为止没有任何运气 我找到了有关该主题的以下答案 在 OpenIdConnectOptions 类中将 RequireH
  • 术语“cmake”未被识别为 cmdlet 的名称

    我正在尝试在 Windows 10 的命令行中使用 CMake 这以前可以工作 但我不知道为什么它不再工作了 我安装了新版本的 CMake 并将路径添加到环境变量中 但是 当尝试在 Powershell 中使用它时 如下所示 cmake G
  • 为什么 GHCi 输入这个语句很奇怪?

    在回答 stackoverflow 上的问题时 我注意到 GHCi 交互式 在let陈述 也就是说 给定代码 import Control Arrow f maximum id gt gt gt fst m l gt length filt
  • 如何在 Spring Security 中设置自定义无效会话策略

    我正在开发一个基于 Spring Boot 1 1 6 Spring Security 3 2 5 等的 Web 应用程序 我正在使用基于 Java 的配置 Configuration EnableWebMvcSecurity public
  • 当格式已知时从字符串解析 JSON 的最快方法

    我想在 Java 中将 String 解析为内部 JSON 对象 或等效对象 平常的图书馆 Gson and Jackson 对于我的需求来说太慢了 根据我的基准 每个字符串到 Json 解析 gt 100us 我知道有稍微快一点的库 但是
  • 使用 ShouldBeEquivalentTo 时如何排除 IEnumerable 中所有项目的属性?

    在我的 NUnit FluentAssertions 测试中 我使用以下代码将从系统返回的复杂对象与参考对象进行比较 response ShouldBeEquivalentTo reference o gt o Excluding x gt
  • 让 JRebel 与“mvn tomcat:run”一起使用

    我想知道当我从命令行执行 mvn tomcat run 时是否有人可以指出让 JRebel 工作的方向 我可以让 JRebel 在我的 IDE IntelliJ IDEA 中工作 但在 IDE 中运行感觉有点笨重 当我运行测试时 我不喜欢在
  • 将终端光标返回到行首并启用换行

    我正在编写一个过滤器 在用于终端输出的管道中 有时需要 覆盖 刚刚发生的行 它的工作原理是将标准输入逐个字符地传递到标准输出 直到 n达到 然后调用特殊行为 我的问题是如何返回到行的开头 我首先想到的是使用 r或 ANSI 序列 033 1
  • SQL Server 存储过程初学者指南 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 请推荐一些带有快速指南的网
  • 什么是 .NET RIA 服务?

    有人可以简单地解释一下吗 它可以与非 Silverlight 客户端一起使用吗 基本上 NET RIA 服务是一个框架 它隐藏了网络管道逻辑以处理有线 RPC 并在客户端和服务器之间桥接代码 您可以将其视为客户端 服务器开发的 RAD 来自
  • 使用正则表达式验证 url [重复]

    这个问题在这里已经有答案了 我已经尝试了所有可能的方法来使用正则表达式进行 url 验证 但我没有得到任何 我需要的是网址可以是这样的 google com http google com https google com http www
  • 使用 Spring Boot 进行客户端证书身份验证

    我需要导入证书才能向 Spring Boot 应用程序中的外部服务发出 http 请求 我如何设置 Spring Boot 才能做到这一点 那里有很多信息 但我发现它们有点令人困惑 似乎我可能只需要创建类似 truststore jks 密
  • 如何获取树结构中节点的所有子节点? SQL查询?

    表 用户 列 用户 ID 姓名 经理 ID rows 1 nilesh 0 2 nikhil 1 3 nitin 2 4 Ruchi 2 如果我提供用户 ID 它应该列出所有向他报告的人员 如果我给 userId 2 它应该返回 3 4 这
  • GCC - 仅在特定函数上启用编译器标志

    在我正在从事的一个项目中 我正在尝试优化的大文件中有一个四重嵌套的 for 循环 我认为这会受益于使用 funroll all loops 展开的编译器 但是 当我将此标志添加到编译器时 它会展开文件其余部分的其他循环 并使整个程序运行得更
  • 如何查看节点安装的软件包版本?

    我正在调整 Apache 食谱以与 2 4 Apache 一起使用 Opscode Cookbook 目前失败 因为它正在生成带有 LockFile 关键字的 conf 文件 该关键字被排除在 Apache 2 4 关键字列表之外 我想制定