我正在尝试让 Chef 执行以下操作:
- 检查所需的 debian(实际上可以是任何包)是否可用
- 如果是,apt-get 安装包
- 如果不是,请使用源代码构建包
我知道你可以这样做:
remote_file "some remote file" do
...
not_if "apt-cache search 'mypackage'"
end
但是,我尝试了:
ruby_block "Attempting to install #{node[:bact][:application_name]}" do
block do
cmd = Chef::ShellOut.new("apt-get install -y --force-yes #{node[:bact][:application_name]}")
exec_result = cmd.run_command
if exec_result.exitstatus != 0
Chef::Log.info 'Go grab some coffee, this might be a while....'
resources("execute[install-#{node[:bact][:application_name]}-via-pip]").run_action(:run)
end
end
action :create
end
有没有更简单、更不丑陋的方法来做到这一点?
基本上,我最想做的是:
begin
package 'some-package-name' do
action :install
done
rescue Chef::Exception
# Do something here
end