如果“exec”成功,Puppet“require”将忽略

如果“exec”成功,Puppet“require”将忽略
exec { "check_presence":
    command => "/bin/true",
    onlyif => '/usr/bin/test -e /path',
}

file {"/home/user/test.txt":
    ensure => file,
    require => Exec["check_presence"]
}

我不知道我的脚本出了什么问题。我使用 puppet apply test.pp 来运行这个脚本。但无论 /path 是否存在,都会创建文件 test.txt。

我使用的是 puppet 3.4.3。如能得到任何帮助,我将不胜感激。

相关答案:https://serverfault.com/a/516919/428218

答案1

实现此目的的唯一方法(即,仅当其他条件为真或假时才管理目标文件)是为该条件/测试创建自定义事实,然后使用它来将资源包装在条件块中,或使用它来影响资源的属性/参数。例如:

if $::mycustomfact {
  file { '/home/user/test.txt':
    ensure => file,
    ...
  }
}

或者:

file { '/home/user/test.txt':
  ensure => $::mycustomfact ? {
    true    => file,
    default => absent,
  },
  ...
}

答案2

在使用 Puppet 管理文件之前,您无需检查文件是否已存在,如果文件已存在,Puppet 将强制执行配置状态。如果文件不存在,Puppet 将使用您的配置状态创建它。

如果不指定 content/owner/group/mode,Puppet 将仅确保文件存在,如果不存在,则会创建一个空文件。

相关内容