3

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
4

1 に答える 1