2

我正在开发一些服务器无法访问互联网的基础架构,因此我必须在声明将它们安装在 Chef 上之前将包推送到本地存储库。

但是,我们遇到了 Chef 无法安装软件包的情况,因为该软件包在某些盒子上不存在,而在其他一些盒子上却成功了。

我想要做的是在节点上应用 Chef 配置之前运行 Ruby/RSpec 测试,以确保在配方上声明的包确实存在于 repo 中。

为了做到这一点,我需要能够列出我们的食谱中存在的所有包。

我的问题是:有没有在 Chef 中列出所有声明的包?我快速浏览了Chef::PlatformChefSpec,但不幸的是找不到任何对我的问题有用的东西。

你知道哪里是最好看的地方吗?

4

2 回答 2

3

如果你使用 ChefSpec,你可以通过调用chef_run.find_resources(:package)一些测试来找到所有的包。请参阅源代码。像这样:

require 'chefspec'

describe 'example::default' do
  let(:chef_run) { ChefSpec::Runner.new.converge(described_recipe) }

  it 'does something' do
    chef_run.find_resources(:package)...
  end
end
于 2014-01-27T15:44:41.840 回答
1

您可以安装一个或多个社区 ohai 插件。例如,以下将返回有关已安装软件的信息:

启用插件后,它们将添加可从 chef-server 搜索的其他节点属性。

于 2014-01-27T22:09:12.187 回答