chefspecを使用して単体テストを実行しようとしています。レシピにデータバッグを追加しました。データバッグがなければ、chefspecテストは正常に動作します。以下のエラーを示すデータバッグを追加した後:データバッグを持つchefspecテストを実行できません
1) database::prerequisites installs a package
Failure/Error: let(:chef_run) { ChefSpec::ServerRunner.new(platform: 'oracle', version: '7.2').converge(described_recipe) }
Net::HTTPServerException:
404 "Not Found "
# /tmp/chefspec20170616-8187-olziw2file_cache_path/cookbooks/database/recipes/prerequisites.rb:9:in `from_file'
# ./prerequisites_spec.rb:4:in `block (2 levels) in <top (required)>'
# ./prerequisites_spec.rb:25:in `block (2 levels) in <top (required)>'
私はchefspecでデータバッグを扱う方法を知らない。ワークステーションでchef-clientを使ってレシピを実行するとうまくいきます。シェフスペックのテストは失敗しています。
レシピspecファイル:
require 'chefspec'
describe 'database::prerequisites' do
let(:chef_run) { ChefSpec::ServerRunner.new(platform: 'oracle', version: '7.2').converge(described_recipe) }
before(:each) do
stub_command("cat /etc/oracle-release | grep 7.*").and_return(true)
end
before(:each) do
stub_command("cat /etc/oracle-release | grep 6.*").and_return(true)
end
before(:each) do
stub_command("cat /etc/selinux/config | grep SELINUX=disabled").and_return(true)
end
before(:each) do
stub_command("sestatus | grep enabled").and_return(true)
end
it 'installs a package ' do
expect(chef_run).to install_package('oracle-rdbms-server-12cR1-preinstall')
expect(chef_run).to install_package('net-tools')
expect(chef_run).to install_package('xorg-x11-apps')
end
it 'creates a directory with the default action' do
expect(chef_run).to create_directory('/u01/app/oraInventory')
expect(chef_run).to create_directory('/oradata')
end
end
レシピファイル:
my_secret_key = Chef::EncryptedDataBagItem.load_secret("/etc/secret_key")
passwords = Chef::EncryptedDataBagItem.load("databags", "databag_passwords", my_secret_key)
あなたがこの問題を解決する方法を提案してくださいでした。私はシェフのワークステーションでのみテストを行っています。
なぜ 'data_bag_item'レシピDSLメソッド([Documentation here](https://docs.chef.io/dsl_recipe.html#data-bag-item))を使用しないのですか? – Tensibai
ありがとうございました。しかし、私は同じエラーが発生しました。シェフのレシピの実行はうまくいった。テストでも同じエラーが発生しています。 –