【问题标题】:Chef understanding only_if in execute resource厨师在执行资源中理解 only_if
【发布时间】:2019-05-03 04:32:57
【问题描述】:

我这里有一个如下所示的执行块

execute 'uninstall_datadog' do
  command 'sudo apt-get --purge remove datadog-agent -y'
  only_if 'command -v datadog-agent'
end

所以我的理解是如果only_if 的退出状态不是0 那么这个块将不会执行。这是真的吗?

【问题讨论】:

    标签: ruby chef-infra devops


    【解决方案1】:

    是的。

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

    1. 内置的package 资源可以删除已安装的包。
      package 'datadog-agent' do
        action :purge
        options '--yes' # not sure about this
      end
    

    如果软件包没有安装(不再),厨师将跳过它。 详情请见https://docs.chef.io/resource_package.html

    1. 通常 chef 以 root 身份运行,因此 execute 命令中不需要 sudo 命令。

    2. only_if 默认运行在 chef-client/chef-solo/chef-apply 进程的环境中。请参阅https://docs.chef.io/resource_common.html#arguments,当您冒充为其他用户时,您必须调整环境变量,例如PATH

    【讨论】:

    • 很好,这绝对是一个更好的方法
    【解决方案2】:

    command 是一个 bash 内置函数,看起来可能不会作为 bash 执行。 bash -c "command -v datadog-agent" 可以使用,但也可以使用 which datadog-agent

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-02
      相关资源
      最近更新 更多