Chef不爽的地方

  1. 对于chef-solo来说,cookbook的依赖关系是噩梦,因为没有chef-server,所有需要的cookbook都需要手动下载下来,尤其麻烦的还是间接的关联的依赖。另外,还有不同版本的cookbook怎么放置的问题。
  2. metadata.rb无法指定特定OS上是不是需要这个依赖,比如,windows平台不需要用到python cookbook,但是ubuntu需要。因为无法指定依赖和操作系统的关联,所以,在chef-solo上,python cookbook也是必须的,python又依赖于build-essensial。。。我的解决方案是把depends改成recommends
  3. 碰到莫名其妙的问题的时候,可以检查下cookbook的dependency,另外你的recipe有没有使用了无效的resource。或者语法有错,括号写了一半。
  4. 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
  1. 下面这段代码,报了一个错误:“,原因是什么?
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 
  1. 一定要加括号,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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值