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。如能得到任何帮助,我将不胜感激。
答案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 将仅确保文件存在,如果不存在,则会创建一个空文件。