Ruby 厨师长仅在执行资源时理解

Ruby 厨师长仅在执行资源时理解,ruby,chef-infra,devops,Ruby,Chef Infra,Devops,这里有一个执行块,看起来像这样 execute 'uninstall_datadog' do command 'sudo apt-get --purge remove datadog-agent -y' only_if 'command -v datadog-agent' end 因此,我的理解是,如果的退出状态仅当不是0时,此块将不会执行。这是真的吗?是的 但是,我发现您的示例存在一些问题: 内置的包资源可以在安装包的情况下删除包 如果软件包没有安装(不再安装),chef将跳过它。

这里有一个执行块,看起来像这样

execute 'uninstall_datadog' do
  command 'sudo apt-get --purge remove datadog-agent -y'
  only_if 'command -v datadog-agent'
end
因此,我的理解是,如果
的退出状态仅当
不是
0
时,此块将不会执行。这是真的吗?

是的

但是,我发现您的示例存在一些问题:

  • 内置的
    资源可以在安装包的情况下删除包 如果软件包没有安装(不再安装),chef将跳过它。 有关更多详细信息,请参阅

  • 通常chef以root用户身份运行,因此
    execute
    命令中不需要
    sudo
    命令

  • 仅当默认情况下在chef client/chef solo/chef apply流程的环境中运行时。请参见,当模拟为另一个用户时,您必须调整环境变量,如
    PATH


  • 命令
    是一个bash内置命令,看起来可能不是作为bash执行的。
    bash-c“command-vdatadog代理”
    可以工作,但也可以使用
    哪个datadog代理来代替。

    Nice这肯定是一个更好的方法
      package 'datadog-agent' do
        action :purge
        options '--yes' # not sure about this
      end