- 对于chef-solo来说,cookbook的依赖关系是噩梦,因为没有chef-server,所有需要的cookbook都需要手动下载下来,尤其麻烦的还是间接的关联的依赖。另外,还有不同版本的cookbook怎么放置的问题。
- metadata.rb无法指定特定OS上是不是需要这个依赖,比如,windows平台不需要用到python cookbook,但是ubuntu需要。因为无法指定依赖和操作系统的关联,所以,在chef-solo上,python cookbook也是必须的,python又依赖于build-essensial。。。我的解决方案是把depends改成recommends
- 碰到莫名其妙的问题的时候,可以检查下cookbook的dependency,另外你的recipe有没有使用了无效的resource。或者语法有错,括号写了一半。
- bash和batch不同,在windows平台上,最好都用batch。(不过要注意,调用其他脚本的时候要用call)
batch "Install Slave" do
cwd buildbot_repo_dir
environment "VS90COMNTOOLS" => "#{ENV['VS100COMNTOOLS']}"
code <<-EOH
call #{virtual_env_dir}/Scripts/activate.bat
#{virtual_env_dir}/Scripts/pip.exe install -e slave
EOH
notifies :run, "batch[Create Slave]", :immediately
end
- 下面这段代码,报了一个错误:“,原因是什么?
cookbook_file "#{deploy_dir}/chef_batch_launcher.exe"
原因是,cookbook里面没有chef_batch_launcher.exe!NND,花了几个小时来调试这个问题!
1. template, cookbook_file, remote_file
这些resource里面有个cookbook
属性,可以很方便的话,引用其他cookbook的文件资源,比如:
cookbook_file “#{deploy_dir}/chef_batch_launcher.exe” do
cookbook “another_cookbook”
end
https://tickets.opscode.com/browse/CHEF-7
1. 写definition要注意,假如引用到了本cookbook的静态资源(文件,erb等)的话,一定要显式的指定这个resource所引用的文件是来自本cookbook的,比如:
cookbook: buildbot_slave
define :buildbot_slave_windows do
template "#{build_slave_root_info_dir}/host" do
source 'host.erb'
cookbook 'buildbot_slave'
variables :node => node
end
cookbook_file "#{deploy_dir}/chef_batch_launcher.exe" do
cookbook 'buildbot_slave'
end
end
- 一定要加括号,header不加括号就报错:
http_request 'Creating Message Queue' do
action :get
url "http://localhost:15672/api/queues"
message ''
headers({"Authorization" => "Basic #{Base64.encode64("guest:guest")}", "Content-Type" => "application/json"})
end