gpt4 book ai didi

chef-infra - 如果要安装的所需软件包不存在,如何告诉 Chef 采取措施?

转载 作者:行者123 更新时间:2023-12-04 11:17:41 26 4
gpt4 key购买 nike

我正在尝试让 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

最佳答案

您可以使用 ignore_failure true 安装 Debian 软件包.然后,只有在此时未安装 Debian 软件包的情况下,您才能安装 pip 软件包。这可能看起来像这样:

package node[:bact][:application_name] do
ignore_failure true
end

# Resource available from the opscode python cookbook
python_pip node[:bact][:application_name] do
# Install the pip package only if the debian package is not installed
not_if "dpkg-query -W '#{node[:bact][:application_name]}'"
end

关于chef-infra - 如果要安装的所需软件包不存在,如何告诉 Chef 采取措施?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19944517/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com