我没有在其他地方找到一个很好的解决方案,我认为集成测试是必要的,因为:
chef-client
并获得错误配置的风险答案 0 :(得分:4)
您可能正在寻找linting +集成测试。
Linting:使用Foodcritic。它也适用于您的CI工具。如果您想要更具冒险精神,并希望针对ruby最佳实践进行测试,请使用Rubocop。
单元测试:您提到的Chef Spec
测试厨房:这是纯粹的集成测试。它实际上是一个框架,你可以选择使用哪个驱动程序(vm,云等)使用哪个供应商(厨师,pupept,ansible等),以及使用哪个测试套件(bash / bats,serverspec)等。
除此之外,当您无法访问真实服务器时,Chef Zero非常适合测试厨师服务器。它在内存中,逻辑上类型的短暂服务器模拟器。
答案 1 :(得分:1)
主厨零是这个非常古老的问题的答案。它确实处理加密的数据库。
在套件中,您可以提供以下
data_bags_path: <<Data_Bags_PATH>>
encrypted_data_bag_secret_key_path: <<Secret_Key_PATH>>
答案 2 :(得分:0)
CHEF_TEST=true
export CHEF_TEST=true
./update_all.bash
knife bootstrap
以测试流浪者。<强> knife.rb 强>
current_dir = File.dirname(__FILE__)
log_level :info
log_location STDOUT
if ENV['CHEF_TEST'] == 'true'
puts 'Running knife on test chef server...'
node_name "acmetest"
client_key "#{current_dir}/acmetest.pem"
validation_client_name "acmetest-validator"
validation_key "#{current_dir}/acmetest-validator.pem"
chef_server_url "https://api.opscode.com/organizations/acmetest"
cache_type 'BasicFile'
cache_options( :path => "#{ENV['HOME']}/.chef/checksums" )
cookbook_path ["#{current_dir}/../cookbooks"]
else
puts 'Running knife on production chef server...'
node_name "acme"
client_key "#{current_dir}/acme.pem"
validation_client_name "acme-validator"
validation_key "#{current_dir}/acme-validator.pem"
chef_server_url "https://api.opscode.com/organizations/acme"
cache_type 'BasicFile'
cache_options path: "#{ENV['HOME']}/.chef/checksums"
cookbook_path ["#{current_dir}/../cookbooks"]
end
<强> update_all.bash 强>
#!/bin/bash
knife cookbook upload --all
knife role from file roles/*.rb
knife data bag from file --all
knife environment from file --all