我正在尝试编写一个模块,如果目录存在则创建文件,否则它不应该执行任何操作。
class puppetmodule{
exec { 'chk_dir_exists':
command => 'test -d /usr/dir1',
path => ["/usr/bin","/usr/sbin", "/bin"],
} ->
file {'usr/dir1/test.txt':
ensure => 'file',
owner => 'root',
group => 'root',
mode => '0750',
}
}
以下是它抛出的错误。请给我一些建议。
错误:test -d /usr/dir1 返回 1,而不是 [0] 之一
答案1
类似这样的事情会起作用:
$dir = "/usr/dir1"
exec { "chk_${dir}_exist":
command => "true",
path => ["/usr/bin","/usr/sbin", "/bin"],
onlyif => "test -d ${dir}"
}
file {"${dir}/test.txt":
ensure => file,
owner => 'root',
group => 'root',
mode => '0750',
require => Exec["chk_${dir}_exist"],
}
解释:
onlyif => "test -d ${dir}"
test -d
意味着只有 的输出为真时,才会创建 Exec 资源。
require => Exec["chk_${dir}_exist"]
表示仅当 Exec 资源存在时才会创建 File 资源。
如果目录不存在,puppet 运行将生成错误,表明无法创建文件资源,因为 Exec 资源不存在。这是预料之中的,可以放心忽略,因为 puppet 目录的其余部分仍会应用。
如果目录存在,则创建并应用文件资源。
答案2
Puppet 是关于最终状态的。您可以确保文件存在且处于您指定的状态或不存在。如果您需要进行一些分支(如果) 逻辑,Puppet 也支持该逻辑。请参阅文档中的条件语句 -https://puppet.com/docs/puppet/latest/lang_conditional.html
$directory_exists = <insert logic here>
if $directory_exists {
file {'usr/dir1/test.txt':
ensure => 'file',
owner => 'root',
group => 'root',
mode => '0750',
}
}