验证来自节点属性的包是否已安装
Verify package from node attributes was installed
我有一本安装由节点属性提供的软件包列表的食谱。是否可以使用 chefspec 测试这种类型的包安装?就像现在一样,我收到一个错误:
1) foo::default installs test-package-1
Failure/Error: expect(chef_run).to install_package(pkg)
expected "package[test-package-1]" with action :install to be in Chef run. Other package resources:
package[["test-package-1", "1.0.0"]]
package[["test-package-2", "1.2.3"]]
Chefspec 没有看到正在安装该软件包,即使它就在那里列出!当然,我在这里遗漏了一些明显的东西。
这是相关的食谱文件:
attributes/default.rb
node.default['foo']['packages'] = {
'test-package-1' => '1.0.0',
'test-package-2' => '1.2.3'
}
recipes/default.rb
node['foo']['packages'].each do |pkg|
package pkg do
version node['foo']['packages'][pkg]
action :install
end
end
spec/default_spec.rb
describe "foo::default" do
let(:chef_run) { ChefSpec::SoloRunner.converge(described_recipe) }
%w(
test-package-1
test-package-2
).each do |pkg|
it "installs #{pkg}" do
expect(chef_run).to install_package(pkg)
end
end
end
Ruby 的 Hash#each
是 each_pair
的别名,而不是 each_key
。这与 Python 和 JavaScript 等默认迭代键的语言不同。在这种情况下,您的测试是正确的,表明您的食谱代码是错误的:-)
node['foo']['packages'].each do |pkg, pkg_ver|
package pkg do
version pkg_ver
action :install
end
end
我有一本安装由节点属性提供的软件包列表的食谱。是否可以使用 chefspec 测试这种类型的包安装?就像现在一样,我收到一个错误:
1) foo::default installs test-package-1
Failure/Error: expect(chef_run).to install_package(pkg)
expected "package[test-package-1]" with action :install to be in Chef run. Other package resources:
package[["test-package-1", "1.0.0"]]
package[["test-package-2", "1.2.3"]]
Chefspec 没有看到正在安装该软件包,即使它就在那里列出!当然,我在这里遗漏了一些明显的东西。
这是相关的食谱文件:
attributes/default.rb
node.default['foo']['packages'] = {
'test-package-1' => '1.0.0',
'test-package-2' => '1.2.3'
}
recipes/default.rb
node['foo']['packages'].each do |pkg|
package pkg do
version node['foo']['packages'][pkg]
action :install
end
end
spec/default_spec.rb
describe "foo::default" do
let(:chef_run) { ChefSpec::SoloRunner.converge(described_recipe) }
%w(
test-package-1
test-package-2
).each do |pkg|
it "installs #{pkg}" do
expect(chef_run).to install_package(pkg)
end
end
end
Ruby 的 Hash#each
是 each_pair
的别名,而不是 each_key
。这与 Python 和 JavaScript 等默认迭代键的语言不同。在这种情况下,您的测试是正确的,表明您的食谱代码是错误的:-)
node['foo']['packages'].each do |pkg, pkg_ver|
package pkg do
version pkg_ver
action :install
end
end